一,前言

1,背景

因公司业务需要做支付宝小程序的UI自动化测试,于是在网上查找小程序的自动化资料,发现微信小程序是有自己的测试框架的,但几乎找不到支付宝小程序UI自动化测试相关的资料。白piao失败,那就只能自己从零开始整了。

因为之前已经用 Python + appium + unittest 搭建好了android app的UI自动化测试,于是刚开始就想直接套用这个框架,当时认为小程序页面就其实就是相当于一个特殊的web页面,觉得应该可行。但有天脑子一热想尝试使用网易的airtest与单元测试框架pytest结合。为了验证可行性,开始查看Airtest官方文档,并在Airtest Project官网下载了AirtestIDE(AirtestIDE官方文档),尝试着编写测试用例demo。

2,Airtest Project简介

Airtest Project主要包含 Airtest 和 Poco 两个测试框架:

  • Airtest框架,是一个跨平台的、基于图像识别的UI自动化测试框架,适用于游戏和App,支持平台有Windows、Android和iOS

  • Poco框架,是一款基于UI控件识别的自动化测试框架,目前支持Unity3D/cocos2dx-*/Android原生app/iOS原生app/微信小程序,也可以在其他引擎中自行接入poco-sdk来使用,用appium做UI测试的同学应该比较容易上手。

3,环境

这里选择 poco + pytest,Windows 10,测试机操作系统为Android 10

二,安装poco

AirtestIDE后续只用于生成操作步骤代码(定位及操作),用例的运行会使用Pycharm,因此Python环境需要安装pocoui第三方库

# 安装命令,使用清华镜像
pip install pocoui -i https://pypi.tuna.tsinghua.edu.cn/simple

三,使用AirtestIDE的Poco辅助工具录制代码

AirtestIDE连接手机,使用Poco辅助工具录制被测小程序操作步骤生成代码

1,打开AirtestIDE,按照步骤:

1.1,连接手机。打开手机开发者调试模式,连接电脑,此时AirtestIDE右侧会出现设备id,点击connect连接手机。

1.2,选择新建.py。点击上图2处,选择.py 纯Python(纯文本),然后会弹窗需要设置路径参数,这里暂时可以只设置Save Path,其他默认即可。

1.3,点击OK后,会在Save Path设置的路径里生成对应的.py文件,且生成初始化内容如下:

其中auto_setup() api的参数可以查看Airtest官方接口文档

2,Poco辅助窗选择Android,点击2处Yes,我们会发现脚本里会新增Android相关的代码。

选中Poco辅助窗的Poco auto recording按钮,将光标放在编辑器的15行,鼠标点击操作需要测试的小程序即可录制操作步骤。Poco辅助窗的这三个按钮大家可以参考官方文档说明,或者分别选中后鼠标点击被测APP界面就很快知道区别了。

四,使用pytest框架,修改脚本,调试运行

1,在AirtestIDE中调试代码

小程序操作步骤录制如下,可以在AirtestIDE上面先调试运行,是否正确。

代码如下:

# -*- encoding=utf8 -*-
__author__ = "xiaoqq"

from airtest.core.api import *

from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
from airtest.cli.parser import cli_setup

if not cli_setup():
auto_setup(__file__, logdir=True, devices=[
"Android://127.0.0.1:5037/5EN0219305002521",
])


# script content
print("start...")
poco(text="扫一扫").click()
poco(text="相册").click()
poco("com.alipay.mobile.beephoto:id/iv_photo").click()
poco(text="大物洗").click()
poco(text="选好了").click()
poco(text="已关门").click()
poco(text="余额").click()
poco(text="去支付").click()
poco(text="立即支付").click()


# generate html report
# from airtest.report.report import simple_report
# simple_report(__file__, logpath=True)

2,完善代码

接下来就在Pychram里打开该.py文件,开始完善脚本。增加断言,并使用pytest管理、执行用例

# -*- encoding=utf8 -*-
__author__ = "xiaoqq"

import pytest
from airtest.core.api import *

@pytest.fixture(scope='function', params=['Android://127.0.0.1:5037/64c83202'])
def base_poco(request):
'''
构造新的poco,完成测试用例执行前、后的步骤
@return: 返回新的poco对象
'''
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
connect_device(request.param)
base_poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
base_poco.device.wake()
start_app("com.eg.android.AlipayGphone")
sleep(2)
yield base_poco
sleep(2)
stop_app("com.eg.android.AlipayGphone")
sleep(2)

def test_wash_order(base_poco):
print("start...")
base_poco(text="扫一扫").click()
base_poco(text="相册").click()
base_poco("com.alipay.mobile.beephoto:id/iv_photo").click()
base_poco(text="大物洗").click()
base_poco(text="选好了").click()
base_poco(text="已关门").click()
base_poco(text="余额").click()
base_poco(text="去支付").click()
base_poco(text="立即支付").click()
time.sleep(1)
result_1 = base_poco(text="支付成功").exists()
assert result_1 == True
print("end...")

if __name__ == '__main__':
pytest.main()

3,运行代码

运行该模块,可以查看手机上的操作步骤,结果通过!

简单的demo已经跑通,后续需要优化项目的目录结构,并加入截图、日志、测试报告模块,搭建成一个完整的自动化测试项目。

五,总结

  • 相对来说appium太笨重了,而网易提供的AirtestIDE里的poco辅助工具可以将元素定位及操作可以直接生成为代码。

  • 在AirtestIDE中只能运行单个的脚本,无法批量的运行测试脚本和管理测试脚本,而利用Airtest提供的开源的API结合其他的python库使用,可以实现更复杂的代码逻辑。

  • poco框架看起来代码简洁程度比airtest更好,维护更方便,且airtest框架基于图像识别,实际运行工程中可能会受识别率的影响。但对于新手或者代码基础薄弱的测试同学而言,airtest更容易上手。

