Pytest精通指南(13)Parametrize数据驱动

2024-04-16 22:28

本文主要是介绍Pytest精通指南(13)Parametrize数据驱动,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


文章目录

      • 前言
      • 数据驱动
      • parametrize从yaml获取数据
      • parametrize从json获取数据
      • parametrize从excel获取数据


请添加图片描述

前言

数据驱动就是通过数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。

数据驱动测试是一种测试方法,是将测试数据与测试逻辑分开管理与维护的一种手段。

  • 测试数据可以存储在外部文件中,如EXCELJSONYAML等,而测试逻辑则编写在测试脚本中。
  • 通过读取外部文件中的测试数据,测试脚本可以执行相应的测试操作,并验证程序的输出是否符合预期。

数据驱动

少量的测试用例:

  • 可以通过代码的参数化来实现数据驱动。
  • 这意味着在代码中定义一些变量,并为这些变量提供不同的值,以模拟不同的测试场景。
  • 这样,只需编写一次测试逻辑,就可以通过更改参数值来执行多个测试用例。

大量的测试用例:

  • 建议使用结构化的文件(如EXCELJSONYAML等)来存储测试数据。

这样做的好处是:

  • 易于管理:所有数据都集中在一个或多个文件中,便于查看、修改和备份。
  • 易于扩展:随着测试数据的增加,只需在文件中添加新的数据行,而无需修改测试代码。
  • 代码和数据分离:测试逻辑和数据分开,使得代码更加清晰和可维护。

无论数据量大小,都建议将数据和代码分离。

parametrize从yaml获取数据

Python操作Yaml文件查漏补缺:Python 3 拿捏configparser和pyyaml配置文件解析库


datagram.yaml文件数据

- username: adminpassword: 123456
- username: testpassword: test

test_case_01.py文件代码

import pytest
import yaml
import os# 获取项目路径
BASE_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
print(BASE_PATH)  # /Users/yangkai/PythonWorkspace/第49课:第三方库/CASE29:Pytestdef acquire_case_data(file_path):with open(file=file_path, mode='r', encoding="utf-8") as file:return yaml.safe_load(file)@pytest.mark.parametrize("data", acquire_case_data(BASE_PATH + "/datagram.yaml"))
def test_case(data):print(f"username={data['username']}, password={data['password']}")

执行结果

请添加图片描述

parametrize从json获取数据

Python操作Json文件查漏补缺:Python 从文件中读取JSON 数据并解析转存


datagram.json文件数据

[{"username": "admin","password": "123456"},{"username": "test","password": "1234"},{"username": "guest","password": "12345"}
]

test_case_02.py文件代码

import pytest
import json
import os# 获取项目路径
BASE_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
print(BASE_PATH)  # /Users/yangkai/PythonWorkspace/第49课:第三方库/CASE29:Pytestdef acquire_case_data(file_path):with open(file=file_path, mode='r', encoding="utf-8") as fp:return json.load(fp)@pytest.mark.parametrize("data", acquire_case_data(BASE_PATH + "/datagram.json"))
def test_case(data):print(f"username={data['username']}, password={data['password']}")

执行结果

请添加图片描述

parametrize从excel获取数据

Python操作excel文件查漏补缺:Python 自动化与数据分析必备openpyxl模块


datagram.excel文件数据

请添加图片描述

test_case_03.py文件代码

import pytest
import openpyxl
import os# 获取项目路径
BASE_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
print(BASE_PATH)  # /Users/yangkai/PythonWorkspace/第49课:第三方库/CASE29:Pytestdef acquire_case_data(file_path):# 打开现有的Excel文件(工作薄)excel_object = openpyxl.load_workbook(file_path)# 打开需要读取的工作表(sheet页)sheet_object = excel_object["Sheet1"]# 通过iter_rows()遍历获取所有数据行return [row for row in sheet_object.iter_rows(values_only=True)]@pytest.mark.parametrize("data", acquire_case_data(BASE_PATH + "/datagram.xlsx"))
def test_case(data):print(f"username={data[0]}, password={data[1]}")

执行效果

请添加图片描述

这篇关于Pytest精通指南(13)Parametrize数据驱动的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/910069

相关文章

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

Spring Boot 整合 Redis 实现数据缓存案例详解

《SpringBoot整合Redis实现数据缓存案例详解》Springboot缓存,默认使用的是ConcurrentMap的方式来实现的,然而我们在项目中并不会这么使用,本文介绍SpringB... 目录1.添加 Maven 依赖2.配置Redis属性3.创建 redisCacheManager4.使用Sp

Python Pandas高效处理Excel数据完整指南

《PythonPandas高效处理Excel数据完整指南》在数据驱动的时代,Excel仍是大量企业存储核心数据的工具,Python的Pandas库凭借其向量化计算、内存优化和丰富的数据处理接口,成为... 目录一、环境搭建与数据读取1.1 基础环境配置1.2 数据高效载入技巧二、数据清洗核心战术2.1 缺失

Python使用Reflex构建现代Web应用的完全指南

《Python使用Reflex构建现代Web应用的完全指南》这篇文章为大家深入介绍了Reflex框架的设计理念,技术特性,项目结构,核心API,实际开发流程以及与其他框架的对比和部署建议,感兴趣的小伙... 目录什么是 ReFlex?为什么选择 Reflex?安装与环境配置构建你的第一个应用核心概念解析组件

Python处理超大规模数据的4大方法详解

《Python处理超大规模数据的4大方法详解》在数据的奇妙世界里,数据量就像滚雪球一样,越变越大,从最初的GB级别的小数据堆,逐渐演变成TB级别的数据大山,所以本文我们就来看看Python处理... 目录1. Mars:数据处理界的 “变形金刚”2. Dask:分布式计算的 “指挥家”3. CuPy:GPU

Spring Boot拦截器Interceptor与过滤器Filter深度解析(区别、实现与实战指南)

《SpringBoot拦截器Interceptor与过滤器Filter深度解析(区别、实现与实战指南)》:本文主要介绍SpringBoot拦截器Interceptor与过滤器Filter深度解析... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现与实

使用Vue-ECharts实现数据可视化图表功能

《使用Vue-ECharts实现数据可视化图表功能》在前端开发中,经常会遇到需要展示数据可视化的需求,比如柱状图、折线图、饼图等,这类需求不仅要求我们准确地将数据呈现出来,还需要兼顾美观与交互体验,所... 目录前言为什么选择 vue-ECharts?1. 基于 ECharts,功能强大2. 更符合 Vue

Java如何根据word模板导出数据

《Java如何根据word模板导出数据》这篇文章主要为大家详细介绍了Java如何实现根据word模板导出数据,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... pom.XML文件导入依赖 <dependency> <groupId>cn.afterturn</groupId>

MyBatis分页插件PageHelper深度解析与实践指南

《MyBatis分页插件PageHelper深度解析与实践指南》在数据库操作中,分页查询是最常见的需求之一,传统的分页方式通常有两种内存分页和SQL分页,MyBatis作为优秀的ORM框架,本身并未提... 目录1. 为什么需要分页插件?2. PageHelper简介3. PageHelper集成与配置3.

Java实现视频格式转换的完整指南

《Java实现视频格式转换的完整指南》在Java中实现视频格式的转换,通常需要借助第三方工具或库,因为视频的编解码操作复杂且性能需求较高,以下是实现视频格式转换的常用方法和步骤,需要的朋友可以参考下... 目录核心思路方法一:通过调用 FFmpeg 命令步骤示例代码说明优点方法二:使用 Jaffree(FF