Android App自动化测试(三)

1.Native App自动化测试及Appuim框架介绍

android平台提供了一个基于java语言的测试框架uiautomator,它一个测试的Java库,包含了创建UI测试的各种API和执行自动化测试的引擎。如果想使用uiautomator去做App自动化测试的话,需要去学习java语言,本文分享的主题是基于python的,那么如何使用python来控制App呢?就需要借助本文将要讲到的框架appium。见下图,用python脚本去控制appium,appium再控制uiautomator,然后再由uiautomator去控制app。
Android App自动化测试(三)
使用python语言却控制的却是uiautomator的java库,这个就是appium起到的“桥梁”作用,appium就是在uiautomator的基础上封装来的,至于appium的“桥梁”作用是如何实现的,不是本文的重点,就不多说了。

1.1,appium是什么

appium是一个开源、跨平台的自动化测试工具,用于测试Native(原生)和Hybrid(混合)应用,支持IOS、Android和FirefoxOS平台。

1.2,appium的理念

Android App自动化测试(三)
1.3,appium的特点
Android App自动化测试(三)
1.4,appium原理

下图appium中的“UIAutomator controller”的作用是自动化测试环境的初始化,例如向手机中push一个Bootstrap.jar文件、安装app;“UIAutomator command client”的作用是自动化脚本的执行;

我们希望通过uiautomator来控制app,那么appium会把集成了uiautomator提供的各种api的封装Bootstrap.jar文件push到手机上。Bootstrap.jar文件push到手机上后会监听一个端口号,并调用“UIAutomator command server”服务,“UIAutomator command client”在把从“WebDriver script”获得的脚本发送给 “UIAutomator command server”,从而实现python脚本对app的控制。

Android App自动化测试(三)

2.自动化测试环境、元素识别工具、脚本设计原则–love原则

2.1,环境的准备
Android App自动化测试(三)
2.2,元素识别工具
Android App自动化测试(三)
UIAutomatorviewer路径:\sdk\tools\uiautomatorviewer.bat;打开UIAutomatorviewer后的界面如下:
Android App自动化测试(三)
2.3,脚本设计原则–Love原则
Android App自动化测试(三)

3.Native App自动化脚本的实现

下面通过模拟器自带的计算器来介绍自动化脚本的实现;整个过程中要做的内容:
Android App自动化测试(三)
3.1.Appium的配置、启动;

如图1;
Android App自动化测试(三)
如图2,appium成功启动后的界面;
Android App自动化测试(三)
3.2脚本的初始化

这里选择pycharm编辑器,创建脚本的步骤:

1.新建工程,如下图;
Android App自动化测试(三)2.新建package,如下图;

Android App自动化测试(三)3.新建脚本文件,如下图;
Android App自动化测试(三)Android App自动化测试(三)Android App自动化测试(三)

4.脚本的实现

4.1,初始化部分:

如图3,图3中绿色框中的“http://localhost:4723/wd/hub”是appium监听的端口号,就是脚本发送指令的目标地址,可以从图2中appium启动时打印出来的信息中获得(图2红色框中);

Android App自动化测试(三)
获取deviceName、appPackage、appActivity,如图4、5;获取appPackage和appActivity,在执行完adb logcat | grep START后,启动测试应用,从图5的控制台新增信息里可以获取到appPackage和appActivity名。

Android App自动化测试(三)
Android App自动化测试(三)
4.2,脚本部分–LOVE原则

如图5,用UIAutomator viwer定位元素,比如5的id为“digit5”;
Android App自动化测试(三)

如图7,脚本实现了执行“8+5=13”并对结果进行验证;
Android App自动化测试(三)
从图7中,我们可以看到对结果的定位方法变成了find_element_by_class_name,如图8,是因为结果区域没有resource_id,所以就换了另外一种定位方法,但是值得注意的是,使用find_element_by_class_name来定位元素,有的时候定位的结果不是唯一的,是因为一个页面中可能包含有多个相同class_name的元素,结果是每次定位,只能定位到索引“index”为"0"的,也就是当前页面里第一个class_name对应的元素的内容;
Android App自动化测试(三)
如图9,证明脚本中异常处理逻辑生效了;
Android App自动化测试(三)

Appuim自动化测试框架API讲解与案例实践

Android App自动化测试(三)
如图1,unicodeKeyboard的作用是在设备中设置appium的输入法、resetKeyboard的作用是重置输入法
Android App自动化测试(三)
如图2,find_elements_by_id()返回的是一个数组,由于计算器页面中只有一个resource_id为digit8的元素,所以elements[0]就是数字8;
Android App自动化测试(三)
如图3,find_element_by_accessibility_id()定位的元素属性是content_desc

Android App自动化测试(三)
如图4,是10/5的脚本实现;其中,find_element_by_accessibility_id(u"除")中"除"前面的"u",表示采用unicode编码,可以更好的显示中文;
Android App自动化测试(三)

Appuim自动化测试框架API讲解与案例实践(二)

Android App自动化测试(三)
press_keycode():点击手机键盘上某一个keycode值;例如计算器上的数字8,在硬件编码上有一个keycode值与之对应;如图1,按键0对应的keycode值是7;
Android App自动化测试(三)
如图2,使用press_keycode()实现1和0的输入;使用press_keycode()实现输入的好处是相比于“find到元素再操作”,press_keycode()的响应时间比较快;

Android App自动化测试(三)
send_keys():实现输入的功能;
Android App自动化测试(三)
如图3,定位计算器的输入框,然后传入10;
Android App自动化测试(三)希望本文对你有所帮助~~如果对软件测试、接口测试、自动化测试、面试经验交流感兴趣可以加入我们。642830685,免费领取最新软件测试大厂面试资料和Python自动化、接口、框架搭建学习资料!技术大牛解惑答疑,同行一起交流。