手把手带你打造一个Pytest数据分离测试框架

 更新时间:2024年03月25日 17:02:25   作者:旦莫  
数据分离测试框架是一种测试框架设计模式,旨在将测试数据与测试逻辑分离,以提高测试用例的可维护性、可读性和复用性,本文就来实现一下,感兴趣的可以了解一下

数据分离测试框架是一种测试框架设计模式,旨在将测试数据与测试逻辑分离,以提高测试用例的可维护性、可读性和复用性。这种框架通常用于自动化测试,特别是在接口测试、UI 测试和集成测试中非常有用。

在数据分离测试框架中,测试数据通常存储在外部文件(如 Excel、CSV、JSON 等)中,而测试逻辑则编写在测试用例中。通过将测试数据与测试逻辑分开,可以实现以下优势:

  • 易维护性:测试数据的变化不会影响测试逻辑,反之亦然。当测试数据需要更新时,只需修改数据文件而不必修改测试用例代码。

  • 可读性:测试用例更加清晰易读,因为数据被独立出来并以结构化的方式存储在外部文件中。

  • 复用性:可以重复使用相同的测试逻辑,只需提供不同的测试数据即可运行多个测试场景。

  • 扩展性:随着测试需求的增加,可以很容易地添加新的测试数据文件,而无需改动现有的测试用例。

  • 灵活性:可以使用不同类型的数据文件进行数据分离,根据具体需求选择最适合的数据存储格式。

数据分离测试框架通常包括数据读取工具、测试逻辑编写、日志记录和报告生成等功能。通过有效地组织和管理测试数据,测试团队可以更高效地执行测试,并快速准确地识别潜在的问题。

开发一个复杂的数据驱动测试框架涉及到多个方面,包括数据读取、日志记录、邮件发送、配置文件使用以及清晰的代码目录结构等。让我们一步一步来完成这个任务。

1.创建项目目录结构

首先,创建一个新的项目目录结构,并包含以下子目录和文件:

data_driven_testing_framework/
    ├── configs/
    │   └── config.ini
    ├── data/
    │   └── test_data.xlsx
    ├── logs/
    ├── tests/
    │   ├── __init__.py
    │   └── test_sample.py
    ├── utils/
    │   ├── __init__.py
    │   ├── excel_reader.py
    │   ├── logger.py
    │   ├── mailer.py
    └── pytest.ini

2.安装所需库

确保安装所需的库:

pip install pytest openpyxl configparser logging yagmail

3.编写配置文件

在 configs/config.ini 中定义配置参数:

[EMAIL]
email_address = your_email@example.com
email_password = your_email_password

[LOGGING]
log_file = logs/test.log

4. 编写工具类

在 utils/excel_reader.py 中编写 Excel 数据读取工具类:

import openpyxl

class ExcelReader:
    @staticmethod
    def read_data(file_path):
        wb = openpyxl.load_workbook(file_path)
        sheet = wb.active
        data = []
        for row in sheet.iter_rows(min_row=2, values_only=True):
            data.append(row)
        return data

在 utils/logger.py 中编写日志记录工具类:

import logging
import configparser

config = configparser.ConfigParser()
config.read('configs/config.ini')

log_file = config['LOGGING']['log_file']

