atx测试框架实现手机应用UI自动化测试
# 安装
pip install -U pytest
# 查看安装版本
pip show pytest
# 或者
pytest --version
pip install --pre -U uiautomator2 #默认安装最新版本
pip install uiautomator2=0.1.11#指定版本安装
# 从github下载atx-agent文件,并推送到手机。在手机上安装包名为`com.github.uiautomator`的apk
$ python -m uiautomator2 init
success
pip install selenium
pip install --pre weditor
python -m atx gui
# -*- coding: utf-8 -*- import atx
import os
from PIL import Image
import pytest
import allure
from allure_commons.types import AttachmentType
from logzero import logger
from uiautomator2 import UiObjectNotFoundError
# from base.chromedrvier import ChromeDriver
from atx.ext.chromedriver import ChromeDriver ISMAC = 1
TIMEOUT = 10
@allure.step("{0}")
def connect_phone(devices):
global package_name,main_activity
# devices = "D6JNOV5PCANFAURW"
logger.info("连接:" + devices)
package_name = 'com.netease.cloudmusic'#网易云音乐APP的包名
main_activity = ".activity.LoadingActivity" #网易云音乐的activity
d = atx.connect(devices)#手机的devices name
d.start_app(package_name, main_activity)#启动网易云音乐app
return d @allure.step("{1}")
def click_text(atx_conn, action_m, text, timeout=TIMEOUT):
"""
点击安卓原生的控件
:param atx_conn:atx实例
:param action_m:执行的行为描述
:param text:需要查找的按钮的文本
:param timeout:等待
:return:
""" logger.info(action_m)
atx_conn(text=text).click(timeout=timeout)
report_jietu(atx_conn,action_m)#截图 @allure.step("{1}")
def click_id(atx_conn, action_m, id, timeout=TIMEOUT):
""" :param atx_conn: 连接实例
:param action_m: 操作描述
:param id: resureid
:param timeout: 超时时间
:return:
"""
logger.info(action_m)
atx_conn(resourceId = id).click(timeout=timeout)
report_jietu(atx_conn,action_m)#截图 def report_jietu(atx_conn,action_m):
"""
截图
:param atx_conn:atx实例
:param action_m:action_m,被用作图片名称
:return:
"""
image = screenshot(atx_conn,action_m)#截图
with open(image,"rb") as f :
file = f.read()
allure.attach(action_m,file,allure.attach_type.PNG)#截图附件 def screenshot(atx_conn,url):
"""
截图
:param atx_conn:atx实例
:param url:url,被用作图片名称
:return:
""" path = os.path.abspath(os.path.dirname(os.getcwd()))
if ISMAC:
path = path + "/report/image/%s.png" % (url)
else:
path = path + "\\report\\image\\%s.png" % (url)
imgname = path
atx_conn.screenshot(imgname)
img(imgname)
return imgname def img(image):
"""
对图片进行压缩,覆盖原图进行保存
:param image: 图片路径
:return:
""" im = Image.open(image)
# 获得图像尺寸
w, h = im.size
# print('原图尺寸: %sx%s' % (w, h))
# 缩放到25%:
im.thumbnail((w // 4, h // 4))
# 把缩放后的图像用jpeg格式保存:
im.save(image) @allure.feature('网易云音乐')
class Test_misuc(object):
@allure.story('进入每日推荐,点击播放第一首歌曲')
def test_meirituijian(self):#进入每日推荐,点击播放第一首歌曲
d = connect_phone("D6JNOV5PCANFAURW")#连接手机,启动云音乐
click_text(d,"点击每日推荐","每日推荐")#点击每日推荐
click_text(d,"点击播放全部","播放全部")#点击播放全部
click_id(d,"点击暂停播放按钮","com.netease.cloudmusic:id/tr")#点击暂停播放按钮
d.stop_app(package_name) #关闭云音乐 @allure.story('进入我喜欢的音乐,将第一首歌分享给好友')
def test_share(self):#分享歌曲给好友
d = connect_phone("D6JNOV5PCANFAURW")#连接手机,启动云音乐
click_text(d,"点击我的","我的")
click_text(d,"点击我喜欢的音乐","我喜欢的音乐")
click_id(d,"点击更多","com.netease.cloudmusic:id/a")
click_text(d,"点击分享","分享")
click_text(d,"点击分享微信好友","微信好友")
# driver = ChromeDriver(d).driver() #启动selenium 如果是webview页面的话,需要启动selenium,然后根据selenium的定位方式查找元素
click_text(d,"分享给唯安格","唯安格")
click_text(d,"点击分享","分享")
click_text(d,"点击返回网易云音乐","返回网易云音乐")
d.stop_app(package_name) if __name__ == '__main__':
a = Test_misuc()
a.test_meirituijian()
a.test_share()
运行上面代码并生成测试报告:
运行用例: py.test test_aa.py -s --alluredir ./reports
生成报告:allure generate --clean reports
其他工具启动:
启动weditor :python3 -m weditor
uiautomator2 初始化:python3 -m uiautomator2 init
启动atx gui: python3 -m atx gui
指定用例运行:py.test test_ddz.py::TestClass::test_share --alluredir ./reports
2、查看测试报告:执行完:allure generate --clean reports
命令之后,会在当前文件夹生成:allure-report文件夹,该文件下会有一个index.html的文件,只用浏览器打开index.html文件,可以查看生成的测试报告。
如下图:
allure生成测试报告的方法请看官方文档:https://docs.qameta.io/allure/#_pytest 参考:
atx测试框架实现手机应用UI自动化测试的更多相关文章
- 基于APPIUM测试微信公众号的UI自动化测试框架(结合Allure2测试报告框架)
框架初衷 前两周组内的小伙伴跟我说她现在测试的微信公众号项目(保险)每次上新产品时测试起来很费时,存在大量的重复操作(点点点),手工测试每个产品可能需要半天到一天的时间,复杂的产品需要两天. 由于保险 ...
- Ui自动化测试框架
为了提高我们的UI测试效率,我们引用Ui自动化测试框架,这里简单先描述一下,后续会详细补充: 了解一个测试框架,我们就需要了解一下源码,能看懂源码即可: 1.稳定先封装wait EC,电脑性能配置较好 ...
- 常用的自动化测试框架及测试框架的发展(Alpha)
前言:自动化测试在过去的20年已经有了很大的发展.最初的测试工具只提供了简单的捕捉/回访功能,维护性较差.而且脚本工具实现需要很强的开发技术和经验,而且数量众多的测试脚本加上没有文档记录因此维护起来较 ...
- Selenium 4 Java的最佳测试框架
几十年来,Java一直是开发应用程序服务器端的首选编程语言.尽管JUnit一直在与开发人员一起帮助他们进行自动化的单元测试,但随着时间的推移和测试行业的发展,特别是伴随着自动化测试的兴起,已经开发了许 ...
- UI自动化测试、接口测试等自动化测试策略
今天跟大家介绍UI测试.接口测试.单元测试主要内容,以及每种测试花费时间讨论.UI测试[Selenium]UI测试是最接近软件真实用户使用行为的测试类型.通常是模拟真实用户使用软件的行为,即模拟用户在 ...
- Google推出iOS功能性UI测试框架EarlGrey
经过了一段时间的酝酿后,Google很高兴地宣布了EarlGrey,一款针对于iOS的功能性UI测试框架.诸如YouTube.Google Calendar.Google Photos.Google ...
- APP的UI自动化测试框架及平台化探索
顾铮,10年+测试及测试开发相关经验,2014年加入京东,曾主导设计开发UI测试框架,参与CI测试平台建设,现负责iOS侧的工具,框架建设.在UI自动化,性能测试,单元测试方面有较深入研究,在App, ...
- 自动化测试中级篇——LazyAndroid UI自动化测试框架使用指南
原文地址https://blog.csdn.net/iamhuanggua/article/details/53104345 简介 一直以来,安卓UI自动化测试都存在以下两个障碍,一是测试工具Mo ...
- 避免重复造轮子的UI自动化测试框架开发
一懒起来就好久没更新文章了,其实懒也还是因为忙,今年上半年的加班赶上了去年一年的加班,加班不息啊,好了吐槽完就写写一直打算继续的自动化开发 目前各种UI测试框架层出不穷,但是万变不离其宗,驱动PC浏览 ...
随机推荐
- Python11_文件的读写
1.打开和关闭文件(文件对象的方法open,close) file object = open(file_name [, access_mode][, buffering]) 各个参数的细节如下: f ...
- spring-redis-session 自定义 key 和过期时间
对于分布式应用来说,最开始遇到的问题就是 session 的存储了,解决方案大致有如下几种 使用 spring-session 它可以把 session 存储到你想存储的位置,如 redis,mysq ...
- TCP/IP||UDP广播和多播
1.概述 广播和多播应用于UDP,TCP是一个面向连接协议,意味着分别运行与两个主机内的两进程间存在一个连接,在考虑多个主机内的共享通信网络,每个以太网帧包含源主机和目的主机以太网地址(48bit), ...
- CodeForces - 786B -- 线段树优化建图
刚开始想了两个小时,打算把区间分块然后计算,但是这就很灵性了看了一个大佬的博客,侵删 #include<cstring> #include<iostream> #include ...
- Z字形变换 leetcode 6
一.按行存储 1.解题思路 1.通过当前行的不断上下循环移动 2.将字符按序存放入vector中 3.最后再按行取出 2.代码及注释 class Solution { public: string c ...
- 将Samba设置为Active Directory域控制器
一 简介 从版本4.0开始,samba可以作为Active Directory(AD)域控制器(DC)运行,如果在生产环境中安装samba,建议运行两个或者多个DC用于故障转移 本文介绍如何让将一个S ...
- 深度兴趣网络DIN-SIEN-DSIN
看看阿里如何在淘宝做推荐,实现"一人千物千面"的用户多样化兴趣推荐,首先总结下DIN.DIEN.DSIN: 传统深度学习在推荐就是稀疏到embedding编码,变成稠密向量,喂给N ...
- centos安装pip,zipimport.ZipImportError报错
安装pip下载pip安装包wget https://bootstrap.pypa.io/get-pip.py 执行以下报错 python get-pip.py ##报错内容(zipimport.Zip ...
- python I/O编程
1.文件读写 使用open打开文件,f=open('/user/test.txt','r'),r表示可读 如果文件不存在,则抛出IOError 文件打开,则用read()方法进行读取 最后关闭用clo ...
- K8s生产架构
部分图片显示问题,特附上有道云笔记中的链接:http://note.youdao.com/noteshare?id=df78492d2c25383975c67f3eadf0bbd9&sub=4 ...