pytest核心用法

Pytest自动化测试框架介绍

1.pytest框架介绍
Pytest是使用Python基于unittest开发的一款功能强大的单元测试框架。Pytest灵活简单,支持参数化,不仅可以支持简单的单元测试和复杂的功能测试,还可以用来做UI自动化测试、接口自动化测试。相比于其他的测试框架,pytest有以下几个优点:
(1)简单灵活,易于上手
(2)提供丰富的第三方插件,如pytest-html、pytest-selenium、pytest-rerunfailures等,可以通过这些插件实现各种功能,并支持自定义扩展。
(3)支持用例参数化,大大减少了测试脚本的代码量。
(4)执行测试过程中可以将某些用例标记跳过或失败
(5)可与Jenkins、allure工具集成

2.环境搭建
2.1 安装python,配置环境变量
下载地址:https://www.python.org/downloads/下载需要的版本(3.7以上)
在这里插入图片描述

2.2安装pycharm
下载地址:http://www.jetbrains.com/pycharm/download/

打开工程目录后,在Settings中添加解释器
在这里插入图片描述

2.3 JDK下载,配置环境变量(allure依赖JDK)

2.4 安装依赖的python库
安装pytest库,直接在终端输入pip install命令安装即可:
设置pip下载资源地址: pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
或者CD 到对应工程目录下:
安装requirements.txt依赖:pip install -r requirements.txt
Pytest常用插件:pytest-html、pytest-selenium、pytest-rerunfailures等

2.5 allure下载和配置环境变量
下载地址: https://github.com/allure-framework/allure2/releases,下载完解压即可使用。
检查是否配置成功
在这里插入图片描述

3.Pytest框架使用
3.1自动化用例编写规则
pytest执行自动化测试用例时,pytest会自动递归遍历执行路径下的所有目录,并根据默认的用例识别规则自动收集测试用例。因此,我们需要按照pytest的命名规范编写脚本,其规则如下:
(1)用例文件名需要以test_.py或_test.py格式命名。
(2)测试类以Test开头,测试文件中每个Test开头的类都是一个测试用例类。
(3)测试函数以test开头,测试文件中每个test开头的方法就是一条测试用例。

3.2parametrize参数化
在Pytest中,参数化是自动化测试中很常用的一种用法。在设计测试用例时,通常会遇到一些场景相似但测试数据不同的情况,这时可以引入参数化的思想。Pytest提供了“@pytest.mark.parametrize()”方法来对测试用例进行参数化,该方法适用于测试步骤相同但测试数据和预期结果不同的用例。只需要在测试用例声明中添加“@pytest.mark.parametrize(“variable_name”,[“value”])”, 即可对该用例进行参数化。如果有多个参数例,则需要使用元组来存放值,每个元组对应一组参数的值。在执行时,Pytest会依次执行每一组参数,参数化可以大大减少代码量,并且使测试用例更直观易懂。

代码示例:
在这里插入图片描述

3.3fixture夹具
fixture是pytest中常用的一个方法,可以通过它将测试过程中的一些重复场景独立出来,通常用于测试用例执行前的准备工作和测试结束时的收尾工作。使用装饰器“@pytest.fixture(scope=“”)”将函数定义为一个fixture,可以通过参数scope来控制fixture的作用范围,默认值是“function”。
Scope参数 作用范围
function 函数级别范围
class 类级别范围
module 模块级别范围
session 会话级别范围

在fixture函数内,可以使用“yield”关键字来分隔准备工作代码和收尾工作代码,yield前的代码可以视为前置条件;yield后的代码可以视为后置条件。这样可以将准备工作和收尾工作的代码从整个测试流程中独立出来,在编写测试脚本时无需将这部分代码重复嵌入到测试用例中。
在完成fixture函数后,我们还需要通过pytest中的“@pytest.mark.usefixture(a)”方法来调用fixture函数。其中,括号中的a对应fixture方法的函数名,我们需要在测试类声明中添加“@pytest.mark.usefixture(fixture_name)”装饰器,这样测试类下面的所有测试用例都会调用该fixture函数。
代码示例:
在这里插入图片描述

3.4钩子函数
pytest钩子函数是用来扩展pytest框架的一种机制。它允许你在测试执行的不同阶段注入自定义的行为。钩子函数是以特定的命名约定定义的函数,当满足条件时会被pytest自动调用。pytest钩子函数可以用于各种不同的目的,比如在测试开始之前做一些准备工作或者在测试结束之后执行一些清理操作。你可以使用钩子函数来修改测试报告、收集测试结果、自定义断言行为等等。

pytest 钩子函数的执行顺序如下:
(1)pytest_configure(config): 在 pytest 运行之前调用,用于进行一些全局的初始化操作。
(2)pytest_sessionstart(session): 在整个测试会话开始之前调用,可以在这里执行一些会话级别的准备工作。
(3)pytest_collection_modifyitems(config, items): 在测试用例收集完成后调用,可以对收集到的测试用例进行修改或重新排序。
(4)pytest_itemcollected(item): 在每个测试用例被收集后调用,可以在这里对每个测试用例进行一些额外的操作。
(5)pytest_collection_finish(session): 在所有测试用例收集完成后调用,可以在这里执行一些收集阶段的清理工作。
(6)pytest_generate_tests(metafunc): 在每个测试函数生成测试参数时调用,可以根据需要动态生成测试参数。
(7)pytest_runtest_protocol(item, nextitem): 在每个测试用例执行之前和之后调用,可以在这里添加额外的测试控制逻辑。
(8)pytest_runtest_setup(item): 在每个测试用例执行 setup 阶段之前调用。
(9)pytest_runtest_call(item): 在每个测试用例执行 call 阶段时调用。
(10)pytest_runtest_teardown(item, nextitem): 在每个测试用例执行 teardown 阶段之后调用。
(11)pytest_sessionfinish(session, exitstatus): 在整个测试会话结束后调用,可以在这里执行一些会话级别的清理工作。

4.框架基本结构
4.1项目基本结构
在这里插入图片描述

base:测试基础类和基础方法
config:存放一些全局配置参数
result:测试报告存放目录
testcase:测试用例集
conftest:pytest中共享和管理fixtures和扩展功能
pytest.ini:pytest配置文件
requirements:存放python依赖库

4.2conftest文件
pytest的conftest.py文件是一个特殊的Python模块,用于在pytest测试框架中共享和管理fixtures(测试资源)和插件(扩展功能)。conftest.py文件可以存在于测试目录的根目录下,也可以存在于子目录中,它们的作用范围是从定义该文件的目录开始,一直延伸到其子目录。通过在conftest.py文件中定义fixtures,可以在多个测试模块中共享这些fixtures。fixtures可以提供一些测试所需的数据、对象或设置,例如数据库连接、HTTP请求会话等。同时,conftest.py文件也可以用来注册自定义插件或对pytest进行配置。
当pytest执行测试时,会自动查找测试目录及其子目录下的conftest.py文件,并根据其中定义的fixtures和插件进行加载和应用。这样,就可以灵活地管理和共享测试资源和功能。

4.3pytest.ini 配置文件
pytest.ini是Pytest测试框架的配置文件,用于定义和配置测试运行的参数和选项。在该文件中,可以设置测试过程中的各种选项,例如测试路径、测试过滤器、测试报告输出等。通过编辑pytest.ini文件,可以自定义和优化测试运行的行为和结果。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值