news 2026/8/16 14:25:01

大厂测试都在用的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/8/14 20:34:29

从布局分析到元素识别|基于PaddleOCR-VL的全流程技术拆解

从布局分析到元素识别|基于PaddleOCR-VL的全流程技术拆解 1. 引言:文档解析的新范式 在数字化转型加速的背景下,文档解析已成为信息提取、知识管理与自动化流程中的关键环节。传统OCR技术多聚焦于文本识别,难以应对现代文档中复…

作者头像 李华
网站建设 2026/8/10 0:18:05

UDS 31服务安全访问机制深度剖析:全面讲解

UDS 31服务安全访问机制深度剖析:从原理到实战的完整指南在一辆现代智能汽车中,诊断接口不仅是维修工具的“入口”,更可能成为黑客攻击的“后门”。随着车辆电子架构日益复杂,如何在开放诊断功能的同时守住安全底线?UD…

作者头像 李华
网站建设 2026/8/2 18:36:04

通义千问3-4B模型测试:工具调用能力评估

通义千问3-4B模型测试:工具调用能力评估 1. 引言 随着大模型向端侧部署的持续演进,轻量化、高响应、强泛化的小模型正成为AI应用落地的关键载体。2025年8月,阿里开源了 通义千问 3-4B-Instruct-2507(Qwen3-4B-Instruct-2507&…

作者头像 李华
网站建设 2026/8/15 11:52:19

文献复制比突破30%?五个立即见效的降重妙招

论文重复率超30%?5个降重技巧,一次降到合格线 为了有效解决论文重复率过高的问题,以下提供五种经过验证的降重策略:通过调整句式结构、替换近义词、拆分长句、增加原创性分析以及合理引用未标注文献,能够显著降低重复…

作者头像 李华
网站建设 2026/8/3 15:00:16

EasyGBS算法算力平台实现高精度路况管控

一、背景随着城市化进程加速和机动车保有量持续增长,实时、精准、可视化的路况感知成为智慧交通管理的核心需求。传统的路况信息获取方式存在延迟大、覆盖不全面等问题。通过利用EasyGBS强大的视频监控技术与算法算力技术的融合,结合现有的交通监控摄像头…

作者头像 李华
网站建设 2026/8/15 15:42:28

Linux 使用 /proc/meminfo 和 free 命令查看内存信息

/proc/meminfo 和 free 命令都用于查看 Linux 系统的内存使用情况,但它们在使用方式、信息详细程度和输出格式上有显著区别: 1. /proc/meminfo 位置:虚拟文件系统中的一个文件访问方式:cat /proc/meminfo 或直接读取文件内容特点&…

作者头像 李华