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

android平台提供了一个基于java语言的测试框架uiautomator,它一个测试的Java库,包含了创建UI测试的各种API和执行自动化测试的引擎。如果想使用uiautomator去做App自动化测试的话,需要去学习java语言,本文分享的主题是基于python的,那么如何使用python来控制App呢?就需要借助本文将要讲到的框架appium。见下图,用python脚本去控制appium,appium再控制uiautomator,然后再由uiautomator去控制app。

使用python语言却控制的却是uiautomator的java库,这个就是appium起到的“桥梁”作用,appium就是在uiautomator的基础上封装来的,至于appium的“桥梁”作用是如何实现的,不是本文的重点,就不多说了。

1.1,appium是什么

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

1.2,appium的理念

1.3,appium的特点

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的控制。

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

2.1,环境的准备

2.2,元素识别工具

UIAutomatorviewer路径:\sdk\tools\uiautomatorviewer.bat;打开UIAutomatorviewer后的界面如下:

2.3,脚本设计原则--Love原则

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

下面通过模拟器自带的计算器来介绍自动化脚本的实现;整个过程中要做的内容:

3.1.Appium的配置、启动;

如图1;

如图2,appium成功启动后的界面;

3.2脚本的初始化

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

1.新建工程,如下图;

2.新建package,如下图;

3.新建脚本文件,如下图;

4.脚本的实现

4.1,初始化部分:

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

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

4.2,脚本部分--LOVE原则

如图5,用UIAutomator viwer定位元素,比如5的id为“digit5”;

如图7,脚本实现了执行“8+5=13”并对结果进行验证;

从图7中,我们可以看到对结果的定位方法变成了find_element_by_class_name,如图8,是因为结果区域没有resource_id,所以就换了另外一种定位方法,但是值得注意的是,使用find_element_by_class_name来定位元素,有的时候定位的结果不是唯一的,是因为一个页面中可能包含有多个相同class_name的元素,结果是每次定位,只能定位到索引“index”为"0"的,也就是当前页面里第一个class_name对应的元素的内容;

如图9,证明脚本中异常处理逻辑生效了;

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

如图1,unicodeKeyboard的作用是在设备中设置appium的输入法、resetKeyboard的作用是重置输入法;

如图2,find_elements_by_id()返回的是一个数组,由于计算器页面中只有一个resource_id为digit8的元素,所以elements[0]就是数字8;

如图3,find_element_by_accessibility_id()定位的元素属性是content_desc

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

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

press_keycode():点击手机键盘上某一个keycode值;例如计算器上的数字8,在硬件编码上有一个keycode值与之对应;如图1,按键0对应的keycode值是7;

如图2,使用press_keycode()实现1和0的输入;使用press_keycode()实现输入的好处是相比于“find到元素再操作”,press_keycode()的响应时间比较快;

send_keys():实现输入的功能;

如图3,定位计算器的输入框,然后传入10;

以上,通过实例介绍了Android  Native App自动化测试,希望对看到本篇的人有所帮助。

