配资网站建设是什么意思,百度收录提交申请网站,wordpress 添加自定义栏目面板,网站设计 价格Pytest拥有丰富的插件架构#xff0c;超过800个以上的外部插件和活跃的社区#xff0c;在PyPI项目中以“ pytest- *”为标识。
本篇将列举github标星超过两百的一些插件进行实战演示。
插件库地址#xff1a;http://plugincompat.herokuapp.com/
1、pytest-html#xff…
Pytest拥有丰富的插件架构超过800个以上的外部插件和活跃的社区在PyPI项目中以“ pytest- *”为标识。
本篇将列举github标星超过两百的一些插件进行实战演示。
插件库地址http://plugincompat.herokuapp.com/
1、pytest-html用于生成HTML报告 一次完整的测试测试报告是必不可少的但是pytest自身的测试结果过于简单而pytest-html正好可以给你提供一份清晰报告。
安装
pip install -U pytest-html 用例
# test_sample.py import pytest # import time
# 被测功能 def add(x, y): # time.sleep(1) return x y
# 测试类 class TestLearning: data [ [3, 4, 7], [-3, 4, 1], [3, -4, -1], [-3, -4, 7], ] pytest.mark.parametrize(data, data) def test_add(self, data): assert add(data[0], data[1]) data[2]
运行
E:\workspace-py\Pytestpytest test_sample.py --htmlreport/index.html test session starts platform win32 -- Python 3.7.3, pytest-6.0.2, py-1.9.0, pluggy-0.13.0 rootdir: E:\workspace-py\Pytest plugins: allure-pytest-2.8.18, cov-2.10.1, html-3.0.0, rerunfailures-9.1.1, xdist-2.1.0 collected 4 items
test_sample.py ...F [100%] FAILURES _____________________________________________________________________ TestLearning.test_add[data3] ______________________________________________________________________
self test_sample.TestLearning object at 0x00000000036B6AC8, data [-3, -4, 7] pytest.mark.parametrize(data, data) def test_add(self, data): assert add(data[0], data[1]) data[2] E assert -7 7 E where -7 add(-3, -4)
test_sample.py:20: AssertionError ------------------------------------------------- generated html file: file://E:\workspace-py\Pytest\report\index.html -------------------------------------------------- short test summary info FAILED test_sample.py::TestLearning::test_add[data3] - assert -7 7 1 failed, 3 passed in 0.14s 运行完会生产一个html文件 和 css样式文件夹assets用浏览器打开html即可查看清晰的测试结果。 后面我将会更新更加清晰美观的测试报告插件 allure-python
2、pytest-cov用于生成覆盖率报告 在做单元测试时代码覆盖率常常被拿来作为衡量测试好坏的指标甚至用代码覆盖率来考核测试任务完成情况。
安装
pip install -U pytest-cov 运行
E:\workspace-py\Pytestpytest --cov. test session starts platform win32 -- Python 3.7.3, pytest-6.0.2, py-1.9.0, pluggy-0.13.0 rootdir: E:\workspace-py\Pytest plugins: allure-pytest-2.8.18, cov-2.10.1, html-3.0.0, rerunfailures-9.1.1, xdist-2.1.0 collected 4 items
test_sample.py .... [100%]
----------- coverage: platform win32, python 3.7.3-final-0 ----------- Name Stmts Miss Cover ------------------------------------ conftest.py 5 3 40% test_sample.py 7 0 100% ------------------------------------ TOTAL 12 3 75% 4 passed in 0.06s 3、pytest-xdist实现多线程、多平台执行 通过将测试发送到多个CPU来加速运行可以使用-n NUMCPUS指定具体CPU数量或者使用-n auto自动识别CPU数量并全部使用。
安装
pip install -U pytest-xdist 用例
# test_sample.py import pytest import time
# 被测功能 def add(x, y): time.sleep(3) return x y
# 测试类 class TestAdd: def test_first(self): assert add(3, 4) 7 def test_second(self): assert add(-3, 4) 1 def test_three(self): assert add(3, -4) -1 def test_four(self): assert add(-3, -4) 7 E:\workspace-py\Pytestpytest test_sample.py test session starts platform win32 -- Python 3.7.3, pytest-6.0.2, py-1.9.0, pluggy-0.13.0 rootdir: E:\workspace-py\Pytest plugins: allure-pytest-2.8.18, cov-2.10.1, html-3.0.0, rerunfailures-9.1.1, xdist-2.1.0 collected 4 items
test_sample.py .... [100%] 4 passed in 12.05s
E:\workspace-py\Pytestpytest test_sample.py -n auto test session starts platform win32 -- Python 3.7.3, pytest-6.0.2, py-1.9.0, pluggy-0.13.0 rootdir: E:\workspace-py\Pytest plugins: allure-pytest-2.8.18, assume-2.3.3, cov-2.10.1, forked-1.3.0, html-3.0.0, rerunfailures-9.1.1, xdist-2.1.0 gw0 [4] / gw1 [4] / gw2 [4] / gw3 [4] .... [100%] 4 passed in 5.35s
E:\workspace-py\Pytestpytest test_sample.py -n 2 test session starts platform win32 -- Python 3.7.3, pytest-6.0.2, py-1.9.0, pluggy-0.13.0 rootdir: E:\workspace-py\Pytest plugins: allure-pytest-2.8.18, assume-2.3.3, cov-2.10.1, forked-1.3.0, html-3.0.0, rerunfailures-9.1.1, xdist-2.1.0 gw0 [4] / gw1 [4] .... [100%] 4 passed in 7.65s 上述分别进行了未开多并发、开启4个cpu、开启2个cpu从运行耗时结果来看很明显多并发可以大大缩减你的测试用例运行耗时。
4、pytest-rerunfailures实现重新运行失败用例 我们在测试时可能会出现一些间接性故障比如接口测试遇到网络波动web测试遇到个别插件刷新不及时等这时重新运行则可以帮忙我们消除这些故障。 安装
pip install -U pytest-rerunfailures 运行
E:\workspace-py\Pytestpytest test_sample.py --reruns 3 test session starts platform win32 -- Python 3.7.3, pytest-6.0.2, py-1.9.0, pluggy-0.13.0 rootdir: E:\workspace-py\Pytest plugins: allure-pytest-2.8.18, cov-2.10.1, html-3.0.0, rerunfailures-9.1.1, xdist-2.1.0 collected 4 items
test_sample.py ...R [100%]R [100%]R [100%]F [100%] FAILURES ___________________________________________________________________________ TestAdd.test_four ___________________________________________________________________________
self test_sample.TestAdd object at 0x00000000045FBF98 def test_four(self): assert add(-3, -4) 7 E assert -7 7 E where -7 add(-3, -4)
test_sample.py:22: AssertionError short test summary info FAILED test_sample.py::TestAdd::test_four - assert -7 7 1 failed, 3 passed, 3 rerun in 0.20s 如果你想设定重试间隔可以使用 --rerun-delay 参数指定延迟时长单位秒
如果你想重新运行指定错误可以使用 --only-rerun 参数指定正则表达式匹配并且可以使用多次来匹配多个。
pytest --reruns 5 --reruns-delay 1 --only-rerun AssertionError --only-rerun ValueError 如果你只想标记单个测试失败时自动重新运行可以添加 pytest.mark.flaky() 并指定重试次数以及延迟间隔。
pytest.mark.flaky(reruns5, reruns_delay2) def test_example(): import random assert random.choice([True, False]) 5、pytest-randomly实现随机排序测试 测试中的随机性非常越大越容易发现测试本身中隐藏的缺陷并为你的系统提供更多的覆盖范围。
安装
pip install -U pytest-randomly 运行
E:\workspace-py\Pytestpytest test_sample.py test session starts platform win32 -- Python 3.7.3, pytest-6.0.2, py-1.9.0, pluggy-0.13.0 Using --randomly-seed3687888105 rootdir: E:\workspace-py\Pytest plugins: allure-pytest-2.8.18, cov-2.10.1, html-3.0.0, randomly-3.5.0, rerunfailures-9.1.1, xdist-2.1.0 collected 4 items
test_sample.py F... [100%] FAILURES ___________________________________________________________________________ TestAdd.test_four ___________________________________________________________________________
self test_sample.TestAdd object at 0x000000000567AD68 def test_four(self): assert add(-3, -4) 7 E assert -7 7 E where -7 add(-3, -4)
test_sample.py:22: AssertionError short test summary info FAILED test_sample.py::TestAdd::test_four - assert -7 7 1 failed, 3 passed in 0.13s
E:\workspace-py\Pytestpytest test_sample.py test session starts platform win32 -- Python 3.7.3, pytest-6.0.2, py-1.9.0, pluggy-0.13.0 Using --randomly-seed3064422675 rootdir: E:\workspace-py\Pytest plugins: allure-pytest-2.8.18, assume-2.3.3, cov-2.10.1, forked-1.3.0, html-3.0.0, randomly-3.5.0, rerunfailures-9.1.1, xdist-2.1.0 collected 4 items
test_sample.py ...F [100%] FAILURES ___________________________________________________________________________ TestAdd.test_four ___________________________________________________________________________
self test_sample.TestAdd object at 0x00000000145EA940 def test_four(self): assert add(-3, -4) 7 E assert -7 7 E where -7 add(-3, -4)
test_sample.py:22: AssertionError short test summary info FAILED test_sample.py::TestAdd::test_four - assert -7 7 1 failed, 3 passed in 0.12s 这功能默认情况下处于启用状态但可以通过标志禁用假如你并不需要这个模块建议就不要安装。
pytest -p no:randomly 如果你想指定随机顺序可以通过 --randomly-send 参数来指定也可以使用 last 值来指定沿用上次的运行顺序。
pytest --randomly-seed4321 pytest --randomly-seedlast 6、其他活跃的插件 还有一些其他功能性比较活跃的、一些专门为个别框架所定制的、以及为了兼容其他测试框架这里暂不做演示我就简单的做个列举 pytest-django用于测试Django应用程序Python Web框架。 pytest-flask用于测试Flask应用程序Python Web框架。 pytest-splinter兼容Splinter Web自动化测试工具。 pytest-selenium兼容Selenium Web自动化测试工具。 pytest-testinfra测试由SaltAnsiblePuppet Chef等管理工具配置的服务器的实际状态。 pytest-mock提供一个mock固件创建虚拟的对象来实现测试中个别依赖点。 pytest-factoryboy结合factoryboy工具用于生成各式各样的数据。 pytest-qt提供为PyQt5和PySide2应用程序编写测试。 pytest-asyncio用于使用pytest测试异步代码。 pytest-bdd实现了Gherkin语言的子集以实现自动化项目需求测试并促进行为驱动的开发。 pytest-watch为pytest提供一套快捷CLI工具。 pytest-testmon可以自动选择并重新执行仅受最近更改影响的测试。 pytest-assume用于每个测试允许多次失败。 pytest-ordering用于测试用例的排序功能。 pytest-sugar可立即显示失败和错误并显示进度条。 pytest-dev/pytest-repeat可以重复(可指定次数)执行单个或多个测试。