""" Author:Zhou Create_Date:2022年07月13日--21:59 Tool:PyCharm Software: PyCharm """ # 在当前文件中所有用例执行之前执行 import allure import openpyxl import pytest from data_driver . excel_read import Read_Excel fro
Author:Zhou
Create_Date:2022年07月13日--21:59
Tool:PyCharm
Software: PyCharm
"""
# 在当前文件中所有用例执行之前执行
import allure
import openpyxl
import pytest
from data_driver.excel_read import Read_Excel
from encapsulation.api_key import ApiKey
def setup_module():
# 定义全局变量
global ak,excel,sheet,excel_path,all_val
# 初始化Excel文件
excel_path = './data/api_cases.xlsx'
excel = openpyxl.load_workbook(excel_path)
sheet = excel['Sheet1']
# 实例化工具类
ak = ApiKey()
# 参数化变量存储字典
all_val = {}
@pytest.mark.parametrize('value', Read_Excel())
def test_01(value):
# 如果存在自定义标题
if value[10] is not None:
# 动态生成标题
allure.dynamic.title(value[10])
if value[15] is not None:
# 动态获取story模块名
allure.dynamic.story(value[15])
if value[16] is not None:
# 动态获取feature模块名
allure.dynamic.feature(value[16])
if value[17] is not None:
# 动态获取备注信息
allure.dynamic.description(value[17])
if value[18] is not None:
# 动态获取级别信息
allure.dynamic.severity(value[18])
r = value[0] + 1
# ===================Excel数据的解析=================
# 判断当前行的第一列的值,是否是数字编号
if type(value[0]) is int:
# 准备测试数据
# 请求参数,读取列数是从第一列为0计数
data = value[5]
# 校验字段
assert_value = value[7]
# 预期结果字段
expect_value = value[8]
# 如果存在请求头
if value[4]:
# 存在请求参数
if value[5]:
dict_data = {
'url': value[1] + value[2],
# eval将字符串str当作有效的表达式来求值并返回计算结果
# 这里直接给headers一个字典值,不能直接取字符串,需要转成字典
'headers': eval(value[4]),
value[6]: eval(data)
}
# 不存在请求参数
else:
dict_data = {
'url': value[1] + value[2],
'headers': eval(value[4])
}
# 如果不存在请求头
else:
# 存在请求参数
if value[5]:
dict_data = {
'url': value[1] + value[2],
value[6]: eval(data)
}
# 不存在请求参数
else:
dict_data = {
'url': value[1] + value[2]
}
"""
常规的参数传递:
request.post(url="",data="",headers="")
封装时,参数可以直接用**kwargs
request.post(**kwargs)
"""
# 使用反射模拟请求
res = getattr(ak, value[3])(**dict_data)
# ==================Json提取,单参数版==================
if value[11] is not None:
valueJson = ak.get_text(res.text, value[12])
# 将获取到的token值复制到Excel中定义的变量名
# 变量名获取
key = value[11]
# 用定义的字典all_val保存响应得到的键值
all_val[key] = valueJson
# ================JSONt提取,多参数版================
if value[11] is not None:
# 遍历分割JSON提取_引用名称
jsonStr = value[11]
# 用分号分割varStr字符串,并保存到列表里
jsonList = jsonStr.split(';')
# 获取varStrList列表长度
length = len(jsonList)
# 循环输出列表值
for i in range(length):
# json引用变量名获取
key = jsonList[i]
# json表达式获取
jsonExp = jsonList[i]
# 字典值的获取
valueJson = ak.get_text(res.text, jsonExp)
# 变量值的存储
all_val[key] = valueJson
try:
# 结果校验
# 实际结果
# 让异常信息好检验
result = None
result = ak.get_text(res.text, assert_value)
print("==========检查信息==========")
print("检验字段:"+value[7])
print("预期结果:"+value[8])
print("实际结果:"+result)
print(result == expect_value)
if result == expect_value:
sheet.cell(r, 10).value = '通过'
else:
sheet.cell(r, 10).value = '不通过'
excel.save(excel_path)
assert result == value[8]
except:
print("==========实际结果==========")
print("请求参数有误,请检查!")
sheet.cell(r, 10).value = "请求参数有误,请检查"
excel.save(excel_path)
assert result == value[8]