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

如何从模块内部运行 Pytest

在 Python 中,pytest 是一个强大的测试框架,用于编写和运行测试用例。通常我们会在命令行中运行 pytest,但是有时你可能希望从模块或脚本的内部运行 pytest,比如为了自动化测试或集成到某个工作流程中。在这里插入图片描述

1、问题背景

当你从模块内部运行 Pytest 时,Pytest 似乎会缓存测试。对模块或测试的任何更改都会被忽略。由于在 iPad 上编写 Python,因此无法从命令行运行 Pytest,只能使用 pytest.main() 来运行测试。这个问题已经广泛搜索,但只能找到一个相似的问题,建议从命令行运行 Pytest。

2、解决方案

Pytest 不会缓存任何内容。每个 Python 解释器实例仅读取一个文件一次。虽然有一个内置的 reload,但它几乎从不做你希望它做的事情。因此,如果运行以下代码:

import pytest
...
while True:import my_nifty_appmy_nifty_app.be_nifty()pytest.main()

即使 my_nifty_app.py 在磁盘上发生更改,它也将被只读取一次。实际上需要的是类似这样的代码:

exit_code = pytest.main()
sys.exit(exit_code)

这将结束解释器的该实例,这是确保重新读取源文件唯一的方法。

代码例子:

import pytest# 定义测试函数
def test_function():assert True# 定义一个包含测试函数的模块
module = """
def test_function():assert True
"""# 从模块内部运行 Pytest
exec(module)
pytest.main()# 对模块进行更改
module = """
def test_function():assert False
"""# 再次从模块内部运行 Pytest
exec(module)
pytest.main()# 现在,测试应该失败

要从模块内部运行 pytest,可以使用 pytest.main() 方法。这是一个 Python 接口,允许你以编程方式运行测试。

步骤:

  1. 安装 pytest
    确保已安装 pytest。如果没有安装,可以通过以下命令安装:

    pip install pytest
    
  2. 从模块内部调用 pytest.main()

    通过调用 pytest.main(),你可以从 Python 脚本中运行测试。你可以传递命令行选项给 pytest.main() 来控制运行的测试文件或参数。

    示例 1:从模块内部运行 pytest

    创建一个简单的测试文件 test_sample.py,并编写测试用例:

    # test_sample.pydef test_addition():assert 1 + 1 == 2def test_subtraction():assert 2 - 1 == 1
    

    然后在另一个模块或脚本中运行 pytest.main() 来执行测试:

    # run_tests.pyimport pytestdef run_tests():# 运行所有测试pytest.main()if __name__ == "__main__":run_tests()
    

    当你运行 run_tests.py 时,它会从内部执行 pytest,并自动运行当前目录下的所有测试文件(以 test_ 开头或以 _test 结尾的文件)。

    python run_tests.py
    

    输出将显示测试结果,如同你从命令行运行 pytest 一样。

  3. 指定测试文件或目录

    你可以通过传递参数来指定要运行的测试文件或目录。例如,指定某个特定的测试文件运行:

    # run_tests.pyimport pytestdef run_tests():# 只运行指定的测试文件pytest.main(["test_sample.py"])if __name__ == "__main__":run_tests()
    
  4. 传递 pytest 选项

    pytest.main() 支持接受命令行选项作为参数。例如,如果你想启用详细模式(-v)或者只显示失败信息(--maxfail=1),可以传递这些选项。

    # run_tests.pyimport pytestdef run_tests():# 使用命令行选项运行测试:启用详细模式并设置最大失败次数pytest.main(["-v", "--maxfail=1", "test_sample.py"])if __name__ == "__main__":run_tests()
    
  5. 处理 pytest.main() 返回值

    pytest.main() 返回一个整数,表示测试运行的结果:

    • 0:所有测试都通过。
    • 1:有测试失败。
    • 2:测试执行被中断。
    • 3:内部错误。
    • 4:命令行用法错误。

    你可以根据这个返回值做进一步的处理:

    # run_tests.pyimport pytestdef run_tests():result = pytest.main(["-v", "test_sample.py"])if result == 0:print("All tests passed.")else:print(f"Tests failed with code {result}")if __name__ == "__main__":run_tests()
    

完整示例

