一、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的一个大哥,我知道怎么把代码插进去了,不再土了,哈哈哈