技术面没过,竟然是因为我没用过Pytest框架?

想象一下,你在一次技术面试中满怀信心,答完所有问题,结果却被告知没通过,原因竟然是——你没用过Pytest框架!是的,在当今软件测试的世界里,Pytest已经成为了许多公司的“必备”技能。

那么问题来了,为什么Pytest如此重要?为什么越来越多的公司在招聘测试开发人员时,都会特别关注你是否掌握了Pytest?今天,我们就来一起探讨Pytest在测试领域中的关键作用,以及它如何影响你的面试表现。

 

1. Pytest的简洁与强大


Pytest是Python中最流行的测试框架之一,以其简洁、灵活和强大的功能著称。相比于传统的unittest框架,Pytest支持更灵活的测试组织方式,支持参数化测试,还能轻松整合第三方插件,简化了测试代码的编写。例如,在某次面试中,面试官直接问我如何使用Pytest参数化来简化测试用例的编写,而我当时只能依赖unittest,显得力不从心。

2. 企业对Pytest的重视


许多企业尤其是那些注重自动化测试的公司,会优先选择Pytest作为其测试框架。比如,某大型电商平台曾在面试中要求候选人现场编写基于Pytest的API测试脚本,而没有Pytest经验的候选人,往往会被淘汰。通过Pytest,你可以轻松扩展测试功能,处理更多的测试场景,提升测试覆盖率。

3. Pytest与DevOps的整合


Pytest不仅限于本地测试,它还能与CI/CD管道无缝集成,如与Jenkins、GitLab等工具结合,实现自动化测试。这也是为什么很多大厂都青睐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方法

$ 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/pythoncachedir: .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 itemspytest1.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/pythoncachedir: .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 itemspytest1.py::test_3 PASSEDpytest1.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

 

Case 2

 

03  扩展插件

测试报告

安装与样例

 
pip install pytest-cov   # 计算pytest覆盖率,支持输出多种格式的测试报告
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

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

 

Html Result

图片

测试顺序随机

pip install pytest-randomly

 

分布式测试

pip install pytest-xdist

出错立即返回

pip install pytest-instafail

 

 如果你还没有掌握Pytest,现在正是学习的好时机!通过熟练掌握Pytest,你不仅能轻松通过面试,还能在实际工作中快速提高测试效率,真正做到事半功倍。

Pytest不仅是一个测试框架,它是现代自动化测试不可或缺的工具。熟练掌握Pytest,能够让你在技术面试中脱颖而出,更重要的是,它可以帮助你在实际工作中构建更加高效的自动化测试体系,推动测试流程的标准化与自动化。

“掌握Pytest,才真正掌握了现代测试的脉搏,让测试工作更轻松,让面试更自信!”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/454270.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库表的创建

运用的环境是pychram python3.11.4 创建一个表需要用到以下语法 注释已经写清楚各种语法的含义,记住缩进是你程序运行的关键,因为程序是看你的缩进来判断你的运行逻辑,像我这个就是缩进不合理导致的报错 那么今天分享就到这里,谢…

QScrollBar滑动条控件

人机验证简化版案例 //设置垂直滑动条的范围是0-100ui->verticalScrollBar->setRange(0,100);ui->horizontalScrollBar->setRange(0,100);//设置初始数值ui->verticalScrollBar->setValue(50);//void valueChanged(int value);connect(ui->verticalScroll…

uniapp修改input中placeholder样式

Uniapp官方提供了两种修改的属性方法&#xff0c;但经过测试&#xff0c;只有 placeholder-class 属性能够生效 <input placeholder"请输入手机验证码" placeholder-class"input-placeholder"/><!-- css --> <style lang"scss" s…

基于图像拼接开题报告

选题的背景与意义 在日常生活中&#xff0c;使用普通相机获取宽视野的场景图像时&#xff0c;必须通过调节相机的焦距才可以提取完整的场景。由于相机的分辨率有限&#xff0c;拍摄场景越大&#xff0c;得到的图像分辨率就越低&#xff0c;因此只能通过缩放相机镜头减小拍摄的…

VSCode按ctrl与鼠标左键无法实现跳转的解决办法

vscode编译环境老是出问题&#xff0c;下面介绍两种解决方法 需要提前配置好代码编译需要的库以及编译器位置等等。 ctrlshiftp,输入 >C/C配置&#xff08;JSON&#xff09; 打开生成的c_cpp_properties.json {"configurations": [{"name": "Li…

NSSCTF-WEB-easy_eval

