测试岗位面试题更新 2026-08-05

在软件测试实践中,pytest 框架执行测试用例的命令行规则包括哪些方面?请说明其发现测试文件、测试函数和测试类的默认命名约定,以及如何通过命令行选项来指定或排除测试用例。

测试编码实现技术原理pytestPython

考察说明

考查对 pytest 命令行规则和测试发现约定的理解。

回答思路

  1. 【回答框架 1】pytest 默认按约定发现测试:测试文件命名为 test_*.py 或 *_test.py,测试函数命名为 test_*,测试类命名为 Test*,类内测试方法命名为 test_*。在命令行直接运行 pytest 时,会递归搜索当前目录下符合约定的文件。
  2. 【回答框架 2】命令行规则包括指定测试目标:pytest test_mod.py 运行指定文件,pytest tests/ 运行指定目录,pytest test_mod.py::test_func 运行指定函数,pytest test_mod.py::TestClass::test_method 运行指定类中的方法。
  3. 【回答框架 3】常用选项:-k 按名称匹配测试(支持表达式),-m 按标记选择,-x 失败即停,--maxfail=N 设置最大失败数,-q 安静模式,-s 显示输出,--collect-only 只收集不执行,-v 详细输出。
  4. 【回答框架 4】排除测试可以用 -k 配合 not,如 -k 'not slow';或用 -m 'not slow' 排除标记;也可在 pytest.ini 中配置 addopts 设置默认选项。
  5. 【回答框架 5】执行顺序与参数化:pytest 按定义顺序执行,参数化用 @pytest.mark.parametrize 扩展用例,命令行规则不受影响。
  6. 【关键点 1】测试文件命名约定为 test_*.py 或 *_test.py,测试函数以 test_ 开头,测试类以 Test 开头且不含 __init__。
  7. 【关键点 2】使用 pytest path::test_node 可精确定位到函数、类或方法。
  8. 【关键点 3】-k 支持表达式匹配测试名,-m 按标记选择,排除可用 not。
  9. 【关键点 4】--collect-only 可用于检查收集的用例,不实际执行。
  10. 【关键点 5】pytest.ini 中的 addopts 可配置默认命令行参数。
  11. 【易错点 1】混淆 -k 与 -m 的用法:-k 是按名称匹配,-m 是按标记选择。
  12. 【易错点 2】测试类名必须以 Test 开头,否则不会被发现;测试方法也需 test_ 前缀。
  13. 【易错点 3】用 -k 排除时,表达式语法错误或引号使用不当会导致匹配不到预期用例。