使用Excel和Yaml实现数据驱动

一、Excel在pytest里面实现数据驱动

1、安装第三方库openpyxl

pip install openpyxl -i https://pypi.doubanio.com/simple

2、封装读取Excel的类

import openpyxl
import yaml

from path_manager import mtxshop_data_yaml


def real_excel(filepath,sheet_name):
	#获取整个文件对象
	wb = openpyxl.load_workbook(filepath)
	#获取sheet工作表的数据
	sheet_data = wb[sheet_name]
	#获取总行数
	lines_count = sheet_data.max_row
	#获取总列数
	cols_count = sheet_data.max_column
	data = []
	for l in range(2,lines_count+1):
		line = [] #用来存储当前所以列单元格数据
		for c in range(1,cols_count+1):
			cell_data = sheet_data.cell(l,c).value
			line.append(cell_data)
		data.append(line)
	return data

3、用例里面调用real_excel来获取excel里面的数据,读取出来的数据是列表嵌套列表的形式,是符合数据驱动的要求的

class ABC:


	test_data = real_excel("文件地址",sheet_name)
	@pytest.mark.parametrize("casename,sku_id,num,except_status,expect_body",test_data)
	def ABC(self,casename,A,B,C,D):
		api = YsjHjs(A,B)
		resp = api.send()
		pytest.assume(resp.status_code==C,f"期望值:{C},实际值:{resp.status_code}")
		pytest.assume(resp.text==D,f"期望值:{D},实际值:{resp.text}")

如果测试用例和real_excel不在同一个包下,会报错数据文件找不到FileNotFoundError,这个问题是因为如果操作文件传入的是相对路径,那么python在执行的时候会根据执行文件所在的路径去找,很多时候找不到所以我们要想办法传绝对路径,不管在哪里执行都能找到,但是绝对路劲也不能写死,所以需要设计一个文件管理的角色,帮助管理框架中的数据及配置文件的绝对路径

4、设计一个文件路劲管理的角色,帮我们管理框架中的数据及配置文件的绝对路径

根据自己定义的路径,填写到用例中,就可以了

import os
abc
project_path = os.path.dirname(__file__)

abc_data = f"{project_path}/data/ABC.xlsx"
cba_data_yaml = f"{project_path}/data/ABC.yml"

完美解决

二、Yaml在pytest里面实现数据驱动

  1、安装第三方库pyyaml

  *安装第三方库pyyaml

 pip install pyyaml -i Simple Index

不知道为啥不能写出来,大伙懂就行

2、封装读取类,数据读出来是一个字典套字典的形式

def real_yaml(filepath):
	with open(file=filepath,mode='r',encoding='utf-8') as f:
		content = yaml.load(f,Loader=yaml.FullLoader)
		return content

准备数据

# yaml文件是一种有规则格式的文件
# 可以存储多种数据类型,列表、字典
# 该文件不会只存一个接口数据,肯定是多个接口的,那么怎么区分接口呢
# 一个冒号就是一个键值对
# 一个中括号就是一个列表
# 一对大括号放key,value那a也是一个字典
# 冒号之后一定要有空格b
接口:
  a: ['1','2','3']
  b: ['1','1']

3、运用到用例中,这样就拿到数据了

	datas = real_yaml(文件地址)["接口"]
	a_data = adatas["a"]
	a_data = datas["b"]

	@pytest.mark.parametrize('a', a_data)
	@pytest.mark.parametrize('a', a_data)

非常感谢csdn的一个大哥,我知道怎么把代码插进去了,不再土了,哈哈哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值