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

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

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

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

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

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

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

下载Pytest

python 复制代码
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例子:

python 复制代码
# 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="跳过").click
 
    def 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秒左右。

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关推荐
小欣加油8 小时前
leetcode 1018 可被5整除的二进制前缀
数据结构·c++·算法·leetcode·职场和发展
小猪咪piggy10 小时前
【算法】day 20 leetcode 贪心
算法·leetcode·职场和发展
CoderYanger12 小时前
优选算法-优先级队列(堆):75.数据流中的第K大元素
java·开发语言·算法·leetcode·职场和发展·1024程序员节
Controller-Inversion12 小时前
力扣53最大字数组和
算法·leetcode·职场和发展
测试界的海飞丝1 天前
10道软件测试面试题及其答案:
服务器·测试工具·职场和发展
小白程序员成长日记1 天前
2025.11.24 力扣每日一题
算法·leetcode·职场和发展
芳草萋萋鹦鹉洲哦1 天前
【elemen/js】阻塞UI线程导致的开关卡顿如何优化
开发语言·javascript·ui
是Yu欸1 天前
DevUI MateChat 技术演进:UI 与逻辑解耦的声明式 AI 交互架构
前端·人工智能·ui·ai·前端框架·devui·metachat
资深web全栈开发1 天前
LeetCode 1015. 可被 K 整除的最小整数 - 数学推导与鸽巢原理
算法·leetcode·职场和发展