• 15
  • 15
分享
  • 全功能Python测试框架:pytest——软件测试圈
  • 恬恬圈 2021-10-08 09:46:12 字数 2649 阅读 1753 收藏 15

python通用测试框架大多数人用的是unittest+HTMLTestRunner,这段时间看到了pytest文档,发现这个框架和丰富的plugins很好用,所以来学习下pytest。

pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个特点:

  • 简单灵活,容易上手;

  • 支持参数化;

  • 能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests);

  • pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等;

  • 测试用例的skip和xfail处理;

  • 可以很好的和jenkins集成;

  • report框架----allure 也支持了pytest。

安装pytest:

pip install -U pytest

验证安装的版本:

pytest --version

几个pytest documentation中的例子:

例子1:

import pytest
# content of test_sample.py
def func(x):
    return x + 1
def test_answer():
    assert func(3) == 5

命令行切换到文件所在目录,执行测试(也可以直接在IDE中运行):

1.png

这个测试返回一个失败报告,因为func(3)不返回5。

例子2:

当需要编写多个测试样例的时候,我们可以将其放到一个测试类当中,如:

class TestClass:  
    def test_one(self):  
        x = "this"  
        assert 'h' in x  
  
    def test_two(self):  
        x = "hello"  
        assert hasattr(x, 'check')

运行以上例子:

2.png

从测试结果中可以看到,该测试共执行了两个测试样例,一个失败一个成功。同样,我们也看到失败样例的详细信息,和执行过程中的中间结果。-q即-quiet,作用是减少冗长,具体就是不再展示pytest的版本信息。

如何编写pytest测试样例

通过上面2个实例,我们发现编写pytest测试样例非常简单,只需要按照下面的规则:

  • 测试文件以test_开头(以_test结尾也可以)

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

  • 测试函数以test_开头

  • 断言使用基本的assert即可

运行模式

Pytest的多种运行模式,让测试和调试变得更加得心应手,下面介绍5种常用的模式。在介绍之前需要提醒一句,运行pytest时会找当前目录及其子目录中的所有test_*.py 或 *_test.py格式的文件以及以test开头的方法或者class,不然就会提示找不到可以运行的case了。

1.运行后生成测试报告(htmlReport)

安装pytest-html:

pip install -U pytest-html

运行模式:

pytest --html=report.html

报告效果:

3.png

在以上报告中可以清晰的看到测试结果和错误原因,定位问题很容易。

2.运行指定的case

当我们写了较多的cases时,如果每次都要全部运行一遍,无疑是很浪费时间的,通过指定case来运行就很方便了。

例子代码:

class TestClassOne(object):
    def test_one(self):
        x = "this"
        assert 't'in x
    def test_two(self):
        x = "hello"
        assert hasattr(x, 'check')
class TestClassTwo(object):
    def test_one(self):
        x = "iphone"
        assert 'p'in x
    def test_two(self):
        x = "apple"
        assert hasattr(x, 'check')

运行模式:

模式1:直接运行test_se.py文件中的所有cases:

pytest test_se.py

模式2:运行test_se.py文件中的TestClassOne这个class下的两个cases:

pytest test_se.py::TestClassOne

模式3:运行test_se.py文件中的TestClassTwo这个class下的test_one:

pytest test_se.py::TestClassTwo::test_one
注意:定义class时,需要以T开头,不然pytest是不会去运行该class的。

3.多进程运行cases

当cases量很多时,运行时间也会变的很长,如果想缩短脚本运行的时长,就可以用多进程来运行。

安装pytest-xdist:

pip install -U pytest-xdist

运行模式:

pytest test_se.py -n NUM

其中NUM填写并发的进程数。

4.重试运行cases

在做接口测试时,有事会遇到503或短时的网络波动,导致case运行失败,而这并非是我们期望的结果,此时可以就可以通过重试运行cases的方式来解决。

安装pytest-rerunfailures:

pip install -U pytest-rerunfailures

运行模式:

pytest test_se.py --reruns NUM

NUM填写重试的次数。

5.显示print内容

