<返回更多

Pytest 快速入门

2023-04-17    测试玩家勇哥
加入收藏

Pytest的入门操作使用

pytest 特点:

  1. 非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考

  2. 能够支持简单的单元测试和复杂的功能测试

  3. 支持参数化

  4. 执行测试过程中可以将某些测试跳过(skip),或者对某些预期失败的case标记成失败

  5. 支持重复执行(rerun)失败的 case

  6. 支持运行由 nose, unittest 编写的测试 case

  7. 可生成html报告

  8. 方便的和持续集成工具 jenkins 集成

  9. 可支持执行部分用例

  10. 具有很多第三方插件,并且可以自定义扩展

安装

直接执行 如下命令即可安装pytest

  • pip install pytest

我们还需要产生测试报表,所以要安装一个第三方插件 pytest-html ,执行如下命令安装

  • pip install pytest-html
def func(x):    return x + 3

def test_answer():    assert func(3) == 6

class TestClass:    def test_01(self):        print('n用例01')        assert 1 == 1
    def test_02(self):        print('n用例02')        assert 2 == 2
    def test_03(self):        print('n用例03')        assert 3 == 2

 

然后,cmd进入当前文件目录,直接执行

  • pytest

 

PS D:Lemonpy45webatuotestpytest_learn> pytest .test_learn01.py========================================================== test session starts ==========================================================platform win32 -- Python 3.9.7, pytest-6.2.5, py-1.10.0, pluggy-1.0.0rootdir: D:Lemonpy45webatuotestpytest_learnplugins: allure-pytest-2.9.43, anyio-3.3.2, html-3.1.1, metadata-1.11.0collected 4 items                                                                                                                        
test_learn01.py ...F                                                                                                               [100%]
=============================================================== FAILURES ================================================================___________________________________________________________ TestClass.test_03 ___________________________________________________________
self = <test_learn01.TestClass object at 0x0000023FFB6743D0>
    def test_03(self):        print('n用例03')>       assert 3 == 2E       assert 3 == 2
test_learn01.py:27: AssertionError--------------------------------------------------------- Captured stdout call ----------------------------------------------------------
用例03======================================================== short test summary info ========================================================FAILED test_learn01.py::TestClass::test_03 - assert 3 == 2====================================================== 1 failed, 3 passed in 0.21s ======================================================PS D:Lemonpy45webatuotestpytest_learn>

注意:

pytest运行方式测试类主函数模式#  test_abc.pyimport pytest  # 引入pytest包
def test_a():  # test开头的测试函数    print("------->test_a")    assert 1  # 断言成功
def test_b():    print("------->test_b")    assert 0  # 断言失败

if __name__ == '__main__':    # pytest.main("-s  test_abc.py")  早期版本是这样的执行的    pytest.main(["-s",  "test_abc.py"])  # 调用pytest的main函数执行测试

 

命令行模式运行

  • # pytest 文件路径/测试文件名pytest ./test_abc.py

 

Pytest用例的设计原则

Pytest写用例时候,一定要按照下面的规则去写,否则不符合规则的测试用例是不会执行的

Pytest之并发执行

在Pytest测试框架中提供了pytest-xdist可以并发执行测试用例,来提升测试用例的执行速度。通常的情况下,测试用例的执行都是依据一定的规则来按顺序进行执行,这样的结果是每次执行的时候有的资源就只能被一个测试用例占用,而达不到测试用例执行的时候资源的共享,插件pytest-xdist插件可以很好的解决这个问题,一方面资源达到共享,基于第一点的考虑,也就达到了第二点的提升了测试执行的效率。

pytest的重复执行

  • 安装:pip3 install pytest-repeat

 

命令行方式

使用–count命令行选项来指定您要运行一个或多个测试的次数:

  • pytest --count = 10 test.py

 

代码方式

如果要在代码中将测试标记为重复多次,则可以使用

# @pytest.mark.repeat(count)装饰器:
import pytest@pytest.mark.repeat(3)def test_example():    print("执行成功")

 

重复测试直到失败

有时候,功能模块不稳定,会存在一些错误,可以将 -x 与 pytest-repeat 一起用,强制运行器在第一次测试失败时停止


 
  • py.test --count=1000 -x test.py

 

repeat-scope的使用

命令行参数
作用:能够覆盖默认的测试用例执行顺序,相似fixture的scope参数


 
  • pytest -s --count=2 --repeat-scope=class test_Class.py

 


 
  • pytest -s --count=2 --repeat-scope=moudle test_Class.py

 

产生报告

前面在安装pytest,我们也安装了 pytest-html 插件,这个插件就是用来产生测试报告的。

要产生报告,在命令行加上 参数 --html=report.html --self-contained-html ,如下


 
  • pytest cases --html=report.html --self-contained-html

 

这样就会产生名为 report.html的测试报告文件,可以在浏览器中打开

关键词:Pytest      点击(0)
声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多Pytest相关>>>