当前位置: 首页 > backend >正文

pytest 常见问题解答 (FAQ)

pytest 常见问题解答 (FAQ)

1. 基础问题

Q1: 如何让 pytest 发现我的测试文件?

  • 测试文件命名需符合 test_*.py*_test.py 模式
  • 测试函数/方法需以 test_ 开头
  • 测试类需以 Test 开头(且不能有__init__方法)

Q2: 如何运行特定测试?

pytest path/to/test_file.py::test_func  # 运行单个测试
pytest -k "pattern"                     # 运行名称匹配的测试
pytest -m mark_name                     # 运行特定标记的测试

Q3: 如何查看详细的测试输出?

pytest -v      # 详细模式
pytest -s      # 显示print输出
pytest --tb=auto  # 控制错误回溯显示方式(native/short/no等)

2. 配置问题

Q4: 如何配置 pytest 默认选项?

在项目根目录创建 pytest.ini:

[pytest]
addopts = -v --tb=short
python_files = test_*.py
markers =slow: marks tests as slow

Q5: 如何跳过某些测试?

@pytest.mark.skip(reason="Not implemented yet")
def test_feature():...@pytest.mark.skipif(sys.version_info < (3, 8), reason="requires Python 3.8+")
def test_py38_feature():...

3. 高级用法问题

Q6: 什么是 fixture?如何使用?

Fixture 是 pytest 的依赖注入系统:

@pytest.fixture
def db_connection():conn = create_connection()yield conn  # 测试执行前运行conn.close()  # 测试执行后清理def test_query(db_connection):  # 自动注入fixtureresult = db_connection.query("SELECT 1")assert result == 1

Q7: 如何参数化测试?

@pytest.mark.parametrize("input,expected", [("3+5", 8),("2+4", 6),
])
def test_eval(input, expected):assert eval(input) == expected

4. 常见错误解决

Q8: 遇到 “fixture not found” 错误?

  • 确保 fixture 名称拼写正确
  • 将常用 fixture 放在 conftest.py 文件中
  • 检查 fixture 作用域(如 module/session 级fixture不能用在函数级fixture中)

Q9: 如何解决插件冲突?

pip list | grep pytest  # 查看已安装插件
pytest --trace-config  # 查看加载的插件

5. 集成与扩展

Q10: 如何生成覆盖率报告?

pip install pytest-cov
pytest --cov=my_package --cov-report=html

Q11: 如何并行运行测试?

pip install pytest-xdist
pytest -n 4  # 使用4个worker

6. 调试技巧

Q12: 如何调试失败的测试?

pytest --pdb  # 失败时进入pdb调试
pytest --trace  # 立即进入调试在每个测试开始前

Q13: 如何查看fixture执行顺序?

pytest --setup-show test_file.py

7. 最佳实践

Q14: 如何组织大型测试套件?

  • 按功能模块组织测试文件
  • 使用 conftest.py 共享 fixture
  • 合理使用标记分类测试

Q15: 如何测试异常?

def test_divide_by_zero():with pytest.raises(ZeroDivisionError):1 / 0# 也可以检查异常信息with pytest.raises(ValueError, match="invalid literal"):int("a")

8. 性能问题

Q16: 如何加速测试执行?

  • 使用 pytest-xdist 并行运行
  • 减少 I/O 操作,使用 mock
  • 将慢测试标记为 @pytest.mark.slow 并默认跳过
http://www.xdnf.cn/news/10297.html

相关文章:

  • 头歌java课程实验(学习-Java字符串之正则表达式之元字符之判断字符串是否符合规则)
  • 每日c/c++题 备战蓝桥杯(P1204 [USACO1.2] 挤牛奶 Milking Cows)
  • [蓝桥杯]分考场
  • 【11408学习记录】考研英语写作提分秘籍:2013真题邀请信精讲+万能模板套用技巧
  • 1-Wire 一线式总线:从原理到实战,玩转 DS18B20 温度采集
  • AE已禁用刷新请释放Caps Lock
  • Redis事务详解:原理、使用与注意事项
  • RabbitMQ 高级特性
  • Python打卡训练营Day41
  • C 语言开发中常见的开发环境
  • python打卡day41@浙大疏锦行
  • 【愚公系列】《生产线数字化设计与仿真》006-颜色分类站仿真(配置颜色分类站的气缸和传送带)
  • YOLO系列中的C3模块解析2025.5.31
  • 《重新定义高效微调:QLoRA 4位量化的颠覆式创新解析》
  • 数字化转型进阶:精读41页华为数字化转型实践【附全文阅读】
  • 在Spring Boot中集成Redis进行缓存
  • 赛博算命之“帝王之术”——奇门遁甲的JAVA实现
  • Dest建筑能耗模拟仿真功能简介
  • 业界宽松内存模型的不统一而导致的软件问题, gcc, linux kernel, JVM
  • 流媒体基础解析:视频清晰度的关键因素
  • 深度学习|pytorch基本运算-广播失效
  • 方案精读:42页华为企业组织活力设计方案【附全文阅读】
  • 什么是trace,分布式链路追踪(Distributed Tracing)
  • C++ 建造者模式:简单易懂的设计模式解析
  • 保持本地 Git 项目副本与远程仓库完全同步
  • LeetCode 每日一题 2025/5/26-2025/6/1
  • DO指数GPU版本
  • Redis最佳实践——安全与稳定性保障之高可用架构详解
  • 双目相机深度的误差分析(基线长度和相机焦距的选择)
  • python中将一个列表样式的字符串转换成真正列表的办法以及json.dumps()和 json.loads()