news 2026/9/3 2:07:04

技术面没过,居然是因为没用过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.mark对test方法分类执行

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

@pytest.mark.website

通过 -m “website” 执行有website标记的test方法

$ pytest -v -m "website" pytest1.py ============================================================================== test session starts ===============================================================================platform linux2 -- Python 2.7.14, pytest-3.0.0, py-1.5.2, pluggy-0.3.1 -- /home/kevin/soft/anaconda2/bin/python 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 pytest1.py::test_1 PASSED ============================================================================= pytest-warning summary =============================================================================WC1 None 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 in 0.00 seconds ============================================================

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

$ pytest -v -m "not website" pytest1.py ============================================================================== test session starts ===============================================================================platform linux2 -- Python 2.7.14, pytest-3.0.0, py-1.5.2, pluggy-0.3.1 -- /home/kevin/soft/anaconda2/bin/python cachedir: .cacheUsing --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 pytest1.py::test_3 PASSED pytest1.py::test_2 PASSED============================================================================= pytest-warning summary =============================================================================WC1 None 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 in 0.00 seconds ============================================================

Console参数介绍

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

-q 只显示整体测试结果

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

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

-h 帮助

Case 1

$ pytest -v pytest1.py ============================================================================== test session starts =============================================================================== platform linux2 -- Python 2.7.14, pytest-3.0.0, py-1.5.2, pluggy-0.3.1 -- /home/kevin/soft/anaconda2/bin/python cachedir: .cache Using --randomly-seed=1522920341 rootdir: /home/kevin/learn/python-web/tox/case2, inifile: plugins: randomly-1.0.0, mock-1.2, cov-2.0.0 collected 3 items pytest1.py::test_1 PASSED pytest1.py::test_3 PASSED pytest1.py::test_2PASSED ============================================================================= pytest-warning summary =============================================================================WC1 None 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 in 0.01 seconds ===================================================================

Case 2

$ pytest -s pytest1.py ============================================================================== test session starts =============================================================================== platform linux2 -- Python 2.7.14, pytest-3.0.0, py-1.5.2, pluggy-0.3.1 Using --randomly-seed=1522920508 rootdir: /home/kevin/learn/python-web/tox/case2, inifile: plugins: randomly-1.0.0, mock-1.2, cov-2.0.0 collected 3 items pytest1.py setup_function called.Test_1 called..teardown_function called.setup_module called.Test_2 called..Test_3 called..teardown_module called.============================================================================= pytest-warning summary =============================================================================WC1 None 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 in 0.01 seconds ===================================================================

03 扩展插件

测试报告

安装与样例

pip install pytest-cov # 计算pytest覆盖率,支持输出多种格式的测试报告 pytest --cov-report = html --cov = ./ test_code_target_dir

AI写代码bash

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

---------------------------------------------------------------- coverage: platform linux2, python 2.7.14-final-0 ---------------------------------------------------------------- Name Stmts Miss Cover -------------------------------- pytest1.py 18 0 100%

Html Result

测试顺序随机

pip install pytest-randomly

AI写代码bash

分布式测试

pip install pytest-xdist

AI写代码bash

出错立即返回

pip install pytest-instafail

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

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

多模态大语言模型知识利用难题:ALFAR方法详解,无需训练即可提升检索增强生成性能

本文针对多模态大语言模型在知识密集型任务中无法充分利用检索知识的问题,提出了一种无训练即插即用的ALFAR方法。该方法通过动态重分配注意力解决视觉标记与上下文标记间的注意力偏差,并在输出层自适应融合参数化知识与上下文知识以缓解知识冲突。实验表…

作者头像 李华
网站建设 2026/9/2 19:09:43

深度学习材料设计!!太给力了!

深度学习材料设计是通过构建深度神经网络模型,从海量材料数据中自动提取“成分-结构-工艺-性能”之间的复杂非线性关系,实现材料性能精准预测、新结构逆向设计与合成路径智能优化的新兴范式。其核心在于突破传统经验驱动模式的局限,利用生成对…

作者头像 李华
网站建设 2026/9/2 15:33:18

重新定义你的观影体验:Screenbox媒体播放器深度解析

重新定义你的观影体验:Screenbox媒体播放器深度解析 【免费下载链接】Screenbox LibVLC-based media player for the Universal Windows Platform 项目地址: https://gitcode.com/gh_mirrors/sc/Screenbox 还在为视频格式兼容性而烦恼吗?当你想放…

作者头像 李华
网站建设 2026/9/2 1:06:21

设计公司组织结构图在线设计 项目创作团队层级

在设计行业的快速发展进程中,清晰、合理的组织结构图对于设计公司的高效运营以及项目创作团队的有序协作起着至关重要的作用。组织结构图能够直观地呈现公司内部的层级关系、部门设置以及人员配置,让员工明确自身在组织中的位置和职责,同时也…

作者头像 李华
网站建设 2026/9/2 6:02:28

基于SpringBoot的突发性疾病管理系统的设计与实现-计算机毕设 附源码 36676

基于SpringBoot的突发性疾病管理系统的设计与实现 摘 要 随着突发性疾病的频发,及时有效的管理和处理对保障公众健康至关重要。为了提高突发性疾病的应急响应能力和治疗效率,设计并实现了一套基于SpringBoot框架的突发性疾病管理系统。系统通过集成信息…

作者头像 李华
网站建设 2026/9/2 19:23:11

全面盘点:AI开发平台的十大高价值应用场景,CTO和老板必看清单

引言: 对于企业的技术决策者(CTO)和战略制定者(老板)而言,了解一项技术的全景应用比深究一个细节更重要。本文旨在成为一份实用的“决策清单”,系统性地盘点AI开发平台 across the enterprise 的…

作者头像 李华