从0到1完成UI自动化测试框架搭建之Pytest

上篇文章中,我们学会了如何使用UI Automator2+atx编写简单的Android自动化脚本。

但是有个问题,大家可以思考下,光用自动化脚本让它自己动起来,是不是缺了点什么?

我们写测试用例的时候,是不是经常写:用例名 + 前置条件 + 操作步骤 + 预期结果 + 实际结果,用这个方法去判断一条用例是否通用。

自动化脚本呢?充其量相当于操作步骤。

我们还需要部分前置条件、预期结果、通过预期结果和实际结果的比对,来判断用例是否pass。所以我们这里引入了单元测试框架Pytest。

Pytest是一个非常成熟的全功能的Python测试框架,这里我们不做展开,只介绍我当前写demo用到的部分,有兴趣的同学,自行研究。

下载Pytest

pip install -U pytest

在这里插入图片描述
可以用pytest --version查看当前Pytest版本号,验证是否安装成功。

命名规则

1、文件名要用test_XXX.py或者XXX_test.py的形式。

2、测试类以Test开头,并且不能带有 init 方法。

3、测试函数也要用test_XXX的形式。

那我们知道了这三点,就可以开始写demo了:
在这里插入图片描述

如图,Pytest的基本结构就是这样了。我们运行一下,看下Pytest的执行顺序:
在这里插入图片描述 

我们可以看出,它是按setup_class—setup—第一个方法—teardown—setup—第二个方法—…—teardown—teardown_class这个顺序去执行的。

然后每个测试函数中,通过assert去进行断言,然后全部断言的结果汇总后打印出来告诉你执行了多少条,哪个测试函数没通过。

那我们结合上节的UI Automator2的自动化框架,再一个自动化相关的Pytest例子:


# coding:gbk
import pytest
import uiautomator2 as u2# 连接设备
d = u2.connect('A3KUUT2113000390')class Test_Pytest():def setup_class(self):# 启动网易云音乐d.app_start('com.netease.cloudmusic')d(text="跳过").clickdef test_case_001(self):# 点击我的页面d.xpath('//*[@resource-id="com.netease.cloudmusic:id/bottomNav"]/android.view.ViewGroup[3]/android.widget.ImageView[1]').click()# 断言元素(创建歌单)存在assert d(description="创建歌单").exists()def test_case_002(self):# 点击创建歌单d(resourceId="com.netease.cloudmusic:id/create").click()# 给歌单命名为d(resourceId="com.netease.cloudmusic:id/etPlaylistName").set_text('new_play')# 点击完成d(resourceId="com.netease.cloudmusic:id/tvCreatePlayListComplete").click()# 返回我的页面d(description="转到上一层级").click()# 断言歌单名为new_play的歌单存在assert d(resourceId="com.netease.cloudmusic:id/name", text="new_play").exists()def teardown_class(self):# 关闭d.app_stop('com.netease.cloudmusic')if __name__=='__main__':pytest.main(["-s","test_Pytest.py"])

我们这边写了2个用例,一个验证云音乐启动后,点击跳转"我的"页面是否OK,一个验证创建歌单功能是否OK。

我们运行一下,看下测试结果:
在这里插入图片描述
截图中可以看出,2条用例,测试结果都是pass,一共用时7秒左右。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/6116.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言第七课----------函数的定义及使用--------C语言重要一笔

作者前言 个人主页::小小页面 gitee页面:秦大大 一个爱分享的小博主 欢迎小可爱们前来借鉴 __________________________________________________________ 目录 1.函数是什么 2. 库函数 3. 自定义函数 4. 函数参数 5. 函数调用 6. 函数的嵌套调用和链式访问 7. 函数的声…

两天学会用Webpack打包前端代码-day01

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 什么是 Webpack? 使用 Webpack 体验webpack打包过程 修改 Webpack 打包入口和出口 入口 出…

一些抄袭CSDN的爬虫网站(长期收集更新)

目录 一、CodeAntenna1. 简介2. 网址 二、待更新。。。 本文由CSDN点云侠原创,爬虫网站请努力加油爬。 一、CodeAntenna 1. 简介 互联网耻辱柱排行榜Top 1。本人博客里任何一点免费可读的部分都被该网站爬得体无完肤。 2. 网址 https://codeantenna.com/a/B4cMB…

MQTT 与 Kafka|物联网消息与流数据集成实践

MQTT 如何与 Kafka 一起使用? MQTT (Message Queuing Telemetry Transport) 是一种轻量级的消息传输协议,专为受限网络环境下的设备通信而设计。Apache Kafka 是一个分布式流处理平台,旨在处理大规模的实时数据流。 Kafka 和 MQTT 是实现物…

数学建模-时间序列分析 实例

实例1销量数据预测和实例2人口数据预测实例3上证指数预测和实例4gdp增长率预测 数据-定义时间 不加置信区间清晰点 例二 实例3

