Pytest是当下首先的Python项目单元测试工具。测试时,使用方法有两种:
本文将小结使用第二种方式中main函数各种参数的使用问题。
#一些测试单元……
if name == ‘main’:
pytest.main()
不带任何参数的main()默认运行的是当前目录及子目录的所有文件夹的测试用例。
Main()函数加参数时指定运行规则时,参数需要放在列表中。可以指定参数和路径,常用的参数有:
(1)‘-s’:关闭捕捉,输出打印信息。
(2)‘-v’:用于增加测试用例的冗长。
(3)‘-k’ :运行包含某个字符串的测试用例。如:pytest -k add XX.py 表示运行XX.py中包含add的测试用例。
(4)‘q’:减少测试的运行冗长。
(5)‘-x’:出现一条测试用例失败就退出测试。在调试阶段非常有用,当测试用例失败时,应该先调试通过,而不是继续执行测试用例。
import pytest
@pytest.mark.webtest
def test_send_http():
pass # perform some webtest test for your app
def test_something_quick():
pass
def test_another():
pass
class TestClass:
def test_method(self):
pass
if name == "main":
pytest.main([‘-q‘])
指定某个测试类或测试方法,用“::”隔开。如:
命令行格式:
pytest 文件名.py::测试方法
代码行格式:
pytest.main([模块.py::类或方法])
指定某个测试类下的测试方法,用“::”隔开。如:
命令格式:
pytest 文件名.py::测试类::测试方法
代码行格式:
pytest.main([模块.py::类::方法])
pytest.main(["testCase/campaign/test_campaign_list.py::TestListCampaign::test_list_campaign_success"])
指定运行某个目录下的某个用例,其中路径为当前执行文件的相对路径
pytest.main(["testCase/campaign/test_campaign_list.py"])
运行某个目录下的全部用例,写到文件夹名字即可,不需要写到py文件
pytest.main(["testCase/campaign/"])
使用-m对用例进行标记,用例需注释@pytest.mark.xxx,将xxx作为参数传入
使用-m "mark1 and mark2"可以同时选中带有这两个标记的所有测试用例。
使用-m "mark1 and not mark2"选中带哟与mark1的测试用例,而过滤掉带有mark2的测试用例
使用-m "mark1 or mark2"则选中带有mark1或者mark2的所有测试用例
"""
pytest.main(["-v","-x"])#-x 遇到错误即停止
pytest.main(["-v","--maxfail=2","--tb=no"])#--maxfail=n 设定最多失败 n 次即停止
pytest.main(["-s"])#允许终端运行时输出某些结果,例如print
pytest.main(["--lf"])#定位失败的用例
pytest.main(["--ff"])#定位失败的用例首先执行,但是正常的用例也会执行
pytest.main(["-q"])#简化输出信息
pytest.main(["--tb=short"])
个人感觉,Pytest最经典用法还是命令行方式,因此,充分熟悉其常用参数是熟练进行单元测试的基础。因此,本人建议本文介绍的代码行内方式宜主要作为测试量较少且简单情况下测试使用。
原文:https://blog.51cto.com/zhuxianzhong/2539365