app自动化4-AppiumDesktop
1. UI自动化分类:
1> Web自动化:Selenium
2> App自动化:appium
3> GUI自动化:windows,Mac
4> 微信小程序自动化:App + Web 测试技术的外延形态
5> 更多平台:智能设备,机器人,工业App
2. 自动化测试框架选择:推荐appium,因为
1> 跨语言:java,python,Node.js等
2> 跨平台:Andoid,IOS,Windows,Mac
3> 底层多引擎可切换
4> 生态丰富,社区强大

3. UI自动遍历测试:以自动化的方式对app进行充分的功能遍历以探索bug,价值如下
1> 降低自动化维护成本,可替代80%的自动化测试;
2> 实现新功能的探索;
3> 实现老功能的回归;
4> 用途:多设备兼容测试,自动化专项测试
4. 常见遍历工具:
1> Android原生Monkey
2> 腾讯 New Monkey
3> 百度 SmartMonkey
4> 阿里 Macaca 的 NoSmoke
5> TestHome社区 vigossjjj smart_monkey
6> TestHome社区 zhangzhao Maxim
7> TestHome社区 seveniruby AppCrawler
8> Google出品的App Crawler
5. 合理的使用UI自动化:
1> 单元测试:使用app分层测试策略,增加单测试规模,控制UI自动化测试规模;
2> 移动app自动化测试:核心集成与验收测试用例交给自动化测试;
3> 自动遍历测试:大部分的基础回归测试交给自动遍历;
4> 人工测试:测试团队主负责,整个产品团队参与;
6. 获取app的信息:
1> 获取当前界面元素:adb shell dumpsys activity top
2> 获取任务列表:adb shell dumpsys activity activities
3> 启动应用:adb shell am start -W -n com.xueqiu.android/.view.WelcomeActivityAlias -S
7. android常用命令:
1> adb devices:查看设备
2> adb kill-server:关闭adb的后台进程
3> adb tcpip:让android脱离USB线的TCP连接方式
4> adb connect:连接开启了tcp连接方式的手机
5> adb logcat:android 日志查看
6> adb bugreport:收集日志数据,用于后续的分析,比如耗电量
7> adb shell 本身就是一个linux的shell,可以调用android内置命令
a> adb shell dumpsys:
b> adb shell pm
c> adb shell am
d> adb shell ps
e> adb shell monkey
8. appium生态工具:
1> adb:android控制工具,用于获取andriod的各种数据和控制
2> Appium Desktop: 内嵌了appium server和Inspector的综合工具
3> Appium Server:appium的核心工具,命令行执行工具
4> Appium Clients:各种语言的客户端封装库(java,python,ruby,robotframework-appium),用于连接appium server
5> AppCrawler:自动遍历工具
9. Appium Desktop介绍:
I:作用
1> 用于查看app的UI结构
2> 元素查找测试
3> 录制用例
4> Attach已有的session
5> 云测试
II:使用方式:
1> 打开AppiumDesktop,点击Star Server1.9.0 (安装的是1.9.0的AppiumDesktop)
2> 启动app前,需要设置的一般参数(capabilities的设置):
a> platformName:android 应用平台,android,ios等
b> deviceName:qiucaixia 对于ios是真实的设备名称,对于android不为空即可
c> appPackage:com.xueqiu.android 需要测试的app包名
d> appActivity:.view.WelcomeActivityAlias 需要测试的app启动入口
以下字段可以不设置,特殊需要时可以灵活配置:
e> autoGrantPermissions:true 给app赋予所需要的手机相关权限,启动app后不会出现权限弹框
g> noReset fullReset 是否在测试前后重置相关环境
h> automationName:默认使用uiautomator,可以根据平台不同,支持不同的引擎
i> unicodeKeyboard resetKeyBoard:是否需要输入非英文之外的语言并在测试完成后重置输入法
更多的字段使用说明: http://appium.io/docs/en/writing-running-appium/caps/

详情各字段说明另一个链接: https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/caps.md

PS:capabilities各项参数说明文档: https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/caps.md
3> 参数设置完成后,点击Star Session就会启动app
III:录制脚本

1> 启动app后,点击 Star Recording按键开始录制
2> 录制可以选择 点击(Tap),输入内容(Send Keys),清空(Clear)进行简单操作的录制

3> 录制完成后,点击 Show/Hide Boilerplate Code得到完整可用的脚本:
4> 复制出来的脚本如下,保存为test_demo.py
1 # This sample code uses the Appium python client 2 # pip install Appium-Python-Client 3 # Then you can paste this into a file and simply run with Python 4 5 from appium import webdriver 6 #参数设置 7 caps = {} 8 caps["platformName"] = "android" 9 caps["deviceName"] = "qiucaixia" 10 caps["appPackage"] = "com.xueqiu.android" 11 caps["appActivity"] = ".view.WelcomeActivityAlias" 12 caps["autoGrantPermissions"] = "true" 13 14 driver = webdriver.Remote("http://localhost:4723/wd/hub", caps) 15 16 el1 = driver.find_element_by_id("com.xueqiu.android:id/home_search") 17 el1.click() #点击搜索栏 18 el2 = driver.find_element_by_id("com.xueqiu.android:id/search_input_text") 19 el2.send_keys("pdd") #输入搜索内容 20 21 driver.quit()
PS:脚本复制出来后,from appium import webdriver 报错,需要通过 pip install appium-python-client 来安装这个appium的python客户端

5> python test_demo.py执行时,会报错 找不到定位的元素,原因是脚本执行太慢,页面还没有加载完成就执行,导致找不到元素,需要加上等待
6> 增加隐式等待,增强脚本的稳定性
PS: appium的API使用说明文档连接: http://appium.io/docs/en/about-appium/intro/


PS:参数的单位是S,文档里5000有误。
7> 完整的代码
1 # This sample code uses the Appium python client 2 # pip install Appium-Python-Client 3 # Then you can paste this into a file and simply run with Python 4 5 from appium import webdriver 6 #参数设置 7 caps = {} 8 caps["platformName"] = "android" 9 caps["deviceName"] = "qiucaixia" 10 caps["appPackage"] = "com.xueqiu.android" 11 caps["appActivity"] = ".view.WelcomeActivityAlias" 12 caps["autoGrantPermissions"] = "true" 13 14 driver = webdriver.Remote("http://localhost:4723/wd/hub", caps) 15 driver.implicitly_wait(10) #隐式等待 16 17 el1 = driver.find_element_by_id("com.xueqiu.android:id/home_search") 18 el1.click() #点击搜索栏 19 el2 = driver.find_element_by_id("com.xueqiu.android:id/search_input_text") 20 el2.send_keys("pdd") #输入搜索内容 21 22 driver.quit()

浙公网安备 33010602011771号