news 2026/6/9 18:30:55

大厂测试都在用的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/6 8:06:06

小程序毕设选题推荐:基于springboot+微信小程序的考研刷题平台考研复习辅助平台【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/6/6 8:03:48

DeepSeek-R1-Distill-Qwen-1.5B部署省50%成本?真实案例分享

DeepSeek-R1-Distill-Qwen-1.5B部署省50%成本?真实案例分享 1. 背景与选型动机 在当前大模型快速迭代的背景下,越来越多企业与开发者面临一个现实问题:如何在有限算力资源下实现高性能推理能力。尤其是在边缘设备、嵌入式平台或低成本服务器…

作者头像 李华
网站建设 2026/6/9 1:54:19

Docker镜像使用

Docker镜像使用列出本镜像查找某个镜像下拉某个镜像查看占用空间删除镜像启动镜像列出当前所有正在运行的容器退出容器启动一个或多个已经被停止的容器重启容器停止容器暂停容器中所有的进程删除已停止的容器杀掉一个运行中的容器恢复容器中所有的进程列出本镜像 docker image…

作者头像 李华
网站建设 2026/6/6 7:58:51

计算神经科学:概念、历史、内容与发展战略!

计算神经科学作为一门融合神经科学、数学、计算机科学等多学科的交叉领域,旨在通过数学建模、理论分析和计算机模拟来揭示大脑处理信息的原理。下面这个表格可以帮助你快速把握其核心框架:维度核心要点简要说明基本概念交叉学科属性利用数学分析和计算机…

作者头像 李华
网站建设 2026/6/6 8:27:59

CosyVoice-300M Lite英文连读问题?语言模型优化实战

CosyVoice-300M Lite英文连读问题?语言模型优化实战 1. 引言:轻量级TTS的现实挑战与优化目标 随着边缘计算和云原生部署场景的普及,对高效、低资源消耗的语音合成(Text-to-Speech, TTS)系统需求日益增长。CosyVoice-…

作者头像 李华
网站建设 2026/6/6 7:02:11

亲测Open Interpreter:用Qwen3-4B模型5步完成数据分析

亲测Open Interpreter:用Qwen3-4B模型5步完成数据分析 1. 引言:本地AI编程的新范式 在当前大模型快速发展的背景下,如何将自然语言指令高效转化为可执行代码,成为提升开发效率的关键。传统云端AI助手受限于网络延迟、数据隐私和…

作者头像 李华