logging.basicConfig(filename=log_file, level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

在 utils/mailer.py 中编写发送邮件工具类:

import yagmail
import configparser

config = configparser.ConfigParser()
config.read('configs/config.ini')

email_address = config['EMAIL']['email_address']
email_password = config['EMAIL']['email_password']

class Mailer:
    @staticmethod
    def send_email(subject, contents):
        yag = yagmail.SMTP(email_address, email_password)
        yag.send(to=email_address, subject=subject, contents=contents)

5.编写测试用例

在 tests/test_sample.py 中编写测试用例:

import pytest
from utils.excel_reader import ExcelReader
from utils.logger import logging
from utils.mailer import Mailer

test_data_file = 'data/test_data.xlsx'

@pytest.mark.parametrize("data", ExcelReader.read_data(test_data_file))
def test_data_driven(data):
    logging.info(f"Running test with data: {data}")
    # Your test logic here

    assert True

def test_send_email():
    Mailer.send_email("Test Email", "This is a test email sent from the data-driven testing framework")

6.运行测试

现在你可以使用 Pytest 来运行测试。在命令行中执行以下命令:

pytest -v

7.实际使用示例

在接口测试中,你可以使用这个框架来执行数据驱动测试。例如,你可以从 Excel 文件中读取测试数据,然后在测试用例中使用这些数据来调用接口,并断言结果是否符合预期。

7.1准备测试数据

首先,准备一个 Excel 文件,例如 test_data.xlsx,其中包含了不同的测试数据。假设我们要测试一个登录接口,测试数据文件内容如下:

UsernamePassword
user1password1
user2password2
user3password3

7.2编写测试用例

在 tests/test_sample.py 中编写测试用例,使用数据驱动的方式来运行测试:

import pytest
from utils.excel_reader import ExcelReader
from utils.logger import logging
from utils.mailer import Mailer
from your_api_client_module import APIClient  # 导入你的 API 客户端模块

test_data_file = 'data/test_data.xlsx'

@pytest.mark.parametrize("username, password", ExcelReader.read_data(test_data_file))
def test_login_api(username, password):
    logging.info(f"Running test with data: Username - {username}, Password - {password}")

    # 使用测试数据调用登录接口
    api_client = APIClient()
    response = api_client.login(username, password)

    # 断言登录结果是否符合预期
    assert response.status_code == 200
    assert 'token' in response.json()

def test_send_email():
    Mailer.send_email("Test Email", "This is a test email sent from the data-driven testing framework")

在上面的示例中,我们使用 @pytest.mark.parametrize 注解来指定参数化测试数据,并在测试用例中使用这些数据来调用登录接口。通过这种方式,你可以轻松地对不同的输入数据进行测试,而无需为每组数据编写单独的测试用例。

到此这篇关于手把手带你打造一个Pytest数据分离测试框架的文章就介绍到这了,更多相关Pytest数据分离测试内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 用Python快速读取Excel数据

    用Python快速读取Excel数据

    嘿,想学会用Python快速读取Excel数据吗?不用担心,这个指南将带你轻松掌握这项技能,让我们一起开始吧!
    2023-12-12
  • Yolov5多边形标签和JSON数据格式转换

    Yolov5多边形标签和JSON数据格式转换

    通过labelme对图进行标注后,得到的是json文件,而Yolov5对数据进行模型构建的时候,读取需要的是txt格式的文件。所以需要先通过Python进行文件格式的转换,需要的朋友可以参考下
    2023-05-05
  • Python演化计算基准函数详解

    Python演化计算基准函数详解

    这篇文章主要介绍了Python演化计算基准函数,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧,希望能够给你带来帮助
    2021-10-10
  • python定时任务schedule库用法详细讲解

    python定时任务schedule库用法详细讲解

    python中有一个轻量级的定时任务调度的库schedule,下面这篇文章主要给大家介绍了关于python定时任务schedule库用法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • Flask运用Xterm实现交互终端的示例详解

    Flask运用Xterm实现交互终端的示例详解

    Xterm是一个基于X Window System的终端仿真器(Terminal Emulator),Xterm最初由MIT开发,它允许用户在X Window环境下运行文本终端程序,本文给大家介绍了Flask运用Xterm实现交互终端的示例详解,文中有详细的代码讲解,需要的朋友可以参考下
    2023-11-11
  • Python中yield关键字及与return的区别详解

    Python中yield关键字及与return的区别详解

    这篇文章主要介绍了Python中yield关键字及与return的区别详解,带有 yield 的函数在 Python 中被称之为 generator生成器,比如列表所有数据都在内存中,如果有海量数据的话将会非常耗内存,想要得到庞大的数据,又想让它占用空间少,那就用生成器,需要的朋友可以参考下
    2023-08-08
  • Python面向对象的三大特性封装、继承、多态

    Python面向对象的三大特性封装、继承、多态

    这篇文章介绍了Python面向对象的三大特性封装、继承、多态,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Python中MySQL数据迁移到MongoDB脚本的方法

    Python中MySQL数据迁移到MongoDB脚本的方法

    MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。本文给大家介绍Python中MySQL数据迁移到MongoDB脚本的方法,需要的朋友参考下
    2016-04-04
  • PyCharm更换pip源、模块安装以及PyCharm依赖包导入导出功能

    PyCharm更换pip源、模块安装以及PyCharm依赖包导入导出功能

    这篇文章主要给大家介绍了关于PyCharm更换pip源、模块安装以及PyCharm依赖包导入导出功能的相关资料,我们在使用pycharm的时候,pycharm中的虚拟环境依赖包需要导出成一个文件,需要的朋友可以参考下
    2023-11-11
  • django的autoreload机制实现

    django的autoreload机制实现

    这篇文章主要介绍了django的autoreload机制实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06

最新评论