自动化测试---pytest

pytest是一个非常流行且高效的Python测试框架,它提供了丰富的功能和灵活的用法,使得编写和运行测试用例变得简单而高效。

一、为什么选择pytest

①简单易用:pytest的语法简洁清晰,对于编写测试用例非常友好,几乎可以在几分钟内上手。

②强大的断言库:pytest内置了丰富的断言库,可以轻松的进行测试结果的判断。

③支持参数化测试:pytest支持参数化测试,允许使用不同的参数多次运行同一个测试函数,这大大提高了测试效率。

④丰富的插件生态系统:pytest有着丰富的插件生态系统,可以通过插件扩展各种功能,比如覆盖率测试、测试报告生成、失败用例重复执行等。此外,pytest还支持与selenium、requests、appinum等结合,实现web自动化、接口自动化、App自动化测试。

⑤灵活的测试控制:pytest允许跳过哦指定用例,或对某些预期失败的case标记成失败,并支持重复执行失败的case。

二、安装

python 复制代码
pip install pytest

三、用例运行规则

1.文件名必须以test_k开头或者以_test结尾

2.测试类必须以Test开头,并且不能右__init__方法

3.测试方法必须以test开头。

满足上述要求后,可以通过命令行参数pytest直接运行符合条件的用例。

由上述测试用例和测试结果可以得出补充结论:

①测试方法硬性要求以test(区分大小写)为开头

②文件名不区分大小写

③文件名必须以"test_"开头或者"test"结尾,注意''是必须的,不能丢

由上图测试结果可以验证:

①测试类必须以Test(区分大小写)开头

②测试类不能有__init__方法

四、pytest命令参数

①pytest:在当前目录及其字目录中搜索并运行

②pytest -v:增加输出的详细程度

③pytest -s:显示测试中的print语句

④pytest test_module.py:运行指定的测试模块

⑤pytest test_dir/:运行指定目录下的所有测试

五、pytest配置文件

在当前目录下创建pytest.ini文件,该文件为pytest的配置文件

①addopts:指定在命令行中默认包含的选项(-v -s)

②testpaths:指定pytest手机测试用例时的目录

③python_files:手动指定文件命名规则

④python_classes:手动指定类名命名规则

⑤python_functions:手动指定方法命名规则

⑥norecursedirs:指定在搜索测试时应避免递归进入目录的模式

⑦markers:定义测试标记,用于标记测试用例

注意:配置文件必须放在根目录中才能生效,不能放在子目录里!

六、前后置

使用pytest框架,测试类中不可以添加init方法,如何进行数据的初始化?

在测试框架中,前后置是指在执行测试用例前和测试用例后执行一些额外的操作,这些操作可以用于设置测试环境、准备测试数据等,以确保测试的可靠性

pytest框架提供三种方法做前后置的操作:

①setupmethod:测试类中的每个测试方法的前置操作

②teardown_method:测试类中的每个测试方法的后置操作

效果展示:

每个方法执行前后都会调用前置和后置操作

③setup_class:整个测试类的前置操作

④teardown_class:整个测试类的后置操作。

效果展示

只在类开始和类结束调用

七、断言

断言时一种调试辅助工具,用于检查程序的状态是否符合预期,如果断言失败,python解释器会抛出一个AssertionError异常。断言通常用于检测程序中的逻辑错误。

pytest允许你在python测试中使用标准的Python assert语句来验证预期和值

python 复制代码
assert 条件, 错误信息

条件:必须是一个布尔表达式

错误信息:当条件为假时显示的错误信息,可选。

八、参数化

参数化设计时自动化设计中的一个重要组成部分,它通过定义设计参数和规则,使得设计过程更加灵活和可控。pytest中内置的pytest.mark.parametrize装饰器允许对测试函数的参数进行参数化。
那么参数化具体要解决什么样的问题呢?

python 复制代码
def test_01(username):
    print(f"{username} step1")
    print(f"{username} step2")

在上面这段代码中,要想确保username是变化的,就要对其进行输入,但是自动化测试是不能输入的,所以我们引入了参数化这个概念,那么参数化具体是怎么操作的呢?

pytest自动为每一位成员调用一次

那么如果想要为多个测试方法都调用呢?

我们只需要在每一个测试方法上方使用parametrize就行了。

但是我如果很多方法都要使用相同的参数化,是不是很麻烦?

方法如下:

这样就可以只写一次重复调用啦!

九、fixture

pytest中fixture是一种强大的机制,用于提供测试函数所需的资源或上下文。它可以用于设置测试环境、准备数据等。

1.基本使用

只需要将init写入测试方法的参数列表中就可以在测试开始前自动调用init函数。

当方法比较多的时候,想让哪个进行初始化就写,不想就不写,比前后置灵活了许多。

使用案例:

2.嵌套使用

一个示例:果汁加工到引用

3.请求多个fixture

4.yeild

如何使用fixture执行后置操作?

使用yeild,yeild前边的语句在方法执行前运行,在yeild后边的语句在方法执行完运行


yield类似于返回值,在yield后边写一个值,在方法中,调用fixture就能接收到这个返回值了

下边的例子是打开文件并读取的操作,读取完毕自动关闭

5.带参数的fixture

python 复制代码
pytest.fixture(scope='', params='', autouse='', ids='', name='')

参数:

①scope(范围):参数决定了fixture的工作范围,决定了fixture的生命周期,可选值有:

  • function(默认):每个测试函数都会调用fixture
  • class:在同一个类中共享这个fixture
  • module:在同一个测试模块中共享这个fixture(一个文件)
  • session:整个测试会话中共享这个fixture

②autouse:默认为False,即当前fixture需要手动显示调用,如果设置为True,fixture会在所以测试函数执行前自动调用,无论这些测试函数是否显示引用了fixture

③params:用于参数化fixture,支持以列表的形式传入,每个参数都会使fixture执行一次,类似于范围for。

注意:使用params的函数必须携带参数request且必须写成request

十、指定用例执行顺序

在pytest中,文件间默认执行顺序是按照文件的名称执行的,文件内是按照行的先后顺序执行的。

那么如果我们想要指定执行顺序怎么操作?

引入插件---pytest-order。

复制代码
pip install pytest-order==1.3.0

使用方法:

按照顺序执行。

感谢观看

相关推荐
鲜于言悠9051 天前
博客系统测试报告
python·功能测试·selenium·jmeter·测试用例·集成测试·pytest
0和1的舞者2 天前
高并发论坛系统:单元测试 + 接口自动化 + 性能测试 + CI/CD 全链路测试报告
java·测试开发·测试工具·jmeter·pytest·测试·测试报告
独断万古他化2 天前
Python+Pytest 搭建博客系统接口自动化测试框架(全用例执行+完整代码)
pytest·接口自动化·测试·allure·requests
王夏奇2 天前
python-pytest学习
python·学习·pytest
独断万古他化3 天前
Python 接口测试之 requests 库核心用法
python·pytest·接口测试·requests
姚青&3 天前
Pytest 测试用例生命周期管理-fixture
测试用例·pytest
姚青&17 天前
PyCharm 配置与界面化运行
pytest
姚青&17 天前
Pytest 测试用例断言
测试用例·pytest
姚青&17 天前
Pytest 命名规则
pytest