【大模型问答测试】大模型问答测试脚本实现(第二版)——接入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。

例如:

python 复制代码
  @pytest.fixture
   def setup_data():
       return [1, 2, 3]

在测试函数中,可以将 Fixture 作为参数传入,以使用其提供的资源。

例如:def test_function(setup_data):,在这个测试函数中,可以使用 setup_data 参数来访问 Fixture 提供的数据。

六、参数化测试

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

例如:

python 复制代码
```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刚好又支持这种用法,因此也算是一拍即合

相关推荐
努力搬砖的咸鱼17 小时前
从零开始搭建 Pytest 测试框架(Python 3.8 + PyCharm 版)
python·pycharm·pytest
FINE!(正在努力!)3 天前
PyTest框架学习
学习·pytest
程序员杰哥3 天前
接口自动化测试之pytest 运行方式及前置后置封装
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·pytest
测试老哥3 天前
Pytest+Selenium UI自动化测试实战实例
自动化测试·软件测试·python·selenium·测试工具·ui·pytest
水银嘻嘻4 天前
07 APP 自动化- appium+pytest+allure框架封装
python·appium·自动化·pytest
天才测试猿4 天前
接口自动化测试之pytest接口关联框架封装
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·pytest
not coder5 天前
Pytest Fixture 详解
数据库·pytest
not coder5 天前
pytest 常见问题解答 (FAQ)
开发语言·python·pytest
程序员的世界你不懂5 天前
(1)pytest简介和环境准备
pytest
not coder6 天前
Pytest Fixture 是什么?
数据库·oracle·pytest