Python与Appium实现手机APP自动化测试的示例代码

news2024/12/27 13:56:39

本文主要介绍了Python与Appium实现手机APP自动化测试的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

1.什么是Appium

appium是一个开源的测试自动化框架,可以与原生的、混合的和移动的web应用程序一直使用。它使用WebDriver协议驱动IOS(内置的测试引擎xcuitest)、Android(uiautomator2,Espresso)和Windows应用程序

原生应用程序:安卓程序是用JAVA或kotlin开发出来的,这种程序是原生应用程序,原生应用比较流畅,好调用,缺点是不同的端需要的开发语言不同

web应用程序:就web应用程序可以直接放到手机端来运行,web是用html+css+js编写的

混合应用程序:结合原生与web应用程序,有些页面用原生的,有些页面使用web应用程序

国内比较出名的框架:

  • appium

  • airtest 现在是由阿里在维护,最开始是运用在游戏测试,和appium的功能差不多

  • uiautomator2(用法简单,非常python,只支持原生的,不支持其他)

设计哲学:

  • 你没有必要为了自动化而重新编译你的应用或者经任何方式修改它(Android/IOS系统自带框架)

  • 你不应该被限制在特定的语言或框架上来编写运行测试(API调用,接口)

  • 移动端自动化框架在自动化接口方面不应该重造轮子(WebDriver,appium是在selenium的基础上开发的)

  • 移动端自动化框架应该开源,不但是在名义上而且在精神和实践上都要实至名归

2.启动一个app自动化程序的步骤

打开模拟器,或者连接上手机(注意开发者模式以及USB调试模式已经开启,手机授权要确认,否则是连接不上的)

在命令窗口输入adb devices(查看设备名称)


开启appium服务appium客户端代码连接服务

3.appium服务介绍

中文设置


除了简单设置,还有一些高级设置,我们可以看一下

在这里插入图片描述

在这里插入图片描述
保存了可以查看预设,方便以后使用


编辑配置是进入修改环境变量


在这里插入图片描述
主机和端口号不需要设置,直接可以开启服务器


开启后,可以看到服务器运行中,右边三个按钮的功能分别是启动检查器会话,获取原始日志,停止运行服务器


点击后自动经记事本打开,如果安装了其他编辑软件,可以选择打开方式



服务开启后,就可以使用python来进行客户端来连接服务

4. appium客户端使用

使用前确定已经安装了,pip install appium-python-client,安装后,直接导入使用

看一下Remote的源代码

在这里插入图片描述
在这里插入图片描述
同时appium服务端也会显示500的错误

在这里插入图片描述
犹豫appium1.20.2版本的,不像之前的版本需要传入的必须参数多了,现在只需要传platformName即可,所以具体可以看自己安装的是什么版本,不过加上更多参数也不受影响


在这里插入图片描述
常用的caps参数:

  • platformName 平台名称(Android,IOS)

  • 必选deviceName 设备名称(可选)


udid (和deviceName作用一样,在不同版本下这个参数重好用,所以以后用udid代替deviceName)

app apk的存放路径(可选)

appActivity(页面名称,相当于web页面中title) 和 appPackage(包名)

platformVersion 系统版本号(可选,版本不匹配会报错)

noReset 选择True 不重启(意思是app的引导页面,缓存数据等不清空,如果选择False,app相当于重新安装了,把之前的数据都清空了)

automationName 驱动名称

browserName 直接测web用Chrome

autoWebview 开机进入webview模式(开机直接进入网页模式,不需要进入原生页面)

chromedriverExecutable 网页浏览器驱动所放路径(必须是完整路径)

chromedriverExecutableDir 网页浏览器驱动所放目录

unicodekeyboard 开启unicode编码形式的键盘

resetKeyboard 重启键盘 (和上一个一块配置,两个都设置成True,就可以开启中文输入,相当于我们的电脑安装输入法)

autoGrantPermissions 开启手机权限(相当于web端中弹出来的alert弹框,无法定位元素,设置了True,就方便定位元素)

官网上还有很多用法,感兴趣的可以参考一下:

https://appium.io/docs/en/writing-running-appium/caps/

通过adb获取appPackage和appActivity:

方法一:adb shell am monitor 监控操作(在cmd中执行此命令后,然后在手机上或模拟器上操作对应的app,就会显示对应的包名)


方法二:adb logcat | findStr -i displayed 从日志进行查询包名和页名称


通过aapt获取appPackage和appActivity:

aapt dump badging 全路径.apk

在这里插入图片描述
在这里插入图片描述
拿到appPackage和appActivity后,可以使用包名的方式来访问app,代码如下:


from appium.webdriver import Remote
 
