时间:2021-05-23
pytest介绍
pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点:
1、简单灵活,容易上手,文档丰富;
2、支持参数化,可以细粒度地控制要测试的测试用例;
3、能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests);
4、pytest具有很多第三方插件,并且可以自定义扩展
5、测试用例的skip和xfail处理;
6、可以很好的和CI工具结合,例如jenkins
编写规则:
断言使用基本的assert即可
快速示例
test_pyexample.py
import pytestclass TestClass: def test_one(self): x = "this" assert 'h' in x def test_two(self): x = "hello" assert hasattr(x, 'check') def test_three(self): a = "hello" b = "hello world" assert a in b通过命令行运行:
1、cd 到代码所在的目录,执行命令:py.test test_pyexample.py
2、安装pytest-sugar插件可以看到进度条
Pycharm配置运行:
1.file->Setting->Tools->Python Integrated Tools->项目名称->Default test runner->选择py.test
import pytestclass TestClass: def test_one(self): x = "this" assert 'h' in x def test_two(self): x = "hello" assert hasattr(x, 'check') def test_three(self): a = "hello" b = "hello world" assert a in bif __name__ == "__main__": pytest.main('-q test_class.py')Console常用参数介绍:
pytest参数化
使用装饰器:@pytest.mark.parametrize()
单个参数:
import pytestimport random@pytest.mark.parametrize('x',[(1),(2),(6)])def test_add(x): print(x) assert x==random.randrange(1,7)多个参数:
import pytest@pytest.mark.parametrize('x,y',[ (1+2,3), (2-0,1), (6*2,12), (10*2,3), ("test","test"),])def test_add(x,y): #必须与上面保持一致,只能用x,y不能用其他字母 assert x==y控制测试运行顺序
安装pytest-ordering
pip install pytest-ordering
借助于装饰器@pytest.mark.run(order=1)控制测试运行的顺序
import pytestimport timevalue=0@pytest.mark.run(order=2) #后执行order=2def test_add2(): print("I am 2") time.sleep(2) assert value==10@pytest.mark.run(order=1) #先执行order=1def test_add(): print("I am add") global value value=10 assert value==10运行后生成测试报告(htmlReport)
安装pytest-html:
pip install -U pytest-html
如何使用:
py.test test_pyexample.py --html=report.html
更详细的测试报告
安装 pytest-cov:
pip install pytest-cov
如何使用
py.test --cov-report=html --cov=./ test_code_target_dirConsole参数介绍--cov=[path], measure coverage for filesystem path (multi-allowed), 指定被测试对象,用于计算测试覆盖率--cov-report=type, type of report to generate: term, term-missing, annotate, html, xml (multi-allowed), 测试报告的类型--cov-config=path, config file for coverage, default: .coveragerc, coverage配置文件--no-cov-on-fail, do not report coverage if test run fails, default: False,如果测试失败,不生成测试报告--cov-fail-under=MIN, Fail if the total coverage is less than MIN. 如果测试覆盖率低于MIN,则认为失败多进程运行
安装pytest-xdist:
pip install -U pytest-xdist
如何使用:
py.test test_pyexample.py -n NUM
其中NUM填写并发的进程数。
重新运行失败的用例
安装pytest- rerunfailures:
import randomdef add(x,y): return x+ydef test_add(): random_value=random.randint(2,7) print('random_value:'+str(random_value)) assert add(1,3)==random_value如何使用:
命令:pytest --reruns 重试次数
比如:pytest --reruns 3 表示:运行失败的用例可以重新运行3次
命令:pytest --reruns 重试次数 --reruns-delay 次数之间的延时设置(单位:秒)
比如:pytest --reruns 3 --reruns-delay 5 表示:(译:瑞软四、地类)运行失败的用例可以重新运行3次,第一次和第二次的间隔时间为5秒钟
另外也可以通过装饰器的方式配置:
@pytest.mark.flaky(reruns=3, reruns_delay=5)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
pytestfixtures装饰器pytest中可以使用@pytest.fixture装饰器来装饰一个方法,被装饰方法的方法名可以作为一个参数传入到测试方法中。
fixture函数存在意义 与python自带的unitest测试框架中的setup、teardown类似,pytest提供了fixture函数用以在测试执行
本文实例讲述了yii,CI,yaf框架+smarty模板使用方法。分享给大家供大家参考,具体如下:最近折腾了框架的性能测试,其中需要测试各个模板跟smarty配
之前,我曾转过一个单元测试框架系列的文章,里面介绍了unittest、nose/nose2与pytest这三个最受人欢迎的Python测试框架。本文想针对测试中
 python通用测试框架大多数人用的是unittest+HTMLTestRunner,这段时间看到了pytest文档,发现这个框架和丰富的plug