当前位置: 首页 > news >正文

Python面试题:结合Python技术,如何使用Pytest进行单元测试和集成测试

使用Pytest进行单元测试和集成测试是非常常见和有效的方法。下面是如何使用Pytest进行这些测试的详细指南。

安装Pytest

首先,使用pip安装Pytest:

pip install pytest

单元测试

单元测试用于测试单个模块或函数的功能。假设我们有一个简单的Python模块 math_functions.py,其中包含几个基本的数学函数:

# math_functions.py
def add(a, b):return a + bdef subtract(a, b):return a - bdef multiply(a, b):return a * bdef divide(a, b):if b == 0:raise ValueError("Cannot divide by zero!")return a / b

为这些函数编写单元测试:

# test_math_functions.py
import pytest
from math_functions import add, subtract, multiply, dividedef test_add():assert add(1, 2) == 3assert add(-1, 1) == 0assert add(-1, -1) == -2def test_subtract():assert subtract(2, 1) == 1assert subtract(-1, 1) == -2assert subtract(-1, -1) == 0def test_multiply():assert multiply(2, 3) == 6assert multiply(-1, 1) == -1assert multiply(-1, -1) == 1def test_divide():assert divide(6, 3) == 2assert divide(-1, 1) == -1assert divide(-1, -1) == 1with pytest.raises(ValueError):divide(1, 0)

运行单元测试

在命令行中,导航到包含测试文件的目录,然后运行:

pytest

Pytest会自动发现所有以 test_ 开头的文件和函数,并运行它们。

集成测试

集成测试用于测试多个模块之间的交互。假设我们有一个简单的应用程序 app.py,它使用 math_functions.py 中的函数:

# app.py
from math_functions import add, subtract, multiply, dividedef calculate(a, b, operation):if operation == 'add':return add(a, b)elif operation == 'subtract':return subtract(a, b)elif operation == 'multiply':return multiply(a, b)elif operation == 'divide':return divide(a, b)else:raise ValueError("Invalid operation!")

为这个应用程序编写集成测试:

# test_app.py
import pytest
from app import calculatedef test_calculate_add():assert calculate(1, 2, 'add') == 3def test_calculate_subtract():assert calculate(2, 1, 'subtract') == 1def test_calculate_multiply():assert calculate(2, 3, 'multiply') == 6def test_calculate_divide():assert calculate(6, 3, 'divide') == 2with pytest.raises(ValueError):calculate(1, 0, 'divide')def test_calculate_invalid_operation():with pytest.raises(ValueError):calculate(1, 2, 'invalid')

运行集成测试

同样,在命令行中,导航到包含测试文件的目录,然后运行:

pytest

Pytest会发现并运行所有测试文件中的测试。

使用Fixtures进行测试初始化和清理

Fixtures用于在测试前进行初始化操作,并在测试后进行清理。以下是一个简单的示例:

# test_math_functions_with_fixtures.py
import pytest
from math_functions import add, subtract, multiply, divide@pytest.fixture
def setup_teardown():print("Setup before test")yieldprint("Teardown after test")def test_add(setup_teardown):assert add(1, 2) == 3def test_subtract(setup_teardown):assert subtract(2, 1) == 1

高级功能

Pytest还支持许多高级功能,例如参数化测试、标记测试和并行测试。以下是一些示例:

参数化测试
@pytest.mark.parametrize("a, b, expected", [(1, 2, 3),(-1, 1, 0),(-1, -1, -2),
])
def test_add(a, b, expected):assert add(a, b) == expected
标记测试
@pytest.mark.slow
def test_slow_function():time.sleep(5)assert True

运行标记测试:

pytest -m slow
并行测试

安装 pytest-xdist

pip install pytest-xdist

使用并行测试:

pytest -n 4

通过这些示例,你可以使用Pytest进行高效的单元测试和集成测试。Pytest的灵活性和强大的功能使其成为Python测试领域的一个重要工具。

