首页 > 其他分享 >Pytest教程:手把手带你打造一个数据分离测试框架

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

时间:2024-03-27 15:04:44浏览次数:23  
标签:教程 手把手 测试数据 Pytest 测试 test import data email

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

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

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

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

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

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

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

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

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

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 = [email protected]
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,测试,test,import,data,email
From: https://blog.csdn.net/weixin_40025666/article/details/137011931

相关文章

  • Python教程:深入探索 Python 列表(List)
    在Python中,列表(List)是一种非常常用且强大的数据结构,它能够存储多个元素,并提供了丰富的操作方法。本文将带您深入探索Python列表,从基础知识到高级应用,让您全面掌握列表的各种技巧和用法。1.列表基础1.1什么是列表列表是一种有序、可变、允许重复元素的数据结构,用方......
  • 双指针的详细教程
    双指针算法是一种常用的算法技巧,它通常用于在数组或字符串中进行快速查找、匹配、排序或移动操作。双指针并非真的用指针实现,一般用两个变量来表示下标(在后面都用指针来表示)双指针算法使用两个指针在数据结构上进行迭代,并根据问题的要求移动这些指针。双指针往往也和单调性......
  • Thymeleaf详细教程(SpringBoot版)
    Thymeleaf详细教程(SpringBoot版):https://blog.csdn.net/YuanFudao/article/details/129085281?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171151147816800222817242%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=17115114781......
  • 【实战教程】Spring Boot项目集成华为openGauss数据库的关键步骤与注意事项
    引言:随着国产数据库技术的崛起,华为openGauss凭借其高性能、安全可靠及易用性成为了众多开发者的首选方案。本篇技术文章将聚焦于如何在SpringBoot项目中成功集成华为openGauss数据库,并揭示其中的一些关键步骤与注意事项,助您轻松驾驭这一强大的数据库引擎。正文:一、环境准备......
  • MYSQL8最新安装教程
    目录安装配置MySql一、下载MySql进入官网:https://dev.mysql.com二、新建文件夹管理Mysql系列文件三、配置my.ini文件四、执行数据库初始化命令五、基础配置六、配置系统环境变量可能会遇到无法启动MYSQL服务的问题:一、尝试删除MySQL服务,重新安装;二、查看端口是否是被占用三、查看......
  • 前端学习-TypeScript菜鸟教程-002-TypeScript基础知识
    菜鸟教程链接基本是阅读教程,记笔记大部分为直接复制基础类型any,number,string,boolean,数组(如letx:number[]=[1,2]或letx:Array<number>=[1,2]),元组(letx:[string,number])enumenumColor{Red,Green,Blue};letc:Color=Color.Blue;void:用于标识方......
  • jdk22+maven环境配置教程+idea的maven环境配置(Windows系统)
    前言jdk是Java开发必要的编程环境,idea是常用的Java开发工具,这里着重解释一下maven。maven就是我们经常看见的pom.xml文件,maven有以下三点功能:1.项目构建(可以帮助我们更快速的打包、构建项目)2.依赖管理,例如我们连接数据库需要的jar包驱动、处理excel表格的驱动等,还有相应......
  • SQL-Labs靶场“54-57”关通关教程
    君衍.一、54关基于GET的cookie10单引号注入1、源码分析2、联合查询注入二、55关基于GET的cookie14括号注入1、源码分析2、联合查询注入三、56关基于GET的cookie14变形注入1、源码分析2、联合查询注入四、57关基于GET的cookie14双引号注入1、源码分析2、联合查询注......
  • mmpretrain安装教程(踩雷记录)
    目录ModuleNotFoundError:Nomodulenamed‘mmcv‘包命令pkgutil报错OSError:CUDA_HOMEenvironmentvariableisnotset.PleasesetittoyourCUDAinstallroot.error:MicrosoftVisualC++14.0orgreaterisrequired.Getitwith"MicrosoftC++BuildTools......
  • 全网最简单最快捷的搭建nextcloud教程(开箱即用),也可以说是保姆级虚拟机安装Ubuntu23.
    nextcloud是一款开源的网盘工具,适用于个人或中小型公司。纯英文的官网很多同行看着云里雾里的,网上的教程也零零散散的,容易踩坑。今天我来发一个最简单最快捷的搭建nextcloud的教程。完全傻瓜化,非docker方式。本质上就是Ubuntu23.10自带nextcloud包,安装最后一步的时候勾选上即......