news 2026/6/18 11:42:23

大厂测试都在用的Pytest技巧,面试加分项

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
大厂测试都在用的Pytest技巧,面试加分项

01概述

pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点:

  • 简单灵活,容易上手,文档丰富;

  • 支持参数化,可以细粒度地控制要测试的测试用例;

  • 能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests);

  • pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等;

  • 测试用例的skip和xfail处理;

  • 可以很好的和CI工具结合,例如jenkins

02使用介绍

安装:pip install pytest

1、示例代码

编写规则:编写pytest测试样例非常简单,只需要按照下面的规则:
  • 测试文件以test_开头(以_test结尾也可以)

  • 测试类以Test开头,并且不能带有 init 方法

  • 测试函数以test_开头

  • 断言使用基本的assert即可

pytest1.py

fixture的scope参数

scope参数有四种,默认为function

  • function:每个test都运行,默认是function的scope

  • class:每个class的所有test只运行一次

  • module:每个module的所有test只运行一次

  • session:每个session只运行一次

setup和teardown操作
  • setup,在测试函数或类之前执行,完成准备工作,例如数据库链接、测试数据、打开文件等

  • teardown,在测试函数或类之后执行,完成收尾工作,例如断开数据库链接、回收内存资源等

备注:

也可以通过在fixture函数中通过yield实现setup和teardown功能

2、测试结果

如何执行
  • pytest # run all tests below current dir

  • pytest test_mod.py # run tests in module file test_mod.py

  • pytest somepath # run all tests below somepath like ./tests/

  • pytest -k stringexpr # only run tests with names that match the
    # the "string expression", e.g. "MyClass and not method"
    # will select TestMyClass.test_something
    # but not TestMyClass.test_method_simple

  • pytest test_mod.py::test_func # only run tests that match the "node ID",
    # e.g "test_mod.py::test_func" will be selected
    # only run test_func in test_mod.py

通过pytest.mark对test方法分类执行

通过@pytest.mark控制需要执行哪些feature的test,例如在执行test前增加修饰@pytest.mark.website

  • 通过 -m "website" 执行有website标记的test方法

  1. $ pytest -v -m "website" pytest1.py

  2. ============================================================================== test session starts ===============================================================================platform linux2 --Python2.7.14, pytest-3.0.0, py-1.5.2, pluggy-0.3.1--/home/kevin/soft/anaconda2/bin/python

  3. cachedir: .cacheUsing--randomly-seed=1522925202rootdir: /home/kevin/learn/python-web/tox/case2, inifile:plugins: randomly-1.0.0, mock-1.2, cov-2.0.0collected 3 items

  4. pytest1.py::test_1 PASSED

  5. ============================================================================= pytest-warning summary =============================================================================WC1None pytest_funcarg__cov: declaring fixtures using "pytest_funcarg__" prefix is deprecated and scheduled to be removed in pytest 4.0. Please remove the prefix and use the @pytest.fixture decorator instead.===============================================================================2 tests deselected ==========================================================================================================================================1 passed, 2 deselected, 1 pytest-warnings in0.00 seconds ============================================================

通过 -m "not website" 执行没有website标记的test方法

  1. $ pytest -v -m "not website" pytest1.py

  2. ============================================================================== test session starts ===============================================================================platform linux2 --Python2.7.14, pytest-3.0.0, py-1.5.2, pluggy-0.3.1--/home/kevin/soft/anaconda2/bin/python

  3. cachedir: .cacheUsing

  4. --randomly-seed=1522925192rootdir: /home/kevin/learn/python-web/tox/case2, inifile:plugins: randomly-1.0.0, mock-1.2, cov-2.0.0collected 3 items

  5. pytest1.py::test_3 PASSED

  6. pytest1.py::test_2 PASSED============================================================================= pytest-warning summary =============================================================================WC1None pytest_funcarg__cov: declaring fixtures using "pytest_funcarg__" prefix is deprecated and scheduled to be removed in pytest 4.0. Please remove the prefix and use the @pytest.fixture decorator instead.===============================================================================1 tests deselected ==========================================================================================================================================2 passed, 1 deselected, 1 pytest-warnings in0.00 seconds ============================================================

Console参数介绍

  • -v 用于显示每个测试函数的执行结果

  • -q 只显示整体测试结果

  • -s 用于显示测试函数中print()函数输出

  • -x, --exitfirst, exit instantly on first error or failed test

  • -h 帮助