相关文章:

Python面试题:结合Python技术,如何使用Pytest进行单元测试和集成测试

使用Pytest进行单元测试和集成测试是非常常见和有效的方法。下面是如何使用Pytest进行这些测试的详细指南。 安装Pytest 首先,使用pip安装Pytest: pip install pytest单元测试 单元测试用于测试单个模块或函数的功能。假设我们有一个简单的Python模块…...

Java面试必看!知己知彼才能百战百胜,如何做好面试前的准备?

随着 Java 这个赛道的不断内卷,这两年,Java 程序员的面试,从原来的常规八股文(有 标准答案)到现在,以项目、场景问题、技术深度思考为主,逐步转变成没有标准答案, 需要大家基于自己的…...

[Vue warn]: data functions should return an object:

仔细检查你的代码肯定有一个data()内忘记方return{}了...

.net 7和core版 SignalR

.net 7和core版 SignalR代码示例(手把手一起认识Websocket、SignalR) # 白话讲解 刚听到Websocket、SignalR有没有很迷茫,一脸懵逼的那种有没有,都是通信,这俩有什么区别,都是怎么实现的,什么时候该用哪一个, 苦于Websocket、SignalR久已,今天必须整出个一二三来,…...

【人工智能】Transformers之Pipeline(三):文本转音频(text-to-audio/text-to-speech)

​​​​​​​ 一、引言 pipeline(管道)是huggingface transformers库中一种极简方式使用大模型推理的抽象,将所有大模型分为音频(Audio)、计算机视觉(Computer vision)、自然语言处理&#x…...

前端入门知识分享:HTML 页面中 head 标签之间的代码详解

前端入门知识分享:HTML 页面中 head 标签之间的代码详解 在HTML代码中HEAD之间的代码就是网页头元素,里面的内容不会显现在网页中,因此很容易被别人遗忘,但它对网页的渲染和功能性至关重要。如果能够掌握它的概念和使用方法&#…...

【Spring Boot】手撕搜索引擎项目,深度复盘在开发中的重难点和总结(长达两万6千字的干货,系好安全带,要发车了......)

目录 搜索引擎搜索引擎的核心思路 一、解析模块1.1 枚举所有文件1.2 解析每个文件的标题,URL以及正文1.2.1 解析标题1.2.2 解析URL1.2.3 解析正文 1.3 线程池优化代码 二 、创建排序模块2.1 构建正排索引2.2 构建倒排索引2.3 序列化2.4 反序列化 三、搜索模块3.1 引…...

测试面试宝典(四十二)—— 接口测试什么时候介入

回答一: 接口测试通常在项目开发的早期阶段就可以介入。一般来说,在接口定义和设计完成后,开发人员开始进行接口的初步实现时,测试人员就可以着手进行接口测试了。比如,在需求分析和评审阶段,明确了接口的功…...

【Elasticsearch】Elasticsearch的分片和副本机制

文章目录 📑前言一、分片(Shard)1.1 分片的定义1.2 分片的重要性1.3 分片的类型1.4 分片的分配 二、副本(Replica)2.1 副本的定义2.2 副本的重要性2.3 副本的分配 三、分片和副本的机制3.1 分片的创建和分配3.2 数据写…...

鸿蒙开发入门指南

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 引言 一、鸿蒙系统概述 1.1 简介 1.2 鸿蒙开发的优势 二、鸿蒙开发环境搭建 2.1 安装鸿蒙DevEco Studi…...

从分散到整合,细说比特币发展史

原文标题:《Layered Bitcoin》 撰文:Saurabh Deshpande 编译:Chris,Techub News 古往今来,货币在社会中都具有三个关键的功能:财富的储存手段、交换媒介和计量单位。虽然货币的形式在不断变化&#xff0c…...

TreeSelect增加可筛选功能