在运行测试脚本时,为了调试或打印一些内容,我们会在代码中加一些print内容,但是在运行pytest时,这些内容不会显示出来。如果带上-s,就可以显示了。

运行模式:

pytest test_se.py -s

另外,pytest的多种运行模式是可以叠加执行的,比如说,你想同时运行4个进程,又想打印出print的内容。可以用:

pytest test_se.py -s -n 4


作者:呆呆冬

链接:https://www.jianshu.com/p/932a4d9f78f8

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 作为一名合格的软件测试工程师,哪些技能是最需要及时掌握的?基本测试技能:1、测试用例测试用例是测试的根本,良好的测试用例,对测试起到的作用不言而喻。所以对于一个有一定基础的测试新人,应首先学习如何编写合理、有效的测试用例,同时,高效的执行测试用例,也是可以思考的问题。2、测试方法测试的方法有很多种,每种方法如何使用,使用的技巧,应做为一个重点去学习,毕竟快速、尽量多的发现BUG,是测试人员工作中重要的一个环节。3、测试工具自动化测试工具、测试管理工具、配置管理工具、其它测试辅助工具的使用,有一定的了解,能使用它提高测试工作的效率。4、业务知识(需求理解)能快速了解被测程序的业务知识及功能使用。...
            0 0 1176
            分享
          •   看图说话:  界面  1、界面布局是否合理, 是否显示完整。  2、界面上方显示信息。     ·左上方显示"淘宝网"字样     · 右上方显示"登录页面改进"字样  3、图片展示。     · 是否清晰     · 大小设计是否合理     · 放置位置是否合理  4、界面文字。     · 是否有错别字     · 文字的大小,粗细, 样式, 放置...
            0 0 4149
            分享
          • 摘要:测试数据是测试过程中的主要瓶颈之一。通过简化测试数据,我们可以通过解决四个主要挑战来解决这个瓶颈。在许多组织中,当尝试实现CI/CD、敏捷、测试自动化等时,我们将测试数据视为测试过程中的主要瓶颈之一。大量的时间浪费在寻找正确的测试数据用例上,多个团队在同一个数据库上工作(随之而来的结果),时间浪费在制作和等待完整大小的副本上,所有这些都减慢了您的测试工作,更不用说它所引起的沮丧和恼怒了。如果您想知道如何解决这个测试数据瓶颈,请继续阅读。回归基础在20世纪60年代太空竞赛的高潮时期,美国宇航局的科学家们意识到钢笔无法在太空中使用。他们需要想出另一种方法让宇航员记录东西。因此,他们花了数年时...
            1 0 1016
            分享
          •   测试用例的设计方法  等价类  因材施教的例子:  原则上讲,老师都应该根据每个学生的学习情况制定相应符合的学习方案,但是实际上学生太多,老师管不过来,只能讲学生分为三六九等,优等生强调知识面的扩展和综合能力的提升,中等生强调夯实基础,查缺补漏,差等生强调优先掌握重点,暂时逃过难点.......  思路:输入的集合是无穷的,不能全部都覆盖到。  等价类:依据需求将输入划分为若干个等价类,从等价类中选出一个测试用例,如果这个测试用例测试通过,则认为所代表的整个等价类测试通过,这样就可以通过较少的测试用例达到尽量多的功能覆盖,解决了不能穷举测试的问题。  弊端:等价类只考虑输入域的分类,没有考...
            14 15 4714
            分享
          •   据《华尔街日报》报道,Meta 将于本周早些时候推出 Threads 的网络版,这是公司为 X(前身为 Twitter)量身打造的竞争产物。有趣的是,网页版的Threads自这一短消息社交平台服务开始以来一直缺失,令人沮丧。  Meta 首席执行官马克-扎克伯格(Mark Zuckerberg)在本月早些时候表示,公司正在努力增加这一功能,同时改进搜索功能(其实就是搜索功能--现在,你只能在该平台上搜索用户名),"未来几周内"就会准备就绪。  不过,《华尔街日报》称,消息人士透露,该功能的"推出计划尚未最终确定,可能会有变化"。莫塞里上周在 Thre...
            0 0 1037
            分享
      • 51testing软件测试圈微信