Pytest测试框架基本使用方法详解
pytest介绍
pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点:
1、简单灵活,容易上手,文档丰富;
2、支持参数化,可以细粒度地控制要测试的测试用例;
3、能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests);
4、pytest具有很多第三方插件,并且可以自定义扩展
- 如pytest-selenium(集成selenium)、
- pytest-html(完美html测试报告生成)、
- pytest-rerunfailures(失败case重复执行)、
- pytest-xdist(多CPU分发)、
- pytest--ordering(控制测试运行的顺序)
5、测试用例的skip和xfail处理;
6、可以很好的和CI工具结合,例如jenkins
编写规则:
- 测试文件以test_开头(以_test结尾也可以)
- 测试类以Test开头,并且不能带有init方法
- 测试函数以test_开头
断言使用基本的assert即可
快速示例
test_pyexample.py
importpytest classTestClass: deftest_one(self): x="this" assert'h'inx deftest_two(self): x="hello" asserthasattr(x,'check') deftest_three(self): a="hello" b="helloworld" assertainb
通过命令行运行:
1、cd到代码所在的目录,执行命令:py.testtest_pyexample.py
2、安装pytest-sugar插件可以看到进度条
Pycharm配置运行:
1.file->Setting->Tools->PythonIntegratedTools->项目名称->Defaulttestrunner->选择py.test
importpytest classTestClass: deftest_one(self): x="this" assert'h'inx deftest_two(self): x="hello" asserthasattr(x,'check') deftest_three(self): a="hello" b="helloworld" assertainb if__name__=="__main__": pytest.main('-qtest_class.py')
Console常用参数介绍:
- -v用于显示每个测试函数的执行结果
- -q只显示整体测试结果
- -s用于显示测试函数中print()函数输出
- -x,--exitfirst,exitinstantlyonfirsterrororfailedtest
- -m只运行带有装饰器配置的测试用例
- -h帮助
py.test#runalltestsbelowcurrentdir py.testtest_mod.py#runtestsinmodulefiletest_mod.py py.testsomepath#runalltestsbelowsomepathlike./tests/ py.test-kstringexpr#onlyruntestswithnamesthatmatchthe #the"stringexpression",e.g."MyClassandnotmethod" #willselectTestMyClass.test_something #butnotTestMyClass.test_method_simple py.testtest_mod.py::test_func#onlyrunteststhatmatchthe"nodeID", #e.g"test_mod.py::test_func"willbeselected #onlyruntest_funcintest_mod.py
pytest参数化
使用装饰器:@pytest.mark.parametrize()
单个参数:
importpytest importrandom @pytest.mark.parametrize('x',[(1),(2),(6)]) deftest_add(x): print(x) assertx==random.randrange(1,7)
多个参数:
importpytest @pytest.mark.parametrize('x,y',[ (1+2,3), (2-0,1), (6*2,12), (10*2,3), ("test","test"), ]) deftest_add(x,y):#必须与上面保持一致,只能用x,y不能用其他字母 assertx==y
控制测试运行顺序
安装pytest-ordering
pipinstallpytest-ordering
借助于装饰器@pytest.mark.run(order=1)控制测试运行的顺序
importpytest importtime value=0 @pytest.mark.run(order=2)#后执行order=2 deftest_add2(): print("Iam2") time.sleep(2) assertvalue==10 @pytest.mark.run(order=1)#先执行order=1 deftest_add(): print("Iamadd") globalvalue value=10 assertvalue==10
运行后生成测试报告(htmlReport)
安装pytest-html:
pipinstall-Upytest-html
如何使用:
py.testtest_pyexample.py--html=report.html
更详细的测试报告
安装pytest-cov:
pipinstallpytest-cov
如何使用
py.test--cov-report=html--cov=./test_code_target_dir Console参数介绍 --cov=[path],measurecoverageforfilesystempath(multi-allowed),指定被测试对象,用于计算测试覆盖率 --cov-report=type,typeofreporttogenerate:term,term-missing,annotate,html,xml(multi-allowed),测试报告的类型 --cov-config=path,configfileforcoverage,default:.coveragerc,coverage配置文件 --no-cov-on-fail,donotreportcoverageiftestrunfails,default:False,如果测试失败,不生成测试报告 --cov-fail-under=MIN,FailifthetotalcoverageislessthanMIN.如果测试覆盖率低于MIN,则认为失败
多进程运行
安装pytest-xdist:
pipinstall-Upytest-xdist
如何使用:
py.testtest_pyexample.py-nNUM
其中NUM填写并发的进程数。
重新运行失败的用例
安装pytest-rerunfailures:
importrandom defadd(x,y): returnx+y deftest_add(): random_value=random.randint(2,7) print('random_value:'+str(random_value)) assertadd(1,3)==random_value
如何使用:
命令:pytest--reruns重试次数
比如:pytest--reruns3表示:运行失败的用例可以重新运行3次
命令:pytest--reruns重试次数--reruns-delay次数之间的延时设置(单位:秒)
比如:pytest--reruns3--reruns-delay5表示:(译:瑞软四、地类)运行失败的用例可以重新运行3次,第一次和第二次的间隔时间为5秒钟
另外也可以通过装饰器的方式配置:
@pytest.mark.flaky(reruns=3,reruns_delay=5)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。