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 App自动化测试实战(基于Python)(三)的更多相关文章

  1. selenium2自动化测试实战--基于Python语言

    自动化测试基础 一. 软件测试分类 1.1 根据项目流程阶段划分软件测试 1.1.1 单元测试 单元测试(或模块测试)是对程序中的单个子程序或具有独立功能的代码段进行测试的过程. 1.1.2 集成测试 ...

  2. 关于《Selenium3自动化测试实战--基于python语言》

    2016年1月,机缘巧合下我出版了<Selenium2自动化测试实战--基于python语言>这本书,当时写书的原因是,大部分讲Selenium的书并不讲编程语言和单元测试框,如果想在项目 ...

  3. 《Selenium2自动化测试实战--基于Python语言》 --即将面市

    发展历程: <selenium_webdriver(python)第一版>   将本博客中的这个系列整理为pdf文档,免费. <selenium_webdriver(python)第 ...

  4. 《Selenium 2自动化测试实战 基于Python语言》中发送最新邮件无内容问题的解决方法

    虫师的<Selenium 2自动化测试实战 基于Python语言>是我自动化测试的启蒙书 也是我推荐的自动化测试入门必备书,但是书中有一处明显的错误,会误导很多读者,这处错误就是第8章自动 ...

  5. 《Selenium自动化测试实战:基于Python》Selenium自动化测试框架入门

    第1章  Selenium自动化测试框架入门 1.1  Selenium自动化测试框架概述 说到目前流行的自动化测试工具,相信只要做过软件测试相关工作,就一定听说过Selenium. 图1-1是某企业 ...

  6. 《Selenium自动化测试实战:基于Python》之 Selenium IDE插件的安装与使用

    第3章  Selenium IDE插件的安装与使用 京东:https://item.jd.com/13123910.html 当当:http://product.dangdang.com/292045 ...

  7. 《Selenium自动化测试实战:基于Python》之 Python与Selenium环境的搭建

    第2章  Python与Selenium环境的搭建 购买链接:  京东:https://item.jd.com/13123910.html  当当:http://product.dangdang.co ...

  8. 关于《Selenium 2自动化测试实战 基于Python语言》学习过程中键盘的常用操作

    下边是自己在学习过程中总结的一些常用键盘的操作

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

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

随机推荐

  1. Linux域名服务DNS

    什么是 DNS DNS 全称是 Domain Name System,大意是域名解析系统,它的职责是把域名翻译成一个一个可以识别的 IP 供不同的计算机设备连接. linux 有关 DNS 解析的配置 ...

  2. PLSQL 12 安装、连接Oracle

    点击下载PLSQL,本次安装的PLSQL版本为12.0.7,建议安装64位. 下载PLSQL时,版本旁边会有个“Language pack”的链接,点击后左侧选择“Chinese”即可下载汉化包. 注 ...

  3. 高强度学习训练第十三天总结:使用Netty实现一个http服务器

    Netty入门 Netty的重要性不言而喻.那么今天就来学习一下Netty. 整个项目基于Gradle搭建. Build如下所示: plugins { id 'java' } group 'cn.ba ...

  4. HTTP:Web的基础

    一.HTTP:Web的基础 1.URI 每个Web服务器资源都有一个名字,这样客户端就可以说明它们感兴趣的资源是什么了.服务器资源名称被称为统一资源标识符(URI) URI有两种形式,分别为URL和U ...

  5. windows10 性能优化

    公司的电脑 CPU 是 i5, 内存: 8GB, 机械硬盘, 装的是 win10 操作系统, 作为开发机, 配置本来够低了, 公司又预装了很多个监控软件, 性能就更差了. 这些天明显感觉这个机器越来越 ...

  6. [20190510]rman备份的疑问7.txt

    [20190510]rman备份的疑问7.txt --//上午测试rman备份时备份文件大小回缩的测试.链接:--//http://blog.itpub.net/267265/viewspace-26 ...

  7. Anaconda3使用

    1.使用conda安装各种包到指定路径下的环境, conda install --prefix=/home/xxx/PycharmProjects/project_01/env numpy 2.安装指 ...

  8. vue+elementUI+node实现登录模块--验证用户名是否正确

    验证用户名是否正确 1==>// 引入qs               import qs from 'qs'; 2===>收集用户账号后, 发送请求 把参数发给后端(把用户名和密码发给后 ...

  9. (转)cube-ui后编译

    转载地址:https://www.jianshu.com/p/189755f9ce43 1. 后编译介绍 目前大部分的前端项目开发都是使用es6+的代码并且使用babel进行编译,而传统的对代码包的引 ...

  10. 接口测试中GET和POST两种基本HTTP请求方法的区别

    面试时,可以回答(一般答前4条就行): GET参数通过url传递,POST放在request body中 GET请求在url中传递的参数是有长度限制的,而POST没有 GET比POST更不安全,因为参 ...