🍅点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快
Pytest的入门操作使用
Pytest特点
非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考
能够支持简单的单元测试和复杂的功能测试
支持参数化
执行测试过程中可以将某些测试跳过(skip),或者对某些预期失败的case标记成失败
支持重复执行(rerun)失败的 case
支持运行由 nose, unittest 编写的测试 case
可生成
html报告方便的和持续集成工具
jenkins集成可支持执行部分用例
具有很多第三方插件,并且可以自定义扩展
安装
直接执行 如下命令即可安装pytest
pip install pytest我们还需要产生测试报表,所以要安装一个第三方插件pytest-html,执行如下命令安装
pip install pytest-htmldef 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进入当前文件目录,直接执行
pytestPS D:\Lemon\py45\webatuotest\pytest_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.0 rootdir: D:\Lemon\py45\webatuotest\pytest_learn plugins: allure-pytest-2.9.43, anyio-3.3.2, html-3.1.1, metadata-1.11.0 collected 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 == 2 E 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:\Lemon\py45\webatuotest\pytest_learn>注意:
如果只执行
pytest,会查找当前目录及其子目录下以test_*.py 或 *_test.py文件,找到文件后,在文件中找到以 test 开头函数并执行如果只想执行某个文件,可以
pytest start.py加上-q,就是显示简单的结果:
pytest -q start.py如果我们希望 显示测试代码中print的内容,因为这些打印语句在调试代码时很有用,可以加上命令行参数 -s
如下
pytest -s如果我们希望得到更详细的执行信息,包括每个测试类、测试函数的名字,可以加上参数 -v,这个参数可以和 -s 合并为 -sv
如下
pytest -sv为了防止
pytest到其他目录中找测试用例项,执行测试时,我们可以在命令行加上目标目录 cases ,就是这样
pytest casespytest运行方式 测试类主函数模式 # test_abc.py import 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写用例时候,一定要按照下面的规则去写,否则不符合规则的测试用例是不会执行的
文件名以
test_*.py文件和*_test.py以 test_ 开头的函数
以 Test 开头的类,不能包含
__init__ 方法所有的包 package 必须要有
__init__.py文件
Pytest之并发执行
在Pytest测试框架中提供了pytest-xdist可以并发执行测试用例,来提升测试用例的执行速度。通常的情况下,测试用例的执行都是依据一定的规则来按顺序进行执行,这样的结果是每次执行的时候有的资源就只能被一个测试用例占用,而达不到测试用例执行的时候资源的共享,插件pytest-xdist插件可以很好的解决这个问题,一方面资源达到共享,基于第一点的考虑,也就达到了第二点的提升了测试执行的效率。
安装pytest-xdist插件 pip install pytest-xdist
使用 pytest -n auto 默认自动检查系统cpu个数,然后进行并发
也可以指定并发数 pytest -n 2 即并发数2执行
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.pyrepeat-scope的使用
命令行参数
作用:能够覆盖默认的测试用例执行顺序,相似fixture的scope参数
function:默认,范围针对每一个用例重复执行,再执行下一个用例
class:以class为用例集合单位,重复执行class里面的用例,再执行下一个
pytest -s --count=2 --repeat-scope=class test_Class.pymodule:以模块为单位,重复执行模块里面的用例,再执行下一个
pytest -s --count=2 --repeat-scope=moudle test_Class.pysession:重复整个测试会话,即全部测试用例的执行一次,而后再执行第二次
产生报告
前面在安装pytest,我们也安装了pytest-html插件,这个插件就是用来产生测试报告的。
要产生报告,在命令行加上 参数--html=report.html --self-contained-html,如下
pytest cases --html=report.html --self-contained-html这样就会产生名为report.html的测试报告文件,可以在浏览器中打开
写在最后
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。