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

【大模型问答测试】大模型问答测试脚本实现(第二版)——接入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.lryc.cn/news/461534.html

相关文章:

  • Windows模拟电脑假死之键盘鼠标无响应
  • 一文详解线程池
  • 网际报文协议ICMP及ICMP重定向实例详解2
  • CSS 总结
  • C语言_指针_进阶
  • chat_gpt回答:python使用writearray写tiff速度太慢,有什么快速的方法吗
  • 【时时三省】(C语言基础)函数介绍strcat
  • ESP32C3 开发板在Linux环境下,进行JTAG 调试演示-启明云端乐鑫代理商
  • 《计算机视觉》—— 基于PyCharm中的dlib库实现人脸关键点定位
  • c++习题34-说谎
  • 如何使用Android Profiler进行性能分析?
  • 整理—MySQL
  • 临时配置linux Bridge网桥
  • 【Canvas与化学】铁元素图标
  • list转map常用方法
  • C++容器适配器的模拟实现-stack、queue、priority_queue
  • fastapi的docs页面是空白解决
  • 浙大数据结构:11-散列4 Hashing - Hard Version
  • pm2 守护http-server
  • 国外电商系统开发-运维系统应用管理
  • 剖析线程池实现原理
  • 【中危】Oracle TNS Listener SID 可以被猜测
  • 三维测量与建模笔记 - 简介
  • Glide 简易教程
  • flutter 使用三方/自家字体
  • 2024台州赛CTFwp
  • 词根plac-和place、please
  • ubuntu下route命令详解
  • 13.java面向对象:面向对象的三大特征
  • 【VUE】Vue中的内置组件