以下是一个完整的示例,展示了如何从模块内部运行 pytest,并传递自定义参数:

# run_tests.pyimport pytestdef run_tests():# 运行测试,启用详细模式,并且指定只运行 test_sample.pyresult = pytest.main(["-v", "test_sample.py"])if result == 0:print("All tests passed.")else:print(f"Tests failed with code {result}")if __name__ == "__main__":run_tests()

其他注意事项

  • 避免递归调用:当从模块内部运行 pytest 时,要避免直接在测试文件中调用 pytest.main(),否则可能导致递归调用,因为 pytest 运行时也会加载测试文件。
  • 虚拟环境和依赖管理:确保在正确的虚拟环境中运行 pytest,以避免依赖冲突。

通过这些步骤,你可以在 Python 脚本中方便地调用和控制 pytest,从而实现自动化测试或集成测试的需求。

相关文章:

如何从模块内部运行 Pytest

在 Python 中,pytest 是一个强大的测试框架,用于编写和运行测试用例。通常我们会在命令行中运行 pytest,但是有时你可能希望从模块或脚本的内部运行 pytest,比如为了自动化测试或集成到某个工作流程中。 1、问题背景 当你从模块…...

oracle数据库---基本查询(单表查询、多表查询、子查询、分页查询、oracle内置函数、行列转换、集合运算)