TreeSelect官方可筛选示例 <template><el-tree-selectv-model"value":data"data"filterablestyle"width: 240px"/><el-divider /><el-divider />filter node method:<el-tree-selectv-model"value":data&q…...

星环科技与宁夏银行“大数据联合实验室”揭牌,持续打造金融科技新范式

5月30-31日&#xff0c;2024向星力未来数据技术峰会期间&#xff0c;在峰会现场来宾共同见证下&#xff0c;星环科技与宁夏银行“大数据联合实验室”正式揭牌&#xff0c;宁夏银行股份有限公司首席信息官崔彦刚与星环科技副总裁邱磊共同为联合实验室揭牌。 星环科技与宁夏银行借…...

React native页面突然白屏

背景&#xff1a;某个时间段突然收到破100的用户反馈&#xff0c;商品详情&#xff08;React native页面&#xff09;打不开&#xff0c;一片空白&#xff0c;无法正常使用 设备&#xff1a;部分华为手机Harmoney4.0&#xff0c;华为相关Android系统 可临时恢复方案&#xff…...

一段直接路径读取文件LINUX C代码

最近搞个MYBATIS-PLUS里面的MAPPER DAO方法审计.就是把里面的SQL提取出来,然后使用SQL质量工具进行审计! SQLE 在这方面功能强大,就是细节不够完美,它有SCANDR工具可以把某个目录下XML文件扫描并上传到SQLE里面进行审计. 通过自由裁剪的MYSQL 审核规则,一条条SQL进行! 问题是那…...

Android让所有APK横屏显示

在Android6.0.1里面&#xff0c;Box产品的HDMI输出都是以横屏显示&#xff0c;而有些APK会申请竖屏显示&#xff0c;此时通过修改frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java文件里面的updateRotationUncheckedLocked函数的如下语句&…...

【智能制造-26】PLC标准-SICAR

什么是SICAR&#xff1f; SICAR 是西门子基于 TIA Portal 的汽车行业自动化标准。 SICAR 标准具有以下特点和优势&#xff1a; 提供了统一的硬件和软件标准&#xff0c;以及统一的接口。涵盖了从 PLC 程序、HMI 画面到特定工艺功能块&#xff08;如机器人、阀岛、视觉系统等&…...

浅学爬虫-处理复杂网页

在处理实际项目时&#xff0c;网页通常比示例页面复杂得多。我们需要应对分页、动态加载和模拟用户行为等问题。以下是一些常见的场景及其解决方案。 处理分页 许多网站将内容分成多个页面&#xff0c;称为分页。要抓取这些数据&#xff0c;需要编写一个能够遍历所有分页的爬…...

nginx反向代理严重错误[crit] (13: Permission denied) while reading upstream问题

nginx作为使用最广泛的一款反向代理软件&#xff0c;其性能也是非常优秀的&#xff0c;一般情况下&#xff0c;直接配置就可以使用&#xff0c;而且也都是稳定高效的&#xff0c;但是在实际应用中&#xff0c;对于不同的应用场景&#xff0c;总是会出现各种各样的问题&#xff…...

精通Python爬虫中的XPath:从安装到实战演示

&#x1f538; 插件安装 首先&#xff0c;我们需要安装用于处理XPath的库lxml。在命令行中运行以下命令&#xff1a; pip install lxml&#x1f539; lxml是一个强大的库&#xff0c;支持XPath查询和XML处理&#xff0c;是爬虫开发中的重要工具。 &#x1f538; DOM节点学习 …...

Unity引擎开发过的VR大场景项目网络技术,资源处理及热更新方案的报价大概多少

根据最新的市场招标数据、行业报价案例和技术方案分析&#xff0c;针对VR大场景项目的网络技术、资源处理、热更新方案三大模块的报价&#xff0c;整理如下&#xff1a;一、网络技术方案报价 网络技术方案主要解决多人在线同步、远程渲染、低延迟通信等问题。方案类型技术选型报…...

告别盲目搜索!Unity大版本升级时,系统化处理API变更的5个步骤