Case 1
  1. $ pytest -v pytest1.py

  2. ============================================================================== test session starts ===============================================================================

  3. platform linux2 --Python2.7.14, pytest-3.0.0, py-1.5.2, pluggy-0.3.1--/home/kevin/soft/anaconda2/bin/python

  4. cachedir: .cache

  5. Using--randomly-seed=1522920341

  6. rootdir: /home/kevin/learn/python-web/tox/case2, inifile:

  7. plugins: randomly-1.0.0, mock-1.2, cov-2.0.0

  8. collected 3 items

  9. pytest1.py::test_1 PASSED

  10. pytest1.py::test_3 PASSED

  11. pytest1.py::test_2PASSED

  12. ============================================================================= pytest-warning summary =============================================================================WC1None pytest_funcarg__cov: declaring fixtures using "pytest_funcarg__" prefix is deprecated and scheduled to be removed in pytest 4.0. Please remove the prefix and use the @pytest.fixture decorator instead.==================================================================3 passed, 1 pytest-warnings in0.01 seconds ===================================================================

Case 2

  1. $ pytest -s pytest1.py

  2. ============================================================================== test session starts ===============================================================================

  3. platform linux2 --Python2.7.14, pytest-3.0.0, py-1.5.2, pluggy-0.3.1

  4. Using --randomly-seed=1522920508

  5. rootdir: /home/kevin/learn/python-web/tox/case2, inifile:

  6. plugins: randomly-1.0.0, mock-1.2, cov-2.0.0

  7. collected 3 items

  8. pytest1.py setup_function called.Test_1

  9. called..teardown_function called.setup_module called.Test_2 called..Test_3 called..teardown_module called.============================================================================= pytest-warning summary =============================================================================WC1None pytest_funcarg__cov: declaring fixtures using"pytest_funcarg__" prefix is deprecated and scheduled to be removed in pytest 4.0. Pleaseremove the prefix and use the @pytest.fixture decorator instead.==================================================================3 passed, 1 pytest-warnings in0.01 seconds ===================================================================

03扩展插件

测试报告

安装与样例
  1. pipinstallpytest-cov # 计算pytest覆盖率,支持输出多种格式的测试报告

  2. pytest --cov-report = html --cov = ./ test_code_target_dir

Console参数介绍
  • --cov=[path], measure coverage for filesystem path (multi-allowed)

    指定被测试对象,用于计算测试覆盖率

  • --cov-report=type, type of report to generate: term, term-missing, annotate, html, xml (multi-allowed)

    测试报告的类型

  • --cov-config=path, config file for coverage, default: .coveragerc, coverage

    配置文件

  • --no-cov-on-fail, do not report coverage if test run fails, default: False

    如果测试失败,不生成测试报告

  • --cov-fail-under=MIN, Fail if the total coverage is less than MIN.

    如果测试覆盖率低于MIN,则认为失败

Console Result
  1. ---------------------------------------------------------------- coverage: platform linux2, python 2.7.14-final-0 ----------------------------------------------------------------

  2. Name Stmts Miss Cover

  3. --------------------------------

  4. pytest1.py 18 0 100%

Html Result

测试顺序随机

pip install pytest-randomly

分布式测试

pip install pytest-xdist

出错立即返回

pip install pytest-instafail

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 11:22:19

如何使用Postman做接口自动化测试及完美的可视化报告?

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快postman官网下载地址:https://www.postman.com/downloads/下载后直接双击文件安装:Postman-win64-9.20.3-Setup.exe根据自己需要修改软件安装…

作者头像 李华
网站建设 2026/6/18 0:08:20

通义千问+语音识别:声控儿童动物生成系统集成部署案例

通义千问语音识别:声控儿童动物生成系统集成部署案例 1. 引言 随着人工智能技术的不断演进,大模型在内容生成领域的应用日益广泛。特别是在面向儿童的应用场景中,如何通过自然、安全且富有趣味性的方式实现交互式内容生成,成为教…

作者头像 李华
网站建设 2026/6/15 10:14:32

从0开始学OCR文字检测:科哥镜像保姆级教程,支持ONNX导出

从0开始学OCR文字检测:科哥镜像保姆级教程,支持ONNX导出 1. 引言:OCR文字检测的工程价值与学习路径 光学字符识别(OCR)技术是连接图像与文本信息的关键桥梁,广泛应用于文档数字化、证件识别、票据处理、工…

作者头像 李华
网站建设 2026/6/15 10:12:40

服务CPU突然飙到100%,用Arthas三分钟定位到问题代码

前言 那天下午正准备摸鱼,突然收到告警:生产环境某服务CPU使用率100%。 打开监控一看,好家伙,4核全部打满,而且已经持续了好几分钟。赶紧上服务器排查。 第一步:确认是哪个进程 先用top看一眼&#xff…

作者头像 李华
网站建设 2026/6/15 10:15:12

paperzz AI PPT:从 0 到 1 搞定专业演示,告别熬夜改稿的神器

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿 paperzz - AI PPT制作https://www.paperzz.cc/aiPpthttps://www.paperzz.cc/aiPpt 你是否也曾经历过这些 PPT 创作的至暗时刻? 接到紧急汇报任务,对着空白模板熬到凌晨三点&#x…

作者头像 李华