pytest官方文档 6.2 中文翻译版(第二章):使用和调用

使用和调用

2.1 通过python -m pytest调用pytest

你可以在命令行中通过python解释起调用测试:

python -m pytest [...]

这种方法与在命令行中使用 pytest […] 几乎是等效的,而使用python调用比直接使用pytest多做的事情是程序将把当前目录添加至 sys.path.

2.2 可能的退出代码

运行pytest有六种可能的退出代码:

  • 退出代码 0:所有测试都被收集且成功通过
  • 退出代码 1:所有测试都被收集但只有部分测试通过
  • 退出代码 2:测试执行被用户中断
  • 退出代码 3:执行测试过程中发生内部错误
  • 退出代码 4:pytest命令行使用错误
  • 退出代码 5:没有测试被收集

这些退出代码是在 pytest.ExitCode 中被实现的。它们是公共API,可以在代码中被import和直接使用:

from pytest import ExitCode

提示:如果你想在某些场景下自定义退出代码,特别是“没有测试被收集”这种场景,考虑使用 pytest-custom_exit_code 这个扩展。

2.3 获取关于版本,选项名称,环境变量的帮助

pytest --version # 显示pytest是从哪里导入的
pytest --fixtures # 显示可用的内建函数参数
pytest -h | --help # 在命令行上显示帮助和配置文件选项

译者注:pytest --version 经过实际测试,应该是获取当前安装的pytest的版本,这里不是特别清楚是不是官方手册出现了错误
可以在 参考(reference)中查阅到完整的命令行标识。

2.4 失败一次或N次后立即停止测试

在失败一次或N次后立即停止测试:

pytest -x # 首次失败立即停止
pytest --maxfail=2 # 两次失败后停止测试

2.5 指定测试/选择测试

Pytest支持在命令行中以多种方式运行和选择测试用例。
Pytest supports several ways to run and select tests from the command-line.

  • 运行一个模块中的所有测试

    pytest test_mod.py
    
  • 运行一个目录下的所有测试

    pytest testing/
    
  • 通过关键字表达式运行测试

    pytest -k "MyClass and not method"
    

    使用上面的方法会运行满足给定的 字符串表达式(忽略大小写)的测试用例,字符表达式可以使用文件名,类名和方法名作为变量,还可以使用python的运算符。例如:上面例子中,TestMyClass.test_something 会运行, TestMyClass.test_method_simple不会运行。

  • Run tests by node ids
    每个收集到的测试都被分配一个唯一的nodeid,该id由模块文件名后面机上说明符(如类名、函数名和参数化的参数)组成,被双冒号分割。

    运行一个模块中的特定测试:

    pytest test_mod.py::test_func
    

    指定具体测试的另一个例子:

    pytest test_mod.py::TestClass::test_method
    

    根据标签表达式(marks)运行:

    pytest -m slow # 会运行所有被 @pytest.mark.slow 修饰符修饰的测试,可以在 marks 这一节学到更多有关于标签的知识。
    

    运行包中的测试:

    pytest --pyargs pkg.testing
    

    这将导入pkg.testing,并使用它的文件系统位置来查找和运行测试。(译者注:这里的意思就是pytest会导入这个包,并且运行包中的符合我们之前看到的命名规则的pytest的测试)

2.6 修改python的回显打印信息

修改python回显信息的例子:

pytest --showlocals # 在回显中打印本地变量
pytest -l # 在回显中打印本地变量 (简写)
pytest --tb=auto # (默认) 在第一个和最后一个入口使用详尽的回显,其他入口使用简洁回显
pytest --tb=long # 详尽的,信息丰富的回显合适
pytest --tb=short # 简短的信息回显
pytest --tb=line # 每个失败测试只显示一行
pytest --tb=native # Python 标准库的格式
pytest --tb=no # 无回显

使用 --full-trace 可以在发生错误的时候获得非常长的回显(比–tb=long还要长)。这个参数还可以确保当你使用Ctrl+C停止测试运行的时候,一个堆栈跟踪信息会被打印出来。这个技术在测试运行时间过长,而你想让它停下来,看看测试卡在哪里的时候十分有用。默认情况下是不会有任何打印信息的(因为pytest会捕获这个用户操作)。使用这个选项可以保证这个信息被打印出来。

2.7 详细的总结报告

-r 这个选项可以用来在测试报告的末尾显示一个“简短的总结信息”,用以在一个很大的测试集中清楚的了解所有的失败,跳过,xfails,等等。
它默认使用f E来列出失败和错误。

译者注:注意这里的区别,默认情况下也是有简短的总结信息( short test summary info)的,只不过在总结信息中只有 failed 和 error 的用例信息,使用-ra参数,可以让xpassed xfailed skiped 都显示出来(不管是前者还是后者,通过的用例都不会显示)

译者注:xfailed是一种状态,表示本意就是让其失败而结果确实是失败的情况,在后面还会讲解。与之对应的还是xpassed,表示预期失败而实际却成功了的情况。
例子:

# test_example.py的内容
import pytest


@pytest.fixture
def error_fixture():
	assert 0

def test_ok():
	print("ok")

def test_fail():
	assert 0
	
def test_error(error_fixture):
	pass
	
def test_skip():
	pytest.skip("skipping this test")

def test_xfail():
	pytest.xfail("xfailing this test")

@pytest.mark.xfail(reason="always xfail")
def test_xpass():
	pass
$ pytest -ra
=========================== test session starts ============================
platform linux -- Python 3.x.y, pytest-6.x.y, py-1.x.y, pluggy-0.x.y
cachedir: $PYTHON_PREFIX/.pytest_cache
rootdir: $REGENDOC_TMPDIR
collected 6 items
test_example.py .FEsxX [100%]
=====&#
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值