Pytest测试框架(一):pytest安装及用例执行
2021-01-01 14:57
190 查看
PyTest是基于Python的开源测试框架,语法简单易用,有大量的插件,功能非常多。自动检测测试用例,支持参数化,跳过特定用例,失败重试等功能。
安装
pip install -U pytest # 安装 pytest --version # 查看版本 pytest -h # 查看帮助信息
用例识别
- pytest识别文件名为test_.py或者_test.py的测试文件
- 测试文件中可以在Test*类中写测试用例(测试用例以test_*开头,并且测试类不能有__init__方法)
- 不在Test类中的test_用例也可以被识别到。
识别包含“add”的用例:
pytest -k "add" --collect-only
(base) D:\ProgramWorkspace\TestingDemo>pytest -k "add" --collect-only ============================================== test session starts ============================================== platform win32 -- Python 3.7.6, pytest-5.3.5, py-1.8.1, pluggy-0.13.1 rootdir: D:\ProgramWorkspace\TestingDemo plugins: hypothesis-5.5.4, arraydiff-0.3, astropy-header-0.1.2, doctestplus-0.5.0, openfiles-0.4.0, remotedata-0.3 .2 collected 20 items / 11 deselected / 9 selected <Package D:\ProgramWorkspace\TestingDemo\testing> <Module test_calc.py> <UnitTestCase TestCalc> <TestCaseFunction test_add_1> <TestCaseFunction test_add_2> <Module test_calc2.py> <Class TestCalc> <Function test_add[1-2-3]> <Function test_add[-1--2--3]> <Function test_add[0-1-1]> <Function test_add[0--1--1]> <Function test_add[0.1-0.2-0.3]> <Function test_add[999999-1000000-1999999]> <Function test_add_1>
打印文件下所有用例:
pytest --collect-only
(base) D:\ProgramWorkspace\TestingDemo>pytest --collect-only ============================================== test session starts ============================================== platform win32 -- Python 3.7.6, pytest-5.3.5, py-1.8.1, pluggy-0.13.1 rootdir: D:\ProgramWorkspace\TestingDemo plugins: hypothesis-5.5.4, arraydiff-0.3, astropy-header-0.1.2, doctestplus-0.5.0, openfiles-0.4.0, remotedata-0.3 .2 collected 20 items <Module test_pytest.py> <Function test_one> <Function test_two> <Function test_three> <Module test_pytest2.py> <Class Test_Demo> <Function test_one> <Function test_two> <Function test_three> <Package D:\ProgramWorkspace\TestingDemo\testing> <Module test_calc.py> <UnitTestCase TestCalc> <TestCaseFunction test_add_1> <TestCaseFunction test_add_2> <Module test_calc2.py> <Class TestCalc> <Function test_add[1-2-3]> <Function test_add[-1--2--3]> <Function test_add[0-1-1]> <Function test_add[0--1--1]> <Function test_add[0.1-0.2-0.3]> <Function test_add[999999-1000000-1999999]> <Function test_div[1-2-0.5]> <Function test_div[-1--2-0.5]> <Function test_div[0-1-0]> <Function test_div[1-0-0]> <Function test_div[0.1-0.2-0.5]> <Function test_add_1>
Pytest执行
一个简单的测试用例test_pytest.py:
import pytest def calc(a,b): return a + b class TestDemo ad8 (): def test_answer1(self): assert calc(1, 1) == 2 def test_answer2(self): assert calc(2, 1) == 3 @pytest.mark.answer3 def test_answer3(self): assert calc(6, 6) == 12 if __name__=='__main__': pytest.main()
用例执行
# 执行test_pytest.py所有用例(模块) pytest test_pytest.py # 执行test_pytest.py里的TestDemo类 pytest test_pytest.py::TestDemo # 执行test_pytest.py里的TestDemo类的test_answer2方法 pytest test_pytest.py::TestDemo::test_answer2
打印日志信息
# 打印详细运行日志信息 pytest -v test_pytest.py pytest -s test_pytest.py
跳过某个用例
# 跳过运行某个用例 pytest -v -k "类名 and not方法名" 文件名 pytest -v -k "TestDemo and not test_answer2" test_pytest.py
运行某个标记的用例
# 将运行有这个标记的测试用例:@pytest.mark.[标记名] pytest -m [标记名] 文件名 pytest -m answer3 test_pytest.py
报错停止
# 一旦运行到报错用例就停止运行 pytest -x 文件名 pytest -x test_pytest.py # 当报错达到num的时候就停止运行 pytest --maxfail=[num] 文件名 pytest --maxfail=[num] test_pytest.py
失败重新运行
安装 pytest-rerunfailures 插件:
pip install pytest-rerunfailures
测试失败后重新运行n次,在重新运行间延迟n秒再运行:
# 重新运行3次 pytest --reruns 3 - 103c v -s test_pytest.py # 重新运行5次,延迟1s pytest --reruns 5 --reruns-delay 1 -v test_pytest.py
多条断言
一个方法中有多条断言,通常第一条失败后下面就不执行了,pytest-assume插件可以解决断言失败后继续执行断言的问题。
安装
pip install pytest-assume
执行多条断言:
# 写法1 pytest.assume(x == y) pytest.assume(True) pytest.assume(False) # 写法2 with assume: assert calc(2, 1) == 4 with assume: assert calc(2, 1) == 3 with assume: assert calc(2, 2) == 3
修改测试用例test_pytest.py:
import pytest from pytest import assume def calc(a,b): return a + b class TestDemo(): def test_answer1(self): assert calc(1, 1) == 2 def test_answer2(self): with assume: assert calc(2, 1) == 4 with assume: assert calc(2, 1) == 3 with assume: assert calc(2, 2) == 3 @pytest.mark.answer3 def test_answer3(self): assert calc(6, 6) == 12 if __name__=='__main__': pytest.main()
测试结果:
pytest.main()
除了在终端执行外,也可以通过pytest.main()来执行,pytest.main() 自动查找当前目录下以test_开头的文件或者以_test结尾的py文件。
括号内可传入执行参数,通过[]进行分割,[]内的多个参数通过逗号分割,所有的参数和pytest命令行方式一样:
pytest.main(['-v', 'test_pytest.py']) # 执行test_pytest.py用例
或者直接在测试文件最后写如下代码,执行py文件。
if __name__=='__main__': pytest.main() # pytest.main(['-v', 'test_pytest.py'])
更多pytest执行方法可参考官方文档:https://docs.pytest.org/en/latest/contents.html#toc
文章标题:Pytest测试框架(一):pytest安装及用例执行
本文作者:hiyo
本文链接:https://hiyong.gitee.io/posts/install-pytest-and-run-test/
欢迎关注公众号:「测试开发小记」及时接收最新技术文章!
相关文章推荐
- Python之使用unittest框架和HTMLTestRunner.py文件实现多个测试用例执行与测试报告生成
- Python单元测试框架之pytest---如何执行测试用例
- 学习pytest的第十一天-----重复执行用例+分布式执行测试
- 用Python搭建自动化测试框架,我们需要组织用例以及测试执行,这里博主推荐Python的标准库——unittest。 unittest是xUnit系列框架中的一员,如果你了解xUnit的其他成员,那
- selenium---unittest框架测试用例函数执行顺序 优先级
- 【Pytest02】全网最全最新的Pytest框架快速进阶篇(pytest前置和后置以及忽略测试用例)
- 【Pytest05】全网最全最新的Pytest框架之用例分组执行
- selenium---unittest框架测试用例函数执行顺序 优先级
- pytest框架执行用例例子
- 学习pytest的第七天-----如何跳过执行测试用例
- selenium---unittest框架测试用例函数执行顺序 优先级
- Unit Test测试框架中的测试的执行顺序
- Python+unittest:执行测试用例~discover函数介绍
- unittest中更高效的执行测试用例一个类只需要打开一次浏览器
- Elastos获取测试用例列表工具--gtci.py(get testcase info)
- python测试开发之pytest框架(1)
- Ubuntu安装GoogleTest框架并测试C++代码
- python pytest测试框架介绍三
- parasoft Jtest 使用教程:生成、执行和扩展Junit测试用例
- 学习pytest的第一天-----安装+用例设计规则+pytest命令