Unity大版本升级的系统化实践&#xff1a;从API变更管理到团队协作优化 当Unity 2023 LTS发布时&#xff0c;某中型游戏团队在升级过程中发现超过40%的脚本因API变更而报错&#xff0c;导致项目停滞两周。这种场景在技术迭代中并不罕见&#xff0c;但大多数团队仍采用"遇到…...

SemanticKITTI数据集评测:DarkNet53Seg、PointNet++等模型谁更强?附复现代码

SemanticKITTI点云语义分割实战&#xff1a;模型选型与性能优化指南 点云语义分割技术正在重塑自动驾驶、机器人导航和三维场景理解等领域的研究范式。作为该领域最具挑战性的基准之一&#xff0c;SemanticKITTI数据集凭借其大规模、高密度标注和真实场景多样性&#xff0c;已成…...

2026年上海网站建设市场分析:企业官网从展示到增长的演进路径

2026年&#xff0c;上海企业数字化服务市场迎来结构性变革。据2026年上半年上海企业数字化服务市场调研数据显示&#xff0c;上海地区企业官网新建与升级需求同比增长45%&#xff0c;中大型企业对官网的核心诉求已从基础信息展示转向AI智能赋能、全球化跨境适配、全链路营销转化…...

OpenClaw云端体验方案:Qwen3.5-9B镜像免安装调试技巧

OpenClaw云端体验方案&#xff1a;Qwen3.5-9B镜像免安装调试技巧 1. 为什么选择云端沙盒方案&#xff1f; 上周我尝试在本地笔记本部署OpenClaw时&#xff0c;遭遇了Python版本冲突、CUDA驱动不兼容等一系列问题。作为一个经常需要快速验证技术方案的开发者&#xff0c;这种环…...

Onekey:突破Steam清单管理瓶颈的全场景开源解决方案

Onekey&#xff1a;突破Steam清单管理瓶颈的全场景开源解决方案 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey 在数字游戏产业蓬勃发展的今天&#xff0c;Steam平台已成为全球最大的综合性数字…...

SaaS级AI员工系统源码商用版,多租户+计费系统+API分销,一套源码搞定

温馨提示&#xff1a;文末有资源获取方式最近“龙虾AI”的热度居高不下&#xff0c;到处都在讨论如何“养龙虾”。但观察下来发现&#xff0c;这类应用对普通用户而言技术门槛还是偏高&#xff0c;部署、配置、调试都需要专人跟进&#xff0c;最终往往沦为摆设。源码获取方式在…...

蓝桥杯嵌入式备赛:STM32G431引脚复用功能表,一张图搞定定时器与ADC配置

蓝桥杯嵌入式备赛&#xff1a;STM32G431引脚复用功能实战指南 在蓝桥杯嵌入式赛场上&#xff0c;STM32G431作为官方指定开发平台的核心控制器&#xff0c;其引脚复用功能的灵活配置往往是决定项目成败的关键。许多参赛选手在紧张激烈的比赛中&#xff0c;常常因为引脚配置错误…...

Android开发职位深度解析与面试指南

引言 Android开发作为移动应用开发的核心领域,近年来随着智能手机的普及和技术的迭代,已成为IT行业的热门职业方向。本文基于一份典型的Android开发职位描述展开,深入探讨其核心技能要求、经验门槛、工具使用等关键要素。职位描述强调了对Flutter、多线程、Framework、Andr…...

HuTool代理请求遇阻:深入解析HTTP/1.1 407 Proxy Authentication Required的成因与实战解决方案

1. 当HuTool遇上407&#xff1a;代理认证失败的典型场景 最近在项目中使用HuTool发送HTTPS请求时&#xff0c;突然遇到一个让人头疼的错误——HTTP/1.1 407 Proxy Authentication Required。这个错误就像高速公路上的收费站&#xff0c;明明已经交了通行费&#xff08;设置了代…...