Android Native App自动化测试实战讲解(上)(基于python)的更多相关文章

  1. Android Hybrid App自动化测试实战讲解(基于python)

    1.Hybrid App自动化测试概要 什么是Hybrid App? Hybrid App(混合模式移动应用)是指介于web-app.native-app这两者之间的app,兼具“Native App ...

  2. Android Native App自动化测试实战讲解(下)(基于python)

    6.Appuim自动化测试框架API讲解与案例实践(三) 如图1,可以在主函数里通过TestSuite来指定执行某一个测试用例: 6.1,scroll():如图2 从图3中可以看到当前页面的所有元素r ...

  3. Android App自动化测试实战(基于Python)(三)

    1.Native App自动化测试及Appuim框架介绍 android平台提供了一个基于java语言的测试框架uiautomator,它一个测试的Java库,包含了创建UI测试的各种API和执行自动 ...

  4. 基于UiAutomator2+PageObject模式开展APP自动化测试实战

    前言 在上一篇<APP自动化测试框架-UiAutomator2基础>中,重点介绍了uiautomator2的项目组成.运行原理.环境搭建及元素定位等基础入门知识,本篇将介绍如何基于uiau ...

  5. 【Azure 应用服务】Azure App Service For Linux 上实现 Python Flask Web Socket 项目 Http/Https

    问题描述 在上篇博文"[Azure 应用服务]App Service for Linux 中实现 WebSocket 功能 (Python SocketIO)"中,实现了通过 HT ...

  6. Native App自动化测试及Appium框架介绍

    一  自动化工具简介 1 Appium : 开源,跨平台的自动化测试工具,用于测试Native(原生)和Hybrid(混合)应用,支持IOS/Android/FirefoxOS 平台. 2  环境 : ...

  7. 【airflow实战系列】 基于 python 的调度和监控工作流的平台

    简介 airflow 是一个使用python语言编写的data pipeline调度和监控工作流的平台.Airflow被Airbnb内部用来创建.监控和调整数据管道.任何工作流都可以在这个使用Pyth ...

  8. 《精通移动app测试实战:技术、工具和案例》新书上市

    本书是测试专家.性能测试专家.专业畅销书作者--于涌,多年实战经验的总结,涵盖主流的测试工具,包括众多的测试实例,涵盖单元测试.功能测试.性能测试.UI测试.手游测试.自动化测试.测试用例管理.持续集 ...

  9. 基于python的互联网软件测试开发(自动化测试)-全集合

    基于python的互联网软件测试开发(自动化测试)-全集合 1   关键字 为了便于搜索引擎收录本文,特别将本文的关键字给强调一下: python,互联网,自动化测试,测试开发,接口测试,服务测试,a ...

随机推荐

  1. jsp中${}

    jsp中${}----是EL表达式的常规表示方式目的是为了获取{}中指定的对象(参数.对象等)的值 如:${user.name}<====>User user = (User)reques ...

  2. mybatis属性详解

    前言 MyBatis是基于"数据库结构不可控"的思想建立的,也就是我们希望数据库遵循第三范式或BCNF,但实际事与愿违,那么结果集映射就是MyBatis为我们提供这种理想与现实间转 ...

  3. java.lang.NoClassDefFoundError: javax/mail/Authenticator

    摘录自:http://stackoverflow.com/questions/1630002/java-lang-noclassdeffounderror-javax-mail-authenticat ...

  4. 源码讲解 node+mongodb 建站攻略(一期)第二节

    源码讲解 node+mongodb 建站攻略(一期)第二节 上一节,我们完成了模拟数据,这次我们来玩儿真正的数据库,mongodb. 代码http://www.imlwj.com/download/n ...

  5. z-index是什么样式?

    称作层级样式表 通过 z-index样式,设置重叠样式 z-index 垂直屏幕的层级,数字越大,越上层,可以设置多层样式,效果是俯览 需要联合  position: relative; positi ...

  6. CentOS如何把deb转为rpm

    说明:可以转换,但不一定可用,可以根据报错提示,安装需要的依赖. 1 安装alien工具,下载地址http://ftp.de.debian.org/debian/pool/main/a/alien/ ...

  7. android 弹起键盘把ui顶上去的解决办法

    键盘输入框上面的ui布局必须为Relative相对布局.然后设置 <activityandroid:name=".activity.HomeActivity"Android: ...

  8. Android 使用android-support-multidex解决Dex超出方法数的限制问题

    随着应用不断迭代,业务线的扩展,应用越来越大(比如集成了各种第三方sdk或者公共支持的jar包,项目耦合性高,重复作用的类越来越多),相信很多人都遇到过如下的错误: UNEXPECTED TOP-LE ...

  9. java 获取ip地址和网络接口

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  10. js函数知识

    1.函数基本知识 通过函数可以封装任意条语句,在任何地方调用,js中用function关键字来声明, //基本格式,函数名,传递参数,代码块 function functionName(arg0,ar ...