目录
APP移动端自动化测试基础
移动端测试分类
1、APP功能测试
1)业务逻辑正确性测试
2)兼容性测试 包括 系统版本,分辨率,网络情况
3)异常测试 热启动,网络切换中断恢复,电话信息中断恢复
4)升级&安装卸载测试
5)健壮性测试
2、app自动化测试
3、app安全测试
自动化测试主要用于回归测试。
APP比web端来说,迭代太多。
兼容性测试,现在都在云平台上执行。如云测。
主流移动端自动化工具
1、Robotium 支持语言java,仅支持Android,不支持跨应用
2、Macaca 支持语言:java、Python、nodejs,支持Android和ios
3、Appium 支持语言java python C# php perl reby 支持android和ios,支持跨应用
Macaca技术支持特别少。
自动化测试工具选择的关注点
1)是否支持toast
2)是否支持nativa,webview
3)是否支持跨应用
native就是原生安卓系统。
webview网络视图,就是H5
Appium介绍
Appium工作原理
Appium的工作原理主要基于客户端-服务器架构,它使用这种架构来传输命令给设备上安装的服务端应用程序。以下是Appium工作原理的详细解释:
- 启动服务端:当Appium启动时,它会在本地机器上创建一个HTTP服务器,监听一个特定的端口(通常是4723端口)。这个服务器作为一个中转站,接收来自客户端的请求。
- 客户端请求:客户端可以是任何支持HTTP请求的编程语言或工具,它们发送测试脚本或命令给Appium服务器。这些请求包含了需要在移动设备上执行的操作信息。
- 解析与转发:Appium服务器接收到客户端的请求后,会解析这些请求,并将其转发给安装在移动设备上的中间件(通常是Bootstrap.jar)。Bootstrap是用Java编写的,它监听另一个端口(如4724端口),并接收来自Appium服务器的指令。
- 设备端执行:Bootstrap接收到指令后,会调用相应的测试框架(如UIAutomator或XCUITest,取决于设备的操作系统)来执行具体的操作。这些框架允许Bootstrap控制设备上的应用程序和用户界面。
- 结果返回:执行完操作后,设备端将执行结果返回给Bootstrap,然后Bootstrap再将结果返回给Appium服务器。
- 结果展示:最后,Appium服务器将结果返回给原始的客户端,客户端可以展示这些结果,或者根据结果继续执行后续的测试脚本。
通过这种方式,Appium实现了一个跨平台、跨语言的自动化测试解决方案,它支持多种移动设备和操作系统,并且可以与多种编程语言和测试框架配合使用。这使得开发者能够更轻松地为移动设备编写和执行自动化测试脚本,提高了开发效率和测试覆盖率。
Appium环境搭建
安装前准备工具
Python,selenium,.netframework45,安装jdk8
安装Android SDK
Android sdk提供Android API库和开发工具构建,测试和调试应用程序使用
下载android sdk
https://dl.google.com/android/android-sdk_r24.4.1-windows.zip;
(也可以直接安装 android studio 开发工具,内部集成了android-sdk)
解压后运行文件夹中 SDK Manager.exe 安装sdk tools、sdk plaform-tools、sdk build-tools
配置环境变量
新建ANDROID_HOME,值为sdk的目录。
把下面三个路径,加入path
加入path
加入path
加入path,确定,关闭环境变量设置。
验证,命令行输入adb,只要看到版本号即可。
安装Python-client
在命令行输入pip的这行命令安装python-client
pip install Appium-Python-Client
安装Appium
该工具封装了Appium server和Nodejs依赖环境
Appium有三个重要工具,分别是appium server,appium desktop,appium inspector。
appium desktop可用于macos,windows,linux,内嵌了appium server和appium inspector。
server用来接收不同语言发送的脚本,inspector用来查看应用程序元素。
appium V1.22之后,appium inspector工具作为单独的应用发布,不再内嵌在appium desktop中。
Releases · appium/appium-desktop · GitHub
安装appium inspector
Releases · appium/appium-inspector (github.com)
下载对应版本
安装夜神模拟器
用来模拟手机
下载地址 夜神安卓模拟器-安卓模拟器电脑版下载_安卓手游模拟器_手机模拟器_官网 (yeshen.com)
首先需要让系统找到模拟器上手机设备。如何让系统找到模拟器?
运行adb devices可以看到此时没有设备。
把android sdk文件夹下platform tools下的adb.exe复制到夜神的bin文件夹下,并改名为nox_adb.exe,然后重启夜神。
再用adb devices 检测到的就是夜神模拟器的设备
mumu模拟器
也可以用mumu模拟器。
将把android sdk文件夹下platform tools下的adb.exe复制到路径\Netease\MuMuPlayer-12.0\shell下,打开模拟器,打开cmd,输入:
adb connect 127.0.0.1:7555
再使用adbdevices 可以看到连接到设备。
运行第一个appium测试
夜神模拟器打开USB开发者模式 参考:夜神模拟器如何开启开发者选项 | 夜神模拟器帮助中心 (yeshen.com)
运行appium
启动appium server GUI
打开通讯录应用
adb命令获取当前打开的app的包名
adb logcat | findstr Displayed
Displayed com.android.contacts/.activities.PeopleActivity: +477ms
即为通讯录应用的包名。
启动识别UI的工具
在Android SDK的安装目录下,D:\Program Files\Android\tools下找到uiautomatorviewer.bat
uiautomatorviewer.bat是一个用于Android系统APP的原生页面元素定位的工具。它位于Android SDK的tools目录下,是一个Windows系统下的可执行文件。通过双击该文件,可以启动uiautomatorviewer工具,它提供了一个可视化的界面,可以获取当前UI界面的快照,查看UI布局结构,并且可以查看各个控件的相关属性。这个工具对于开发者来说非常有用,可以帮助他们更好地理解和定位APP中的UI元素。
此外,uiautomatorviewer工具还提供了保存布局的功能,可以将当前的布局保存为图片文件和XML布局结构文件,方便开发者进行后续的分析和处理。
总之,uiautomatorviewer.bat是Android开发过程中一个非常实用的工具,可以帮助开发者更加高效地进行UI元素的定位和分析。
点击如图device screenshot按钮进行截屏,会识别到模拟器打开的应用。
在UI工具上点击元素,在右侧可以看到元素信息
注:识别过程中,遇到报错 obtianing UI hierarchy
com.android.ddmlib.SyncException:Remote object doesn't exist
重启夜神模拟器解决。
编写python脚本
脚本1
使用Pycharm工具编写脚本并运行,即可实现,启动通讯录应用,并点击新建联系人。
platformName和plartFormVersion是根据安卓版本写的
每个在移动端运行的APP都会有一个包 appPackage 先启动待测应用 再用adb命令去获取
运行上面代码,会开启通讯录应用,并点击创建账号按钮。这里是用resource-id定位
from appium import webdriver
#创建设备信息
desired_caps={}
desired_caps['platformName']='Android'
desired_caps['platformVersion']='7.1.2' # #在手机设置,关于平板电脑可以找到版本
desired_caps['deviceName']='127.0.0.1:62001' #模拟器上设备的名称 在cmd下用adb devices显示的地址
desired_caps['appPackage']='com.android.contacts'#通讯录包名
desired_caps['appActivity']='.activities.PeopleActivity'#app活动名
#连接
driver=webdriver.Remote("http://127.0.0.1:4723/wd/hub",desired_caps)#连接的是appium
#定位
driver.find_element_by_id("com.android.contacts:id/floating_action_button").click() #点击添加账号按钮
desired_caps是发送给Appium server的键值对集合,作为启动服务端时设置的参数。
脚本2
需要注意的是Appium-Python-Client 3.0.0以后使用UiAutomator2Options()设置启动参数,但是3.0.0之前使用的是desired_caps(但是我这里版本用的2.11,,代码用UiAutomator2Options可以通过)
# -*- coding: utf-8 -*-
# @Time : 2024/3/27
#
from appium import webdriver
from selenium.webdriver.common.by import By
from appium.options.android import UiAutomator2Options
from appium.webdriver.common.appiumby import AppiumBy
options=UiAutomator2Options()
options.platform_name='Android'
options.platformVersion='7.1.2'
# options.device_name='com.android.contacts'
options.app_package='com.android.contacts'
options.app_activity='.activities.PeopleActivity'
options.no_reset='true'
server='http://127.0.0.1:4723/wd/hub'
driver=webdriver.Remote(server,options=options)
driver.implicitly_wait(30)
#定位
driver.find_element(By.ID,"com.android.contacts:id/floating_action_button").click() #点击右下角添加账号
driver.find_element(by=AppiumBy.ANDROID_UIAUTOMATOR, value="new UiSelector().text(\"姓名\")").send_keys("测试联系人")
driver.find_element(By.ID,"com.android.contacts:id/menu_save").click()#点击保存按钮
ele=driver.find_element(By.ID,"com.android.contacts:id/large_title").text
assert ele=="测试联系人" #校验联系人已保存
2024/3/27运行通过。
运行脚本
脚本第一次运行会在模拟器安装 appium settings,然后打开通讯录,新建联系人并保存。