使用AirtestProject+pytest做支付宝小程序UI自动化测试的更多相关文章

  1. 微信小程序UI自动化:实践之后的记录01-选择工具/框架

    目录 1. 前言 2. 工具/框架/库选择 2.1 miniprogram-automator官方介绍(摘自官方哈) 小程序自动化 特性 2.2 minium官方介绍 特性 3. 如何选择 4. 对应 ...

  2. 支付宝小程序日期选择组件datePicker封装

    github 地址 https://github.com/iocool/antminDatePicker 最近在做支付宝小程序(以下简称小程序)开发,发现小程序的日期选择组件很不好用,比如安卓和IOS ...

  3. 【转】微信小程序实现自动化测试

    山雨欲来风满楼,最近微信小程序相关开发文章吹遍大江南北,亦有摧枯拉朽万象更新之势.问小程序形为何物,直教IT众生怡情悦性高潮迭起.作为一名有着远大理想“包袱”与互联网变革 “使命感”的测试工程师,我再 ...

  4. 小程序开发过程中常见问题[微信小程序、支付宝小程序]

    目录 一.样式中如何使用background-image呢? 二.使用自适应单位rpx类似于rem,布局尽量使用flex布局 三.万能的{{双大括号,用于在模版中输出变量 四.你想要的基础组件和API ...

  5. 支付宝小程序PHP全栈开发--前端样式的设计.acss样式详解

    关于.acss文件 在视频中已经说过了,小程序的设计思想和原生app的设计思想颇为相似,基本的应用单元为页面.当然对于一个页面来说每一个元素的放置位置在哪儿以及显示成什么样子这个是由样式来决定的.我们 ...

  6. 支付宝小程序开发之与微信小程序不同的地方

    前言: 本文仅汇总微信小程序移植支付宝小程序过程中遇到的一些不同的地方,详细请参考官方开发文档. 网络请求: 对于网络请求,基本上改动不大,也就支付宝小程序没有responseType属性及响应码字段 ...

  7. 微信小程序快速移植支付宝小程序

    移植背景: 1. 支付宝小程序开发文档只了解了大致框架,跑了demo,具体Api.组件没太多了解: 2. 已有微信小程序,移植支付宝小程序做预研(主要针对授权登录.支付等功能). 3. 移植的微信小程 ...

  8. Tarojs+redux支付宝小程序开发攻略

    技术选型 对于习惯react语法的开发者来讲,RN是实现native的必备工具. 我们甚至可以屏蔽官方稳定而强大的配置层,直接上手开发. 而后,同为表层React语法的Rax.Taro这样的开源多端开 ...

  9. 支付宝小程序与微信小程序开发功能和语法糖不同

    最近开始负责公司webapp数据打通支付宝小程序,之前已经打通了微信小程序,现在根据支付宝小程序的开发文档在之前的模板上面做修改. 在修改模板的过程中,总结一下双方功能和语法糖的不同之处. 框架: a ...

随机推荐

  1. 用于测试 SqlAnalyzer1.01 的21个测试用例

    感慨:当年看着 https://www.cnblogs.com/heyang78/p/11451814.html 一文望洋兴叹,如今我也自己做出来了! 21. 原文=select name, cnt ...

  2. 求支付表中按id累积和最接近100的那条记录

    此例源自美团的一道SQL面试题 支付表结构: create table hy_payment( id number(4,0) primary key, pay number(3,0) not null ...

  3. [oracle/sql]求员工表中每个部门里薪水最高的员工,那种sql最优?

    开始正题前,先把我的数据库环境列出: # 类别 版本 1 操作系统 Win10 2 数据库 Oracle Database 11g Enterprise Edition Release 11.2.0. ...

  4. MySQL通过POIN数据类型查询指定范围内数据

    情况一: 数据库:只有point类型的location字段 实体类:有经纬度字段(double).originLoction字段(存放string类型的数据库location字段:POINT(123. ...

  5. Java中枚举的用法

    public enum Week { DAY1("周一", 0.9), DAY2("周二", 0.9), DAY3("周三", 0.8), ...

  6. Java 后端开发常用的 10 种第三方服务

    请肆无忌惮地点赞吧,微信搜索[沉默王二]关注这个在九朝古都洛阳苟且偷生的程序员.本文 GitHub github.com/itwanger 已收录,里面还有我精心为你准备的一线大厂面试题. 严格意义上 ...

  7. 2. 构建DNS集群

    DNS是什么 DNS(Domain Name System,域名系统),是互联网上存储域名和IP映射关系的一个分布式数据库,他负责把域名转换为IP地址,或IP转换为域名,工作于OSI应用层之上,DNS ...

  8. Java成神之路:第三帖----数据结构与算法之队列

    数据结构与算法--队列 今天掉了两根头发,摸掉的,记得 别乱摸,很珍贵的!! 什么是队列? 1)队列是一个有序列表,可以用数组或是链表来实现 2)遵循 先入先出 的原则.即:先存入队列的数据,要先取出 ...

  9. Mysql查看最大连接,修改

    1.查看最大连接量 show variables like '%max_connections%'; 2.修改最大连接量 //修改完记得重启 set GLOBAL max_connections = ...

  10. Nginx反代MogileFS集群

    上一篇博文我们主要聊了下分布式文件系统MogileFS的组件以及部署使用,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13677279.html:今天我们主要 ...