#ddt_util.py
# 读取测试数据
from io import StringIO
import yaml
def read_testcases(yaml_path):
with open(yaml_path,encoding="utf-8",mode="r") as f:
caseinfo = yaml.load(f,yaml.FullLoader)
if len(caseinfo)>=2:
return caseinfo
else:
if "paramtrize" in dict(*caseinfo).keys():
new_caseinfo = ddt(*caseinfo)
return new_caseinfo
else:
return caseinfo
# 解析paramtrize标签做数据驱动
def ddt(caseinfo):
str_caseinfo = yaml.dump(caseinfo) # 用yaml的方法。将字典转化为字符串
case_list = caseinfo["paramtrize"]
name_length = len(caseinfo["paramtrize"][0])
length_flag = True
for p in case_list:
# 对数据做一个基本的校验,可能出现数据漏写
if len(p) != name_length:
length_flag = False
print("数据长度有误,请检查数据填写是否完整!")
# 如果长度没问题
new_caseinfo = []
if length_flag:
for x in range(1,len(case_list)):
raw_caseinfo = str_caseinfo
for y in range(0,name_length):
if isinstance(case_list[x][y],str): # 解决数字字符串变成整型
case_list[x][y] = "'"+str(case_list[x][y])+"'"
raw_caseinfo = raw_caseinfo.replace("$ddt(" + case_list[0][y] + ")", str(case_list[x][y]))
new_caseinfo.append(yaml.safe_load(StringIO(raw_caseinfo))) # 用yaml的方法。将raw_caseinfo转化为字典添加到列表中去
return new_caseinfo
# yaml文件
-
story: 登录B2C商城接口
title: 验证登录成功用例
request:
method: post
url: "?s=user/login"
params:
application: app
application_type: h5
data:
accounts: $ddt(accounts)
pwd: $ddt(pwd)
type: $ddt(type)
extract:
token: '"token":"(.*?)"'
paramtrize:
- ["accounts","pwd","type"]
- ["xxx","xxxxx","xxxxxx"]
- ["xxxxxx","xxxxx","xxxxx"]
- ["xxxxx",xxxxx,"xxx"]
validate:
codes: 200
# equals: {msg: 登录成功}
# contains: data
# databases: {code: "select IndepYear from country where Name = 'China'"}