# 启动一次请求
# 1.指明需要连接的服务地址和端口号
# 2.You must include a platformName capability
caps = {"platformName": "Android",
        "udid": "emulator-5554",
        "appPackage": "com.lemon.lemonban",
        "appActivity": ".activity.WelcomeActivity"}
driver = Remote(command_executor='http://127.0.0.1:4723/wd/hub',
                desired_capabilities=caps)

总结:

platformName 必填,其他可选

deviceName重要

app安装apk包,自动打开(已经安装过的不会重新安装),apk包路径最好不要有中文,不知道为什么我的电脑用这种方式运行一直报错,最后也未能解决,所以我使用包名运行


在复制appActivity时,注意一定是app的首页页面名称,别复制错了

5.adb的使用

adb(Android Debug Bridge)安卓调试桥:作用就是操作安卓手机中的app

相关命令:

adb devices 查看设备是否连接(可以手动连接 adb connect 127.0.0.1:5554,网上可以搜索不同模拟器的端口号)


adb shell 登录设备 (进入手机系统里面)

adb shell dumpsys activity | find “mFocusedActivity” 查看前台应用activity应用名称(注意一定要打开了app,再去执行命令,dumpsys下有很多命令,可以查看帮助文档进行更多了解)


adb install 电脑/包名.apk 安装软件

adb uninstall 电脑/包名.apk 制裁软件

adb pull 手机文件路径 电脑文件路径 从手机下载/拉文件电脑端

adb push 电脑文件路径 手机文件路径 从电脑推送/上传到手机端

adb shell pm list packages 显示所有的安装包名

6.Appium启动过程分析

客户端通过wd/hub/session发送请求创建一个会话session

在这里插入图片描述
提供了参数就是cpas


服务端接收到caps信息后,检验caps参数是否合法
在这里插入图片描述
在这里插入图片描述
adb install io.setting.appium


判断有没有包名

在这里插入图片描述
启动app


获取操作系统的版本:

adb.exe -P 5037 -s emulator-5554 shell getprop ro.build.version.release


启用app:

adb.exe -P 5037 -s emulator-5554 shell am start -W -n com.lemon.lemonban/.activity.WelcomeActivity -S

在这里插入图片描述
到此这篇关于Python与Appium实现手机APP自动化测试的示例代码的文章就介绍到这了


最后

如果你想学习自动化测试,那么下面这套视频应该会帮到你很多

如何逼自己1个月学完自动化测试,学完即就业,小白也能信手拈来,拿走不谢,允许白嫖....

最后我这里给你们分享一下我所积累和整理的一些文档和学习资料,有需要直接领取就可以了!


以上内容,对于软件测试的朋友来说应该是最全面最完整的备战仓库了,为了更好地整理每个模块,我也参考了很多网上的优质博文和项目,力求不漏掉每一个知识点,很多朋友靠着这些内容进行复习,拿到了BATJ等大厂的offer,这个仓库也已经帮助了很多的软件测试的学习者,希望也能帮助到你。

​​

​​​​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1128896.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

借助文心大模型4.0轻松搞定中文语境,生成技术视频十分强悍,并能自主添加各种方言!

在10月17日的百度世界2023上,文心大模型4.0版本正式发布!百度直接放话:文心大模型4.0是目前最强大的文心大模型。会上百度董事长李彦宏为我们展示了文心大模型4.0在搜索、地图、商业智能、智能会议、智能视频、多轮对话方面的强悍。那文心大模…

【vue3+ts】@设置别名

新建的vue3ts项目,建路由的时候报错: 在vite.config.ts中新增如下代码: import { defineConfig } from vite import vue from vitejs/plugin-vue import path from "path" // https://vitejs.dev/config/ export default defineC…

1990-2021年上市公司债务融资成本数据(原始数据+stata处理代码+计算结果)

1990-2021年上市公司债务融资成本数据(原始数据处理代码计算结果) 1、时间:1990-2021年 2、来源:上市公司年报 3、指标:编码、年份、证券代码、短期借款、长期借款、应付债券、长期应付款、负债合计、行业代码、财务…

实现基于 Jenkins 的多服务器打包方案

实现基于 Jenkins 的多服务器打包方案 在实际项目中,我们经常会遇到需要将一个应用程序或服务部署到不同的服务器上的需求。而使用 Jenkins 可以很方便地自动化这个过程。 设置参数 首先,我们需要设置一些参数,以便在构建过程中指定要部署…

vue项目中隐藏右侧滑动栏,使用鼠标滚轮滑动

直接加一个样式,就什么也不用管了 ::-webkit-scrollbar {display: none; }

解决windows中安装VMware后宿主机wifi网卡无法正常使用的问题

问题描述 笔者在安装了 VMware16 后,出现了宿主机托盘中的wifi图标消失、宿主机无法上网、设备管理器中wifi网卡出现43代码错误等情况。在网上搜索良久,找到的解决方法大多为卸载 VMware16 然后清除注册表中的VMware记录等操作,参考性不是很…

