Pytest用法之main函数

简介

Pytest是当下首先的Python项目单元测试工具。测试时,使用方法有两种:web

  • 命令行方式(传递给Pytest各类参数)
  • 在代码中直接执行pytest并调用main函数(传递进各类参数)

本文将小结使用第二种方式中main函数各类参数的使用问题。app

无参形式

#一些测试单元……
if name == ‘main’:
pytest.main()
不带任何参数的main()默认运行的是当前目录及子目录的全部文件夹的测试用例。ide

参数

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():
passui

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(["-l"])#打印失败用例的变量值

pytest.main(["--tb=short"])

小结

我的感受,Pytest最经典用法仍是命令行方式,所以,充分熟悉其经常使用参数是熟练进行单元测试的基础。所以,本人建议本文介绍的代码行内方式宜主要做为测试量较少且简单状况下测试使用。