Python3--Uiautomator2--Pytest--Alure使用

官方源码GitHub地址:https://github.com/openatx/uiautomator2

介绍

uiautomator2 是一个可以使用Python对Android设备进行UI自动化的库。其底层基于Google uiautomator,Google提供的uiautomator库可以获取屏幕上任意一个APP的任意一个控件属性,并对其进行任意操作,但有两个缺点:

1、测试脚本只能使用Java语言。

2、测试脚本必须每次被上传到设备上运行。 我们希望测试能够用一个更脚本化的语言,

例如Python编写,同时可以每次所见即所得地修改测试、运行测试。

而uiautomator2项目是对xiaocong/uiautomator的增强,主要有以下部分:

  1. 设备和开发机可以脱离数据线,通过WiFi互联(基于atx-agent
  2. 集成了openstf/minicap加快截图速度
  3. 集成了openstf/minitouch达到精确实时控制设备
  4. 修复了xiaocong/uiautomator经常性退出的问题
  5. 代码进行了重构和精简,方便维护

工作原理

如图所示,python-uiautomator2主要分为两个部分,python客户端,移动设备

python端:运行脚本,并向移动设备发送HTTP请求

移动设备 :移动设备上运行了封装了uiautomator2的HTTP服务,解析收到的请求,并转化成uiautomator2的代码。

整个过程

  1. 在移动设备上安装atx-agent(守护进程), 随后atx-agent启动uiautomator2服务(默认7912端口)进行监听
  2. 在PC上编写测试脚本并执行(相当于发送HTTP请求到移动设备的server端)
  3. 移动设备通过WIFI或USB接收到PC上发来的HTTP请求,执行制定的操作

前期准备


环境搭建

1.安装Python

如命令行可以执行python,则跳过此步骤

在python官网下载python,并配置环境变量,可点击查看详细教程

2.安装adb

如命令行可以执行adb devices,则跳过此步骤

从谷歌官网下载Android Platform Tools, 解压,并加包含adb.exe的目录加入到系统的PATH中。

3.安装uiautomator2

同时需要pillow来处理截图数据

pip install --pre uiautomator2
pip install pillow

4.初始化

部署相关的守护进程。

电脑连接上一个手机或多个手机, 确保adb已经添加到环境变量中,执行下面的命令会自动安装本库所需要的设备端程序:uiautomator-server 、atx-agent、openstf/minicap、openstf/minitouch

python -m uiautomator2 init

安装完成,设备上会多一个uiautomator的应用。

例如:

5.确定环境是否搭建成功

接下来看一段Python脚本,运行成功时手机会弹出一句:Hello world, 显示时间为3秒


定位元素

我们可以借助Android SDK自的uiautomatorviewer查看元素,这就要求手机必须以USB的方式连接PC,我前面使用的是WIFI连接进行连接的。所以,openatx提供了另外一个工具weditor 来解决这个问题。

GitHub地址:https://github.com/openatx/weditor

1、安装:

pip install --pre --upgrade weditor

2、使用:

python3 -m weditor

默认会通过浏览器打开页面:http://localhost:17310/

在页面左上角选择Android,点击Connect按钮。

当我们操作完手机后,可以点击“Dump Hierchy”按钮进行刷新,从而保持与设备上的界面保持同步。weditor 还可以帮我们生成代码。

总之,研究一下就会用了。


安装allure

GitHub地址:https://github.com/allure-framework/allure2/releases



环境配置参考如下:

allure安装:https://cloud.tencent.com/developer/article/1556151


安装JavaJDK-1.8

官网地址:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html

根据自己电脑配置安装对应的JDK



环境配置:https://www.cnblogs.com/nojacky/p/9497724.html


安装git

官网地址:https://git-scm.com/

一直下一步就好了


万事俱备,只欠东风


概述:

本工程是在开源 uiautomator2 和 facebook-wda 项目的基础之上,进行了统一的封装,消除两个项目所提供的接口的差异性,同时也将分散的接口功能进行了聚合,降低接入门槛,简化使用操作,同时也最大化保留了原项目的诸多优点,并可以进行更加深度的定制化拓展。

工程采用业内主流的pytest+allure作为用例运行的基本脚手架和测试报告生成框架,脚本用例采用经典PO模式+业务流程封装+数据分离的思想进行组织和编写。

本工程编写的初衷是为了尽可能的降低UI自动化脚本的编写和使用门槛,着重在元素定位、异常和断言处理上进行了更进一步的策略优化和封装,使得测试人员可以聚焦在元素基本操作的编写和业务流程的逻辑组织上,而无需刻意关注随机的弹窗遮挡或点击按钮无法跳转下一页面的异常toast报错处理等操作,减少流程中过多的自定义断言处理,提高脚本稳定性和复用性(多平台复用、流程复用),降低维护成本,加快脚本编写速度。

初始化安装:

  1. 安装以上的的前期准备
  2. 找一个目录,打开git bash,输入:git clone [https://gitee.com/ran_yong/auto_uiautomator2.git](https://gitee.com/ran_yong/auto_uiautomator2.git)
  3. 打开Pycharm,打开上一步拉取下来的UIAutoTest文件夹,导入工程,点击settings---Project---Project Interpretor---add...---New environment---Location中在当前工程名后确认是否有/venv,没有的话手动输入,基本编译器选择python3的安装路径,确认即可
  4. Pycharm需要先配置pip的repositories,推荐https://pypi.tuna.tsinghua.edu.cn/simple/ ,Pycharm的Terminal中,输入:

    pip3 install -r requirements.txt

    pip3 install ./install/whl/mtn_perf-0.1.0-py3-none-any.whl ./install/whl/mtn_speed-0.1.0-py3-none-any.whl ./install/whl/facebook_wda-1.3.2.dev31-py3-none-any.whl

    等待安装完成后,环境就配置完成了,后续执行测试只要执行下面的第9步即可
  5. 手机进入开发者模式,插入usb,确保adb devices可以返回设备号,直接运行对应应用目录下的run.py即可(需要在手机端确认安装一些必须的软件)

工程分层结构

分层结构:

Fixtures辅助层(driver、data、业务相关的前后置操作)
|
用例层
|
业务流程逻辑层
|
PageObject层(继承BasePage)
|
元素层(元素数据、元素集切换)

目录结构

WalletUiTest/
- common/ 存放公共文件
- base_page.py: 提供基本页面元素操作
- config_parser.py: 提供配置文件解析方法
- image.py: 提供图像识别方法
- logger.py: 提供日志全局配置方法
- yaml_parser.py: 提供yaml文件解析方法
- utils.py: 提供工具类方法
- install/: 存放修改后的源码或依赖库
- demo/: 文件夹名称表示对应的应用别称(功能域),demo只是示例名称
- vXXX/: 以vXXX表示应用版本号以区分版本用例,每个版本一个文件夹(包含文件夹内的文件结构)
- case/: 存放用例
- data/: 存放测试数据(yaml文件)
- element/: 存放定位元素(yaml文件)
- element_router.py: 元素选择路由,需按照实际补充相关逻辑
- flow/: 存放业务流程逻辑
- image/: 存放需要图像识别的元素图像文件
- page/: 存放PageObject文件
- conftest.py: 放置与应用强关联的Fixtures操作
- debug.py: 做步骤调试
- run.py: 用例统一执行和生成报告
- config.ini: 应用相关配置
- report/: 存放与报告相关的文件
- log: 存放本工程的log日志
- logcat: 存放抓取的系统和应用日志
- screenrecord: 存放用例执行过程的录屏
- screenshot: 存放截图
- raw_data: 存放allure原始数据
- html_report_xxxx: allure生成的html报告,以时间分割保存
- config.ini: 全局相关配置
- conftest.py: 放置通用的Fixtures和Hooks方法
- pytest.ini: pytest运行配置
- README.md: 使用说明文档

详情请参考项目文件README.md

开始编写用例

基本流程: element(image)-->page-->flow-->case-->data

一个简单的demo:

<这是一个视频链接>后续补录上

Python UI自动化的更多相关文章

  1. (appium+python)UI自动化_09_unittest批量运行测试用例&生成测试报告

    前言 上篇文章[(appium+python)UI自动化_08_unittest编写测试用例]讲到如何使用unittets编写测试用例,并执行测试文件.接下来讲解下unittest如何批量执行测试文件 ...

  2. Python—UI自动化完整实战

    实战项目 均来源于互联网 测试报告2017年11月29日优化后的测试报告:https://github.com/defnngj/HTMLTestRunner 1.项目概述: 本实战已126邮箱为例子进 ...

  3. (appium+python)UI自动化_07_app UI自动化实例【叮咚搜索加车为例】

    前言 初学UI自动化的小伙伴,在配置好appium+python自动化环境后,往往不知道如何下手实现自动化.小编在初期学习的时候也有这种疑惑,在此以叮咚买菜app-搜索加车为实例,展示下appium是 ...

  4. (appium+python)UI自动化_01_自动化环境搭建【MAC版】

    Appium简介 Appium是一个开源的.跨平台的测试框架,主要用来进行app UI自动化,适用于原生应用.混合应用和移动网页应用(H5页面).目前支持Python.JavaScript.Objec ...

  5. python UI自动化之切换iframe

    python+selenium写UI自动化的时候,经常会遇到需要切换iframe的情况,这里介绍几种切换iframe的方式 1.使用id定位 driver.switch_to.frame(" ...

  6. (appium+python)UI自动化_03_元素定位工具

    前言 在UI自动化过程中,需要对手机app上的元素进行定位,然后进一步编写自动化脚本操作app.定位元素首先需要定位工具来辅助查看页面元素.小编常用的定位工具有2种,分别是uiautomatorvie ...

  7. python ui自动化之元素定位和常用操作

    做ui自动化的最基础的就是页面元素定位了,如果连页面元素都定位不到,自动化从何谈起呢?接下来我们就看看页面元素定位的方法吧!(这里就用百度页面来进行演示) 一.最通用的几种定位方式: 1.通过id定位 ...

  8. (appium+python)UI自动化_02_appium启动手机app

    前提:需先安装配置好appium+python自动化环境,已配置好环境的小伙伴可以参考以下步骤启动Android app,具体步骤如下: 一.USB连接手机 (1)手机USB连接电脑 (2)手机打开开 ...

  9. python UI自动化实战记录三:pageobject-基类

    脚本思路: 使用pageobject模式,写一个basepage基类,所有页面的通用方法封装到基类中.比如打开页面,关闭页面,等待时间,鼠标移到元素上,获取单个元素,获取一组元素,获取元素的子元素,截 ...

随机推荐

  1. oracle 碎片管理和数据文件resize释放表空间和磁盘空间(以及sys.wri$_optstat_histgrm_history过大处理)

    随着互联网的快速发展,各行各业的数据量也是与日俱增,而数据库的数据量也是直线增长,但是,如果表DML太多,则可能会在高水位线以下出现太多空白. 因此,只能将数据文件缩小到高水位线,因为高水位线以下有一 ...

  2. Python批量图片去水印,提高工作效率

    ​平常工作中,有时为了采用网络的一些素材,但这些素材往往被打了水印,如果我们不懂PS就无法去掉水印,或者无法批量去掉水印.这些就很影响我们的工作效率. 今天我们就一起来,用Python + OpenC ...

  3. Python 库整理【收藏】

    库名称简介 Chardet字符编码探测器,可以自动检测文本.网页.xml的编码. colorama主要用来给文本添加各种颜色,并且非常简单易用. Prettytable主要用于在终端或浏览器端构建格式 ...

  4. 。 (有些情况下通过 lsof(8) 或 fuser(1) 可以 找到有关使用该设备的进程的有用信息)

    umount时目标忙解决办法 标签(空格分隔): ceph ceph运维 osd 在删除osd后umount时,始终无法umonut,可以通过fuser查看设备被哪个进程占用,之后杀死进程,就可以顺利 ...

  5. SpringMVC MVC 架构模式

    MVC 架构模式 MVC(Model.View 和 Controller)是一种架构模式,它是按照职责划分的思想将系统操作分为三个模块进行处理,每个模块负责一个职责,而且模块之间可以相互交互通信,共同 ...

  6. 原生基础js脚本实现--在线答题系统

    全部代码在最下面----需要的直接往下翻 html方面的代码  : 正确的答案 value=s <!DOCTYPE html> <html lang="en"&g ...

  7. java 计算下面级数之和 1/3+3/5+5/7+...+97/99

    代码实例图:package judgment;/** * 计算下面级数之和 * 1/3+3/5+5/7+...+97/99; */public class Judgment { public stat ...

  8. C++编程计算图形的面积(圆、矩形)

    C++基础,while循环与if判断实现的计算图形面积 1 #include <iostream> 2 3 int main() { 4 while (true){ 5 int input ...

  9. 重新整理 .net core 实践篇————配置系统之盟约[五]

    前言 在asp .net core 中我们会看到一个appsettings.json 文件,它就是我们在服务中的各种配置,是至关重要的一部门. 不管是官方自带的服务,还是我们自己编写的服务都是用它来实 ...

  10. Linux基础服务——Bind DNS服务 Part1

    Linux基础服务--Bind DNS服务 Part1 DNS正向解析 实验环境: CentOS8.3.2011 IP地址:192.168.100.50 VMware虚拟环境 NAT网段 需要解析的区 ...