代码内调用pytest时如何仅运行当前文件内的测试用例
实现方法
给pytest.main()传入当前文件的路径作为执行目标即可。无参调用pytest.main()时,pytest默认会扫描当前工作目录下所有符合测试命名规则的文件,显式指定单文件路径后,就只会收集、运行该文件内的测试用例,不会遍历其他路径。
最简写法
修改foo.py的入口块代码:
# ... 上方业务代码、测试用例保持原有逻辑不变 ... if __name__ == '__main__': import pytest pytest.main([__file__])
Python运行时会给内置变量__file__自动赋值为当前脚本的路径,直接传给pytest作为测试收集目标就行。此时执行python foo.py,就只会运行当前文件内的test_foo、test_bar两个用例,不会扫描目录下其他文件的测试。
扩展参数配置
如果需要附加pytest运行参数,比如输出详细执行日志、显示测试中的打印内容,直接在参数列表里追加对应命令行选项即可,规则和终端调用pytest完全一致:
if __name__ == '__main__': import pytest # -v:输出详细用例执行结果,-s:显示测试过程中的标准输出(print内容) pytest.main([__file__, '-v', '-s'])
跨工作目录兼容写法
如果需要在任意工作目录下调用这个脚本(比如执行python /opt/scripts/foo.py这类绝对路径调用场景),担心相对路径识别异常,可以把路径转为绝对路径后再传入,Python 3.4+ 可直接用标准库pathlib实现,不需要额外安装依赖:
from pathlib import Path if __name__ == '__main__': import pytest pytest.main([str(Path(__file__).resolve())])
注意:
pytest.main()接收的参数是和命令行argv格式一致的列表,不要直接传入字符串形式的路径,否则会被pytest拆分为单字符选项解析,触发报错。
内容的提问来源于stack exchange,提问作者Alnitak
相关产品推荐
相关产品推荐

