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


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

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

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

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

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

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

    下载Pytest

    pip install -U pytest
    
    • 1

    在这里插入图片描述
    可以用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="跳过").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"])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

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

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

    最后感谢每一个认真阅读我文章的人,下面这个网盘链接也是我费了几天时间整理的非常全面的,希望也能帮助到有需要的你!

    在这里插入图片描述

    这些资料,对于想转行做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……

    如果你不想一个人野蛮生长,找不到系统的资料,问题得不到帮助,坚持几天便放弃的感受的话,可以点击下方小卡片加入我们群,大家可以一起讨论交流,里面会有各种软件测试资料和技术交流。

    敲字不易,如果此文章对你有帮助的话,点个赞收个藏来个关注,给作者一个鼓励。也方便你下次能够快速查找。

    自学推荐B站视频:

    零基础转行软件测试:38天自学完软件测试,拿到了字节的测试岗offer,堪称B站最好的视频!

    自动化测试进阶:已上岸华为,涨薪20K,2022最适合自学的python自动化测试教程,自己花16800买的,无偿分享

    在这里插入图片描述

  • 相关阅读:
    【SpringMVC】执行流程
    c++11新特性篇-委托构造函数和继承构造函数
    简单的股票行情展示演示(一) - 实时标的数据
    基于帝企鹅算法优化BP神经网络实现数据预测(Matlab代码实现)
    Lua-http库写一个爬虫程序怎么样 ?
    重绘和回流
    【深入解读Redis系列】Redis系列(五):切片集群详解
    windows下-mysql环境配置,以及使用navicat可视化数据库,便捷撰写sql语句。
    JAVA-JDBC 原理及使用
    Theory behind GAN
  • 原文地址:https://blog.csdn.net/xfw17397388089/article/details/126384913