【大模型问答测试】大模型问答测试脚本实现(第二版)——接入pytest与代码解耦

背景

接上一篇,【大模型问答测试】大模型问答测试脚本实现(第一版)。
在实现自动化的时候,原先把很多方法与request请求写在一块了,趁着目前实现接口数量较少,决定对代码进行解耦,并且清晰目录结构,顺便接入pytest,为后续实现excel/yaml文件驱动以及接入allure测试报告做准备。

代码解耦

从git重新拉了一个分支,这样就确保不会影响到原来的代码,也便于代码的回滚
在这里插入图片描述
设计逻辑:将原先问答模块的代码拆分,拆分为发送request的模块以及相应的功能方法模块,便于后期进行维护与扩展
在这里插入图片描述

接入pytest

原先发送请求的模块暂调整为testCase里面,src核心代码模块先保留,后期设计发送各种请求模块,例如get与post请求,操作mysql模块以及数据驱动模块等等。

根据pytest的使用逻辑,进行接入pytest,pytest使用规则如下:

pytest使用规则

一、测试函数命名规则
测试函数必须以 test_ 开头。
例如:def test_addition():。只有以 test_ 开头的函数才会被 pytest 自动识别为测试函数并执行。

二、测试类命名规则
测试类必须以 Test 开头。
例如:class TestMyClass:。
测试类中的方法也需要遵循测试函数的命名规则,即以 test_ 开头,才能被识别为测试方法。

三、断言的使用
使用 assert 语句进行断言。
例如:assert result == expected,用于验证实际结果与预期结果是否一致。
如果断言失败,pytest 将报告详细的错误信息,包括失败的断言语句和实际值与预期值的差异。

四、命令行参数
运行测试时,可以使用各种命令行参数来控制测试的执行。
-v(或 --verbose):详细模式,显示更多的测试执行信息。
-s:允许测试中的标准输出(如 print 语句的输出)显示在终端上。
-k EXPRESSION:根据关键字表达式运行特定的测试。例如,pytest -k “addition” 将只运行名称中包含 “addition” 的测试。
-x:一旦遇到第一个失败的测试就停止运行。
–maxfail=N:在遇到 N 个失败的测试后停止运行。

五、Fixture 的使用
Fixture 是 pytest 中用于提供测试所需的资源或设置测试环境的机制。
使用 @pytest.fixture 装饰器定义 Fixture。
例如:

  @pytest.fixturedef setup_data():return [1, 2, 3]

在测试函数中,可以将 Fixture 作为参数传入,以使用其提供的资源。
例如:def test_function(setup_data):,在这个测试函数中,可以使用 setup_data 参数来访问 Fixture 提供的数据。

六、参数化测试
使用 @pytest.mark.parametrize 装饰器可以实现参数化测试。
例如:

```python@pytest.mark.parametrize("input1, input2, expected", [(1, 2, 3),(4, 5, 9),(6, 7, 13)])def test_addition(input1, input2, expected):assert input1 + input2 == expected

这个测试函数将被多次执行,每次使用不同的参数组合。

七、测试用例组织
可以将相关的测试函数组织在同一个测试类中,或者将不同功能的测试放在不同的测试文件中。这有助于提高测试的可读性和可维护性。

八、跳过和标记测试
使用 @pytest.mark.skip 装饰器可以跳过某个测试。
例如:@pytest.mark.skip(reason=“测试功能尚未实现”)。
使用 @pytest.mark.xfail 装饰器标记一个预期会失败的测试。
当这个测试失败时,pytest 将报告它为 “预期失败”,而不是普通的失败。

九、插件的使用
pytest 有很多插件可以扩展其功能。
例如,pytest-html 插件可以生成 HTML 格式的测试报告。
安装插件后,可以在命令行中使用相应的参数来启用插件的功能。

十、配置文件
pytest 可以使用 pytest.ini 配置文件来设置一些全局的配置选项。
例如,可以在配置文件中设置测试的搜索路径、命令行参数的默认值等。


根据上面pytest规则的介绍,因此我们需要改动目录命名与类与方法的命名:

在这里插入图片描述

最后进行验证,代码正常执行
在这里插入图片描述

思考

其实接入pytest也是为后续使用Jenkins做CICD做准备,因为在配置cicd的时候,需要使用到一个启动的命令行,也就是需要进行配置,而pytest刚好又支持这种用法,因此也算是一拍即合

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

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

相关文章

大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

[论文阅读]RGB-Depth Fusion GAN for Indoor Depth Completion

摘要 由于固有的限制,如无法感知透明物体和有限的距离范围,室内深度传感器捕获的原始深度图像通常会有大面积的深度值缺失。这种不完整的深度图给许多后续视觉任务带来了负担,尽管提出了很多深度补全方法来缓解这一问题。但是现有的大多数方…

解决k8s集群中安装ks3.4.1开启日志失败问题

问题 安装kubesphere v3.4.1时,开启了日志功能,部署时有三个pod报错了 Failed to pull image “busybox:latest”: rpc error: code Unknown desc failed to pull and unpack image “docker.io/library/busybox:latest”: failed to copy: httpRead…

字节跳动青训营——入营考核解答(持续更新中~~~)

考核内容: 在指定的题库中自主选择不少于 15 道算法题并完成解题,其中题目难度分配如下: 简单题不少于 10 道中等题不少于 4 道困难题不少于 1 道 解答代码 16.DNA 序列还原 (简单) 代码实现: public…

零基础Java第八期:一维数组(1)

目录 一、 一维数组的基本概念 1.1. 什么是数组 1.2. 数组的创建及初始化 1.3. 数组的使用 二、数组是引用类型 2.1. 初始JVM的内存分布 2.2. 基本类型变量与引用类型变量 2.3. 引用变量的理解 2.4. null 三、数组的应用场景 3.1. 作为函数的参数 3.2. 作为函数的返…

2024台州赛CTFwp

备注: 解题过程中,关键步骤不可省略,不可含糊其辞、一笔带过。解题过程中如是自己编写的脚本,不可省略,不可截图(代码字体可以调小;而如果代码太长,则贴关键代码函数)。…

【HarmonyOS NEXT】服务端向终端推送消息——获取Push Token

【需求】 获取Push Token 【文档】 https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/push-get-token-V5 【代码】 // EntryAbility.ets 文件 import { pushService } from kit.PushKit; export default class EntryAbility extends UIAbility {onCreat…

第T7周:咖啡豆识别

>- **🍨 本文为[🔗365天深度学习训练营](https://mp.weixin.qq.com/s/0dvHCaOoFnW8SCp3JpzKxg) 中的学习记录博客** >- **🍖 原作者:[K同学啊](https://mtyjkh.blog.csdn.net/)**难度:夯实基础⭐⭐语言&#xff…

Qt5.14.2 安装详细教程(图文版)

Qt 是一个跨平台的 C 应用程序开发框架,主要用于开发图形用户界面(GUI)程序,但也支持非 GUI 程序的开发。Qt 提供了丰富的功能库和工具,使开发者能够在不同平台上编写、编译和运行应用程序,而无需修改代码。…

如何通过CDN优化网站服务器访问速度?

CDN,即内容分发网络(Content Delivery Network),在现代互联网中起着重要作用。它可以显著提升网站服务器的访问速度。以下是CDN在加速网站访问方面的主要优势及其工作原理。 1. 全球分布的服务器节点 CDN通过在全球范围内布设多个…

CANoe与C#联合仿真方案

引言 CANoe作为一款强大的网络仿真工具,能够模拟各种通信协议,尤其是在汽车领域的CAN、LIN、Ethernet等协议。而C#作为一种广泛使用的编程语言,能够为CANoe提供灵活的用户界面和逻辑控制。本文将探讨如何将CANoe与C#结合,实现高效的联合仿真方案。 1. 系统架构 联合仿真…

Python学习的自我理解和想法(16)

学的是b站的课程(千锋教育),跟老师写程序,不是自创的代码! 今天是学Python的第16天,从今天开始,每天一到两个常用模块,更完恢复到原来的。开学了,时间不多,写…

Bug:通过反射修改@Autowired注入Bean的字段,明确存在,报错 NoSuchFieldException

【BUG】通过Autowired注入了一个Bean SeqNo,测试的时候需要修改其中的字段。通过传统的反射,无论如何都拿不到信息,关键是一方面可以通过IDEA跳转,一方面debug也确实能看到这个字段。但是每次调用set方法报错:NoSuchFi…

Nuxt.js 应用中的 app:templatesGenerated 事件钩子详解

title: Nuxt.js 应用中的 app:templatesGenerated 事件钩子详解 date: 2024/10/19 updated: 2024/10/19 author: cmdragon excerpt: app:templatesGenerated 是 Nuxt.js 的一个生命周期钩子,在模板编译到虚拟文件系统(Virtual File System, VFS)之后被调用。这个钩子允许…

【数据分享】1901-2023年我国省市县三级逐月最低气温(免费获取/Shp/Excel格式)

之前我们分享过1901-2023年1km分辨率逐月最低气温栅格数据(可查看之前的文章获悉详情),该数据来源于国家青藏高原科学数据中心,很多小伙伴拿到数据后反馈栅格数据不太方便使用,问我们能不能把数据处理为更方便使用的Sh…

Android15之解决gdb:Remote register badly formatted问题(二百三十六)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【…

C++临时变量的常量性

C 临时变量的常量性-CSDN博客 #include <iostream> using namespace std; void print(string& str) {cout << str << endl; }int main() {print("hello world");//print(string("hello world"));return 0; }编译器根据字符串"…

探索 Coconut: Python 的新篇章

文章目录 探索 Coconut: Python 的新篇章背景&#xff1a;为何选择 Coconut&#xff1f;Coconut 是什么&#xff1f;如何安装 Coconut&#xff1f;简单的库函数使用方法1. 惰性列表2. 模式匹配3. 函数组合4. 协程5. 模式匹配数据类型 场景应用1. Web 开发2. 数据处理3. 异步编程…

【C++】类的默认成员函数:深入剖析与应用(下)

&#x1f4af;前言 回顾上篇文章&#x1f449;【C】类的默认成员函数&#xff1a;深入剖析与应用&#xff08;上&#xff09;中对构造函数、拷贝构造函数和析构函数的讨论&#xff0c;强调这些默认成员函数在类的创建、初始化和销毁过程中的重要性。 ✍引出本篇将继续探讨剩余…

【工具变量】A股上市企业大数据应用(2001-2023年)-参考柏淑嫄实践

数据简介&#xff1a;企业数字化转型的浪潮孕育出大数据&#xff0c;大数据技术是在数据处理和应用中释放大数据多元价值的必要手段。大数据作为企业发展的战略资源和生产要素对企业转型发展具有重要意义。对上市企业大数据应用程度进行测算不仅有助于了解大数据相关技术在企业…