特点:
1,代码风格比较自由,可单独定义方法,也可将方法封装到class里
2,参数化执行,可灵活配置测试计划
3,可生成xml报告,方便结果分析及jenkins集成
安装可以直接pip install pytest
文件名定义:test_*.py or *_test.py
类定义:Test开头
方法定义:test_开头(官网要求,但是自己试着不带_也可以)
代码示例:
常用参数:
pytest -q 静默模式,只输出异常case
pytest -v 详细,显示明细及case结果标志灯
pytest casefile.py 指定case文件执行
pytest casedir 指定路径运行
pytest casedir/casefile::caseclass::casefunc 运行具体的case方法、类等
pytest --pyargs pkgname 指定包执行,根据系统文件路径定位case,后期可以用pip安装包的方法部署执行case
pytest -k "key_words_1 and not key_words_1" 执行符合key_words_1命名规则的文件、类及方法,忽略key_words_2命名规则的文件、类及方法
pytest -m "mark_name" 需要在指定case方法上添加@pytest.mark.mark_name来指定方法属于哪个mark
pytest --junitxml=file.xml 生成xml报告,方便对执行结果进一步分析,后期可以通过xmltodict库转成json格式分析入库及自定义报告
pytest --html=./report.html 生成html格式报告,需要提前安装pytest-html模块,个人测试时发现生成的html报告没有teardown里面的内容,控制台却是有teardown里的内容输出的,这算是个小bug?
1,代码风格比较自由,可单独定义方法,也可将方法封装到class里
2,参数化执行,可灵活配置测试计划
3,可生成xml报告,方便结果分析及jenkins集成
安装可以直接pip install pytest
文件名定义:test_*.py or *_test.py
类定义:Test开头
方法定义:test_开头(官网要求,但是自己试着不带_也可以)
代码示例:
import pytest
# 基础方法调用也可以放到专用目录中
class BaseFunc:
@staticmethod
def base_func(x):
return x+1
@pytest.mark.mymark1
def test_myfunc1():
print('im in test_myfunc1')
assert BaseFunc.base_func(1) == 2
def test_myfunc2():
print('im in test_myfunc2')
assert BaseFunc.base_func(2) == 2
class TestClass_cls1:
# 测试类不能有__init__构造函数
# 同样支持setup和teardown,每个case均单独执行一次
def setup(self):
print('has been setup!!! cls1')
def teardown(self):
print('has been teardown!!! cls1')
# 静态方法也可以执行,但是不能再用mark注解
@staticmethod
def test_func1():
print('im in func1 cls1')
assert BaseFunc.base_func(1) == 2
@pytest.mark.mymark2
def test_func2(self):
print('im in func2 cls1')
assert BaseFunc.base_func(2) < 2
def test_func3(self):
print('im in func3 cls1')
assert BaseFunc.base_func(0) > 2
if __name__ == "__main__":
pytest.main(['-v', 'study2_test.py', '-m', 'mymark1'])
# 以下方式会执行study2_test.py所在目录下包含但不限于study2_test.py的所有case文件
# pytest.main()
常用参数:
pytest -q 静默模式,只输出异常case
pytest -v 详细,显示明细及case结果标志灯
pytest casefile.py 指定case文件执行
pytest casedir 指定路径运行
pytest casedir/casefile::caseclass::casefunc 运行具体的case方法、类等
pytest --pyargs pkgname 指定包执行,根据系统文件路径定位case,后期可以用pip安装包的方法部署执行case
pytest -k "key_words_1 and not key_words_1" 执行符合key_words_1命名规则的文件、类及方法,忽略key_words_2命名规则的文件、类及方法
pytest -m "mark_name" 需要在指定case方法上添加@pytest.mark.mark_name来指定方法属于哪个mark
pytest --junitxml=file.xml 生成xml报告,方便对执行结果进一步分析,后期可以通过xmltodict库转成json格式分析入库及自定义报告
pytest --html=./report.html 生成html格式报告,需要提前安装pytest-html模块,个人测试时发现生成的html报告没有teardown里面的内容,控制台却是有teardown里的内容输出的,这算是个小bug?