数据结构和算法(14):串

串及串匹配 串或字符串(string)属于线性结构,可直接利用向量或列表等序列结构加以实现:结构简单,规模庞大,元素重复率高。 串 由 n 个字符构成的串记作: S " a 0 a 1 . . . a n − 1 &…

山海鲸数字孪生流域:创新驱动,智能治水

当今社会,水资源管理和防洪治理是一项重要的任务,涉及许多关键领域,如灌溉、供水、排水和防洪。这些任务通常在大规模的流域中进行,涉及复杂的水文和气象数据,需要高效的监测和管理。在这一背景下,山海鲸数…

HTML5语义化标签 header 的详解

🌟🌟🌟 专栏详解 🎉 🎉 🎉 欢迎来到前端开发之旅专栏! 不管你是完全小白,还是有一点经验的开发者,在这里你会了解到最简单易懂的语言,与你分享有关前端技术和…

【三维世界】高性能图形渲染技术——Shader你又了解多少?

目录 前言 什么是 Fragment Shader(片段着色器)? 为什么 shaders 运行特别快? 为什么 Shaders 有名但不好学? Hello World 总结 前言 Shader(着色器)是一种计算机程序,主要用于控制计算机图形学中…

Pandas数据分析系列3-数据如何预览

Pandas-数据预览 Pandas 导入数据后,我们通常需要对数据进行预览,以便更好的进行数据分析。常见数据预览的方法如下: ①head() 方法 功能:读取数据的前几行,默认显示前5行 语法结构:df.head(行数) df1=pd.read_excel("销售表.xlsx",sheet_name="手机销…

【API篇】九、Flink的水位线

文章目录 1、Flink时间语义2、事件时间和窗口3、水位线4、水位线和窗口的工作原理 1、Flink时间语义 事件时间处理时间 举个例子就是,一条数据在23:59:59产生,在00:00:01被处理,前者为事件时间,后者为处理时间。 从Flink1.12版本…

Flask 上传文件,requests通过接口上传文件

这是一个使用 Flask 框架实现文件上传功能的示例代码。该代码定义了两个路由: /upload:处理文件上传请求。在该路由中,我们首先从请求中获取上传的文件,然后将文件保存到本地磁盘上,并返回一个字符串表示上传成功。 /…

Python机器学习17——Xgboost和Lightgbm结合分位数回归(机器学习与传统统计学结合)

最近XGboost支持分位数回归了,我看了一下,就做了个小的代码案例。毕竟学术市场上做这种新颖的机器学习和传统统计学结合的方法还是不多,算的上创新,找个好数据集可以发论文。 代码实现 导入包 import numpy as np import pandas…

【单例模式】饿汉式,懒汉式?JAVA如何实现单例?线程安全吗?

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 单例设计模式 Java单例设计模式 Java单例设计模…

微信消息弹窗升级优化了,在微信打开时也能收到新消息显示。

最近,微信又更新了。微信对消息弹窗进行了升级优化,在微信打开时也能收到新消息显示。 点击「我」-「设置」-「消息通知」,可以看到新增了「横幅显示内容」选项。 有3种内容显示形式,分别为:仅显示你收到1条消息&#…

『 基础算法题解 』之双指针(上)

双指针 文章目录 双指针移动零题目解析算法原理代码拓展 复写零题目解析算法原理代码 快乐数题目解析算法解析拓展 代码 盛最多水的容器题目解析算法解析代码 有效的三角形个数题目解析算法原理代码 移动零 题目解析 【题目链接】 算法原理 该种题目可以归为一类题数组分块\…

想要精通算法和SQL的成长之路 - 最小高度树

想要精通算法和SQL的成长之路 - 最小高度树 前言一. 最小高度树1.1 邻接表的构建1.2 入度为1的先入队1.3 BFS遍历 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 最小高度树 原题链接 从题目的含义中我们可以发现: 题目的树是一颗多叉树。叶子节点的度为1&a…

你的支付环境是否安全?

1、平台支付逻辑全流程分析分析 2、平台支付漏洞如何利用?买东西还送钱? 3、BURP抓包分析修改支付金额,伪造交易状态? 4、修改购物车参数实现底价购买商品 5、SRC、CTF、HW项目月入10W副业之路 6、如何构建最适合自己的网安学习路…

【项目经理】目标管理工具

目标管理工具 1. WBS 任务分解法👊原则方法标准 2. 6W2H法WhatwhyWhowhen⏲️WhereWhichHowHow much 3. SWOT分析法strengths-优势Weaknesses-劣势Opportunities-机会Threats-威胁 4. 二八原则法巴列特定律准则例子 5. SMART原则SpecificMeasurableAttainableReleva…