json-server Node.js 服务,前端模拟后端提供json接口服务

json-server Node.js 服务,前端模拟后端提供json接口服务 背景: 前后端分离的项目,如果前端写页面的话,必须的后端提供接口文件,作为前端等待时间太久,不便于开发进行,如果前端写的过程中自己搭建一个简要的…

使用 Qt designer

使用 Qt designer 1、配置Qt designer外部工具2、Qt designer(Qt 设计师)使用2.1 创建保存文件ui2.2 pyuic5.exe 工具 转化成为py文件2.3 直接导入UI文件 2、qrc资源管理器 1、配置Qt designer外部工具 实质就是 Qt\bin 工具中 designer.exe 请查看 PyQ…

wpf prism使用

目录 1.Nuget中安装prism框架: 2.改造程序启动入口 3.View和ViewModel自动关联 4.绑定 5.Command 6.Event Aggregator(事件聚合器)、消息通知 7.弹窗、对话服务 DialogService 8.Region区域 9.Navigation导航 10.module 模块 1.Nug…

清洁机器人规划控制方案

清洁机器人规划控制方案 作者联系方式Forrest709335543qq.com 文章目录 清洁机器人规划控制方案方案简介方案设计模块链路坐标变换算法框架 功能设计定点自主导航固定路线清洁区域覆盖清洁贴边沿墙清洁自主返航回充 仿真测试仿真测试准备定点自主导航测试固定路线清洁测试区域…

【C++技能树】Vector类解析与模拟实现

Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法…感兴趣就关注我bua! Vector 0.Vector简介1.Vector常用接口1.1constructor构造函数1.2 iteratorsort与findfindsort 1.3 Capacity相关接口1.4 Modify相关接口 2. Vector模拟实…

linux:secureCRT通过pem证书远程访问服务器

参考: secureCRT通过pem证书远程访问服务器_Fengshana的博客-CSDN博客 总结: 配置公钥即可

前端vue uni-app仿美团下拉框下拉筛选组件

在前端Web开发中,下拉筛选功能是一种非常常见的交互方式,它可以帮助用户快速选择所需的选项。本文将介绍如何利用Vue.js和uni-app框架来实现一个高效的下拉筛选功能。通过使用这两个强大的前端框架,我们可以轻松地创建具有响应式用户操作的下…

Sublime Text 4 激活教程(Windows+Mac)

下载安装 官网 https://www.sublimetext.com 点击跳转 2023.7.21 版本为4143 Windows激活方式 一、激活License方式 入口在菜单栏中"Help” -> “Enter License” 注意格式,可能会过期失效,失效就用方式二 Mifeng User Single User License E…

Linux底层

一. arm基础知识 基础:c语言 具有一定硬件基础 特点---》前后联系 arm目标: 看懂简单的汇编代码 会看电路图、芯片手册 学会如何用软件控制硬件思想 解决问题的办法 谈谈对嵌入式的理解? 以计算应用为中心,软硬件可裁剪的…

Cloudreve搭建云盘系统,并实现随时访问

文章目录 1、前言2、本地网站搭建1.环境使用2.支持组件选择3.网页安装4.测试和使用5.问题解决 3、本地网页发布1.cpolar云端设置2.cpolar本地设置 4、公网访问测试5、结语 1、前言 自云存储概念兴起已经有段时间了,各互联网大厂也纷纷加入战局,一时间公…

ONNX Runtime 加速深度学习(C++ 、python)详细介绍

ONNX Runtime 加速深度学习(C 、python)详细介绍 本文在 https://blog.csdn.net/u013250861/article/details/127829944 基础上进行了更改,感谢原作! ONNXRuntime(Open Neural Network Exchange)是微软推出的一款针对ONNX模型格式的推理框架&#xff0c…

妙记多 Mojidoc PC端(Mac 端+windows端)Beta版本正式上线!

你们呼唤了无数次的妙记多 Mojidoc PC客户端 Beta版本正式上线啦! 感谢300位妙友积极参与内测,给予了我们很多非常有效的意见和建议!我们会根据用户反馈不断优化和修复相关功能,在此感谢妙友们一直以来的支持~ PC端拥…

SkyWalking链路追踪中span全解

基本概念 在SkyWalking链路追踪中,Span(跨度)是Trace(追踪)的组成部分之一。Span代表一次调用或操作的单个组件,可以是一个方法调用、一个HTTP请求或者其他类型的操作。 每个Span都包含了一些关键的信息&am…

小程序 methods方法互相调用 this.onClickCancel is not a function

背景 做了一个自定义的弹出对话窗口,主要是自定义一些文本颜色。 问题 但是点击按钮事件:取消与确认,调用了同一个接口,然后想着走不同方法,需要调用methods其他方法。然后报错了: VM1081 WAService.js:…