思维导图 单表查询 数据准备 -- 练习的表如果存在 请先删除 -- 如果不存在直接创建 drop table t_owners;--业主表 create table t_owners (id number primary key,name varchar2(30),addressid number,housenumber varchar2(30),watermeter varchar2(30),adddate date,owner…...

web API基础

作用和分类 作用: 就是使用 JS 去操作 html 和浏览器 分类: DOM (文档对象模型)、 BOM (浏览器对象模型) 什么是DOM DOM (Document Object Model) 译为文档对象模型,是 HTML 和 XML 文档的编程接口。 HTML DOM 定义了访问和操作 …...

【C++】创建TCP服务端

实现了一个基本的 TCP 服务器&#xff0c;可以接受多个客户端连接&#xff0c;然后持续接收客户端发送的信息&#xff0c; 最后将接收到的信息再发送回客户端 。 源码 头文件&#xff08;TCPServerTest.h&#xff09; #include <iostream> #include <winsock2.h&g…...

每天练打字6:今日状况——常用字后五百击键3第2遍已完成,赛文速度93.56

今日跟打&#xff1a;763字 &#xff08;截至当前&#xff09; 总跟打&#xff1a;120408字 记录天数&#xff1a;2467天 &#xff08;实际没有这么多天&#xff0c;这个是注册账号的天数&#xff09; 平均每天&#xff1a;48字 本周目标完成进度&#xff1a; 练习常用单字后5…...

rk3568创建基于Ubuntu18.04交叉编译遇到的坑

尽管配置过rk3288&#xff0c;觉得rk3568也不会有啥问题&#xff0c;但还是掉坑了。 一、安装依赖库 安装完ubuntu后&#xff0c;先进行升级 sudo apt update sudo apt upgrade然后安装依赖库 $ sudo apt-get install repo git-core gitk git-gui gcc-arm-linux-gnueabihf u-…...

对“一个中心,三重防护”中安全管理中心的理解

安全管理中心 本控制项为网络安全等级保护标准的技术部分。本项主要包括系统管理、审计管理、安全管理和集中管控四个控制点&#xff0c;其中的集中管控可以说是重中之重&#xff0c;主要都是围绕它来展开的。 28448基本要求中安全管理中心 8.1.5 安全管理中心 8.1.5.1 系统…...

jmeter用csv data set config做参数化1

在jmeter中&#xff0c;csv data set config的作用非常强大&#xff0c;用它来做批量测试和参数化非常好用。 csv data set config的常用配置项如下&#xff1a; Variable Names处&#xff0c;写上源文件中的参数名&#xff0c;用于后续接口发送请求时引用 Ignore first line…...

软件分享 丨eSearch 截图软件

在日常的工作和学习中&#xff0c;截图是一项非常常见且重要的操作。无论是记录重要的信息、制作教程&#xff0c;还是与他人分享有趣的内容&#xff0c;一款好用的截图软件都能让我们的效率大大提高。今天&#xff0c;就给大家分享一款功能强大的截图软件 - eSearch。 一、强…...

pytorh学习笔记——cifar10(一)生成数据

CIFAR&#xff08;Canadian Institute For Advanced Research&#xff09;是一个用于图像识别研究的数据集。CIFAR数据集包含多个子数据集&#xff0c;最常用的是CIFAR-10和CIFAR-100。 CIFAR-10数据集包含60000张32x32彩色图像&#xff0c;分为10个类别&#xff0c;每…...

pikachu靶场SSRF-curl测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、实现ssrf攻击 四、源代码分析 五、结论 一、测试环境 1、系统环境 渗透机&#xff1a;本机(127.0.0.1) 靶 机&#xff1a;本机(127.0.0.1) 2、使用工具/软件 测试网址&#xff1a;…...

Java项目-基于Springboot的农机电招平台项目(源码+说明).zip

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 开发运行环境 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/…...

Systemd:简介

1号进程 Systemd是linux系统的守护进程&#xff0c;它要管理正在运行的 Linux 主机的许多方面&#xff0c;包括挂载文件系统、管理硬件、处理定时器以及启动和管理生产性主机所需的系统服务。 $ ps -u -p 1 USER PID %CPU %MEM VSZ RSS TTY STAT START TI…...

Snapshot包和Release包区别

Snapshot包和Release包区别 Snapshot包&#xff1a; 代表开发中的版本&#xff0c;可能不稳定。 经常更新&#xff0c;包含最新的功能和修复。 通常用于测试和开发阶段。 Release包&#xff1a; 代表稳定的、经过全面测试的版本。 版本号通常是固定的&#xff0c;适合生产环…...

最近网站频繁跳转到黑产网站,怀疑是51.la统计代码的问题

最近我的几个网站&#xff0c;都出现了一个问题&#xff0c;就是访问的时候会莫名其妙的跳转到黑产网站。 通过排查了网页代码&#xff0c;发现网页都有一个共同点&#xff0c;就是使用了51.la统计。为什么会怀疑是51la统计代码问题&#xff1f;因为我的网页只有统计代码外没有…...

【python_修改PPT中字体,run.font.name只对英文生效怎么办?】

python_修改PPT中字体&#xff0c;run.font.name只对英文生效怎么办&#xff1f; 参考&#xff1a;使用pptx_ea_font库设置中文字体 from pptx import Presentation from pptx.util import Pt from pptx_ea_font import set_font# 打开现有的 PPT 文件 prs Presentation(D:\…...

【web】JDBC

项目连接数据库 右侧导航栏找到databsae 如果没有驱动&#xff0c;先下载驱动 填写数据库用户名密码 勾选对应的表即可 JDBC代码流程 1,配置信息 2,加载驱动 从MySQL Connector/J 5.1版本开始&#xff0c;推荐使用com.mysql.cj.jdbc.Driver这个新的驱动类。 3,链接数据库…...

MATLAB代码介绍:一段轨迹的指纹定位,KNN,三维,四个锚点(附源代码,可复制粘贴)

文章目录 产品介绍:三维指纹定位 KNN MATLAB 模型概述源代码运行结果功能亮点代码结构应用场景结论产品介绍:三维指纹定位 KNN MATLAB 模型 概述 本 MATLAB 代码实现了一种基于 KNN(K-Nearest Neighbors)算法的三维指纹定位系统,利用四个基站(锚点)信号强度进行移动终…...

XML Schema 复合空元素

XML Schema 复合空元素 XML Schema 是一种用于定义 XML 文档结构和内容的语言。在 XML Schema 中&#xff0c;元素可以被定义为简单类型或复杂类型。简单类型元素不能包含其他元素或属性&#xff0c;而复杂类型元素可以包含其他元素、属性或两者都有。复合空元素是一种特殊类型…...

Java面向对象编程基础(二)

Java面向对象编程基础二 一、package与import关键字的使用1.说明2.包的作用3.JDK中主要的包4. import5.import关键字的使用 二、封装性1.为什么要封装&#xff1f;2.如何封装?3.作用4.权限修饰符的权限大小5.案例 三、构造器1 构造器的使用说明2 案例: 四、实例变量赋值过程1 …...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...