目录 前言 正文 思路 序列化构造 后渗透 思路点1:Redis 思路2:蚁剑插件绕过disable_functinons 结尾 作者的其他文章 前言 说是easy,实际很difficult 正文 思路 <?php class A{public $code "";function __call($method,$args){//最后执行命令eval($th…

github加速 DevSidecar 1.8.8

DevSidecar 1.8.8 更多配置请参考&#xff1a;github开源

impdp+remap_schema导入后登录报ORA-01017: Invalid Username/password

环境说明&#xff1a;有个11.2.0.4的rac数据库&#xff0c;现需要把USR_OA克隆一份出来做测试&#xff0c;新用户名是TEST_OA&#xff0c;直接是expdp导出用户&#xff0c;再用impdpremap_schema生成TEST_OA&#xff0c; 业务人员使用PLSQL(版本12.0.1.1814) 登录TEST_OA时总…

GJS-WCP

不懂的就问&#xff0c;但我也是二把手......哭死 web GJS-ezssti 很常规的ssti模板注入&#xff0c;只过滤了"/","flag"。 过滤了/,flag 可以利用bash的特性绕过&#xff0c;如字符串截取&#xff0c;环境变量等等。payload1: {{url_for.__globals__[…

[项目详解][boost搜索引擎#1] 概述 | 去标签 | 数据清洗 | scp

目录 一、前言 二、项目的相关背景 三、搜索引擎的宏观原理 四、搜索引擎技术栈和项目环境 五、正排索引 VS 倒排索引--原理 正排索引 分词 倒排索引 六、编写数据去除标签和数据清洗模块 Parser 1.数据准备 parser 编码 1.枚举文件 EnumFile 2.去标签ParseHtml(…

文件处理新纪元:微信小程序的‘快递员’与‘整理师’

嗨&#xff0c;我是中二青年阿佑&#xff0c;今天阿佑将带领大家如何通过巧妙的文件处理功能&#xff0c;让用户体验从‘杂乱无章’到‘井井有条’的转变&#xff01; 文章目录 微信小程序的文件处理文件上传&#xff1a;小程序的“快递服务”文件下载&#xff1a;小程序的“超…

学习threejs,拉伸几何体THREE.TubeGeometry管道

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️拉伸几何体THREE.TubeGeome…

Git的原理和使用(六)

本文主要讲解企业级开发模型 1. 引入 交付软件的流程&#xff1a;开发->测试->发布上线 上面三个过程可以详细划分为一下过程&#xff1a;规划、编码、构建、测试、发 布、部署和维护 最初&#xff0c;程序⽐较简单&#xff0c;⼯作量不⼤&#xff0c;程序员⼀个⼈可以完…

Imagic: Text-Based Real Image Editing with Diffusion Models

https://openaccess.thecvf.com/content/CVPR2023/papers/Kawar_Imagic_Text-Based_Real_Image_Editing_With_Diffusion_Models_CVPR_2023_paper.pdfhttps://imagic-editing.github.io/ 问题引入 针对的是text based image editing问题&#xff0c;可以解决non rigid edit&am…

【软件安装与配置】 vue

1. 安装 Node.js Vue.js 项目通常依赖于 Node.js 环境来进行开发&#xff0c;可以从 Node.js 官方网站 下载并安装稳定版本。安装 Node.js 后&#xff0c;npm&#xff08;Node 包管理器&#xff09;也会自动安装。 2. 使用 Vue CLI 安装 Vue.js Vue CLI 是一个用于快速搭建 Vu…

柔性数组的使用

//柔性数组的使用 #include<stdio.h> #include<stdlib.h> #include<errno.h> struct s {int i;int a[]; }; int main() {struct s* ps (struct s*)malloc(sizeof(struct s) 20 * sizeof(int));if (ps NULL){perror("malloc");return 1;}//使用这…

用.NET开发跨平台应用程序采用 Avalonia 与MAUI如何选择

Avalonia是一个强大的框架&#xff0c;使开发人员能够使用.NET创建跨平台应用程序。它使用自己的渲染引擎绘制UI控件&#xff0c;确保在Windows、macOS、Linux、Android、iOS和WebAssembly等不同平台上具有一致的外观和行为。这意味着开发人员可以共享他们的UI代码&#xff0c;…

容灾与云计算概念

​​​​​​基础知识容灾备份——备份技术系统架构与备份网络方案-CSDN博客 SAN&#xff0c;是storage area network的简称&#xff0c;翻译过来就是存储区域网络。 顾名思义&#xff0c;SAN首先是一个网络&#xff0c;其次它是关于存储的&#xff0c;区域则是指服务器和存储资…

iTOP-RK3568开发板独立NPU通过算法加特应用到以下的场景

iTOP-3568开发板采用瑞芯微RK3568处理器&#xff0c;内部集成了四核64位Cortex-A55处理器。主频高达2.0Ghz&#xff0c;RK809动态调频。集成了双核心架构GPU&#xff0c;ARM G52 2EE、支持OpenGLES1.1/2.0/3.2、OpenCL2.0、Vulkan1.1、内嵌高性能2D加速硬件。 内置独立NPU,算力…

出血性脑卒中临床智能诊疗建模

出血性脑卒中是一种常见但危险的脑血管疾病&#xff0c;其治疗和管理需要及时而准确的诊断以及有效的预测模型。本研究旨在通过分析入院患者的临床数据和影像学特征&#xff0c;建立数学模型&#xff0c;评估患者的血肿扩张风险、血肿周围水肿进展以及长期预后。 针对问题一&a…