Android App自动化测试实战(基于Python)(三)
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)(三)的更多相关文章
- selenium2自动化测试实战--基于Python语言
自动化测试基础 一. 软件测试分类 1.1 根据项目流程阶段划分软件测试 1.1.1 单元测试 单元测试(或模块测试)是对程序中的单个子程序或具有独立功能的代码段进行测试的过程. 1.1.2 集成测试 ...
- 关于《Selenium3自动化测试实战--基于python语言》
2016年1月,机缘巧合下我出版了<Selenium2自动化测试实战--基于python语言>这本书,当时写书的原因是,大部分讲Selenium的书并不讲编程语言和单元测试框,如果想在项目 ...
- 《Selenium2自动化测试实战--基于Python语言》 --即将面市
发展历程: <selenium_webdriver(python)第一版> 将本博客中的这个系列整理为pdf文档,免费. <selenium_webdriver(python)第 ...
- 《Selenium 2自动化测试实战 基于Python语言》中发送最新邮件无内容问题的解决方法
虫师的<Selenium 2自动化测试实战 基于Python语言>是我自动化测试的启蒙书 也是我推荐的自动化测试入门必备书,但是书中有一处明显的错误,会误导很多读者,这处错误就是第8章自动 ...
- 《Selenium自动化测试实战:基于Python》Selenium自动化测试框架入门
第1章 Selenium自动化测试框架入门 1.1 Selenium自动化测试框架概述 说到目前流行的自动化测试工具,相信只要做过软件测试相关工作,就一定听说过Selenium. 图1-1是某企业 ...
- 《Selenium自动化测试实战:基于Python》之 Selenium IDE插件的安装与使用
第3章 Selenium IDE插件的安装与使用 京东:https://item.jd.com/13123910.html 当当:http://product.dangdang.com/292045 ...
- 《Selenium自动化测试实战:基于Python》之 Python与Selenium环境的搭建
第2章 Python与Selenium环境的搭建 购买链接: 京东:https://item.jd.com/13123910.html 当当:http://product.dangdang.co ...
- 关于《Selenium 2自动化测试实战 基于Python语言》学习过程中键盘的常用操作
下边是自己在学习过程中总结的一些常用键盘的操作
- 基于UiAutomator2+PageObject模式开展APP自动化测试实战
前言 在上一篇<APP自动化测试框架-UiAutomator2基础>中,重点介绍了uiautomator2的项目组成.运行原理.环境搭建及元素定位等基础入门知识,本篇将介绍如何基于uiau ...
随机推荐
- 备战双十一,腾讯WeTest有高招——小程序质量优化必读
WeTest 导读 2018年双十一战场小程序购物通道表现不俗,已逐渐成为各大品牌方角逐的新战场.数据显示,截止目前95%的电商平台都已经上线了小程序.除了电商企业外,许多传统线下商家也开始重视小程序 ...
- JavaScript 正则表达式 初探
JavaScript 正则表达式 正则表达式是构成搜索模式的字符序列 搜索模式可用于文本搜索和文本替换操作 使用正则 字符串方法 在JavaScript中,正则表达式常常用两个字符串方法: searc ...
- scala 语法速查
摘自官网 variables var x = 5 Good x = 6 Variable. val x = 5 Bad x = 6 Constant. var x: Double = 5 Expl ...
- [b0005] Linux 系统常用操作命令
1 Ubuntu 解压 hadoop@ssmaster:~$ -bin-hadoop2..tgz 联网安装程序包 sudo apt-get install php
- [PHP] 基于redis的分布式锁防止高并发重复请求
需求:我们先举个某系统验证的列子:(A渠道系统,业务B系统,外部厂商C系统) (1)B业务系统调用A渠道系统,验证传入的手机.身份证.姓名三要素是否一致. (2)A渠道系统再调用外部厂商C系统. (3 ...
- react的路由权限控制
在使用路由的时候,有的时候我们的界面只能够在登录之后才可以看的到,这个时候就需要使用路由权限控制了 找了资料发现一个就是我使用的方法,一个是高阶组件. 原谅菜鸟看不太懂不会使用高阶组件………… 首先在 ...
- Ubuntu 图形界面和终端切换
场景 在使用Ubuntu时,不小心按下了 ctrl+alt+f3,突然进入终端,好慌 解决 Ubuntu保留了纯命令行模式,按下 ctrl+alt+f2-6 可以进入纯命令行界面 之后按下 ctrl+ ...
- CountDownLatch/CyclicBarrier/Semaphore 使用过吗?
CountDownLatch/CyclicBarrier/Semaphore 使用过吗?下面详细介绍用法: 一,(等待多线程完成的)CountDownLatch 背景; countDownLatch ...
- 扎西平措 201571030332 《面向对象程序设计 (JAVA)》第二周 学习总结
面向对象程序设计 (JAVA)>第二周 学习总结 项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>https://www.cnblogs.com/nwnu-daizh/ 这 ...
- 第十周计划周二&周三计划
今天又一次被导师训了,怎么也达不到他的要求,好像我俩不在一条线上.所以现在重新整理一遍思路,继续走. 我认为重点还是主题追踪这一块,但是主题追踪的结果以及显示是个问题,目前还是打算做出来当天最热的前几 ...