pytest自动化测试数据驱动yaml/excel/csv/json
作者:吱吱菌啦啦 发布时间:2023-06-18 14:19:47
标签:pytest,测试数据驱动,yaml,excel,csv,json
数据驱动
数据的改变从而驱动自动化测试用例的执行,最终引起测试结果的改变。简单说就是参数化的应用。
测试驱动在自动化测试中的应用场景:
测试步骤的数据驱动;
测试数据的数据驱动;
配置的数据驱动;
1、pytest结合数据驱动-yaml
实现读yaml文件,先创建env.yml文件配置测试数据
工程目录结构:
data目录:存放yaml文件
-
dev: 127.0.0.1
#dev: 127.0.0.2
#prod: 127.0.0.3
testcase目录:存放测试用例文件
import pytest
import yaml
class TestYaml:
@pytest.mark.parametrize("env", yaml.safe_load(open("./env.yml")))
def test_yaml(self, env):
if "test" in env:
print("这是测试环境")
# print(env)
print("测试环境的ip是:", env["test"])
elif "dev" in env:
print("这是开发文件")
print("开发环境的ip是:", env["dev"])
# print(env)
结果示例:
2、pytest结合数据驱动-excel
常用的读取方式有:xlrd、xlwings、pandas、openpyxl
以读excel文件,实现A+B=C并断言为例~
工程目录结构:
data目录:存放excel数据文件
func目录:存放被测函数文件
def my_add(x, y):
result = x + y
return result
testcase目录:存放测试用例文件
import openpyxl
import pytest
from test_pytest.read_excel.func.operation import my_add
def test_get_excel():
"""
解析excel数据
:return: [[1,1,2],[3,6,9],[100,200,300]]
"""
book = openpyxl.load_workbook('../data/param.xlsx')
sheet = book.active
cells = sheet["A1":"C3"]
print(cells)
values = []
for row in sheet:
data = []
for cell in row:
data.append(cell.value)
values.append(data)
print(values)
return values
class TestWithExcel:
@pytest.mark.parametrize('x,y,expected', test_get_excel())
def test_add(self, x, y, expected):
assert my_add(int(x), int(y)) == int(expected)
3、pyetst结合数据驱动-csv
csv:逗号文件,以逗号分隔的string文件
读取csv数据:
内置函数open()
内置模块csv
方法:csv.reader(iterable)
参数:iterable,文件或列表对象
返回:迭代器,遍历迭代器,每次会返回一行数据
以读csv文件,实现A+B=C并断言为例~
工程目录结构:
data目录:存放csv数据文件
func目录:存放被测函数文件
def my_add(x, y):
result = x + y
return result
testcase目录:存放测试用例文件
import csv
import pytest
from test_pytest.read_csv.func.operation import my_add
def test_get_csv():
"""
解析csv文件
:return:
"""
with open('../data/params.csv') as file:
raw = csv.reader(file)
data = []
for line in raw:
data.append(line)
print(data)
return data
class TestWithCsv:
@pytest.mark.parametrize('x,y,expected', test_get_csv())
def test_add(self, x, y, expected):
assert my_add(int(x), int(y)) == int(expected)
4、pytest结合数据驱动-json
json:js对象,是一种轻量级的数据交换格式。
json结构:
对象{"key":value}
数组[value1,value2...]
查看json文件:
1.pycharm
2.txt记事本
读取json文件:
内置函数open()
内置库json
方法 json.loads() json.dumps()
以读json文件,实现A+B=C并断言为例~
工程目录结构:
data目录:存放json数据文件
func目录:存放被测函数文件
def my_add(x, y):
result = x + y
return result
testcase目录:存放测试用例文件
import json
import pytest
from test_pytest.read_json.func.operation import my_add
def test_get_json():
"""
解析json数据
:return: [[1,1,2],[3,6,9],[100,200,300]]
"""
with open('../data/params.json', 'r') as file:
data = json.loads(file.read())
print(list(data.values()))
return list(data.values())
class TestWithJson:
@pytest.mark.parametrize('x,y,expected', test_get_json())
def test_add(self, x, y, expected):
assert my_add(int(x), int(y)) == int(expected)
来源:https://www.jianshu.com/p/dd11812b2ba6


猜你喜欢
- 一、location 对象是什么?window 对象给我们提供了一个 location 属性用于获取或设置窗体的 URL,并且可以用于解析
- 本文介绍了计算多个订单的核销金额的全部过程,运行数据库环境:SQL SERVER 2005,下面跟大家分享一下。下图是一张订单明细表,现有金
- 原文: gradio.app/interface-s…1.全局状态例子来解释import gradio as grsc
- 简单的‘Hello World!'Python命令行假设你已经安装好了Python, 那么在Linux命令行输入:$python将直
- 本篇阅读的代码片段来自于30-seconds-of-python。1. count_bydef count_by(arr, fn=lambd
- 网上商城数据库-用户信息数据操作项目描述在电子商务兴起的大环境下,建立利用互联网开拓销售渠道,帮助企业及时调整商品结构,协助经销商打开货源的
- 深入理解python try异常处理机制#python的try语句有两种风格#一:种是处理异常(try/except/else)#二:种是无
- 单页应用程序是或多或少复杂的应用程序,它加载一个单一的HTML页面。每当用户与它们互动时,它们就会使用JavaScript动态地更新其内容。
- 实现二维平面上散点的绘制,并可以给每个散点标记序号或者名称:import numpy as npimport matplotlib.pypl
- MSSQL随机数 MSSQL有一个函数CHAR()是将int(0-255) ASCII代码转换为字符。那我们可以使用下面MS SQL语句,可
- 能坚持全部做完的都是高手直入主题建库建表插入数据代码直接按顺序复制就可以-- 建库CREATE DATABASE `emp`;-- 打开库U
- MySQL 如何从表中取出随机数据 以前在群里讨论过这个问题,比较的有意思.mysql的语法真好玩. 他们原来都想用P
- Merge函数的用法简单来说Merge函数相当于Excel中的vlookup函数。当我们对2个表进行数据合并的时候需要通过指定两个表中相同的
- Mysql replace与replace into都是经常会用到的功能;replace其实是做了一次update操作,而不是先delete
- 前言本文将介绍如何使用ONNX将PyTorch中训练好的模型(.pt、.pth)型转换为ONNX格式,然后将其加载到Caffe2中。需要安装
- 1、SQL server中创建表,带有自增列。create table Test_Table(Id int Identity(1,1), N
- 对其中的参数进行解释plt.subplots(figsize=(9, 9))设置画面大小,会使得整个画面等比例放大的sns.heapmap(
- 在web开发中经常遇到多关键词对对单个字段查询,我一般是通过动态数组来实现的。当然多个关键词的一般是用空格或,隔开,我这几假设多个关键词用空
- 该模块主要功能是提供可存储cookie的对象。使用此模块捕获cookie并在后续连接请求时重新发送,还可以用来处理包含cookie数据的文件
- 简介tuple1.元组是以圆括号“()”包围的数据集合,不同成员以“,”分隔。通过下标进行访问2.不可变序列,可以看做不可变的列表,与列表不