封装常量
当用excle来写用例时,首选要拿到用例行数,再去拿url、请求方式、header、依赖数据、请求数据等等。拿出数据之后根据一定的逻辑判断将其组合在一起去执行case,所以我们需要一个地方来存放常量,根据常量去把对应单元格数据拿到,然后再进行数据拼接。
首先定义一个地方来存放常量,新建一个数据包(data)存放所有数据,然后再创建一个存放常量的文件data_config.py
在data_config.py文件中创建一个类,类定义成变量形式,去调用
#coding:utf-8
class global_var:
#case_id
Id='0'
request_name = '1'
url='2'
run='3'
method='4'
header='5'
case_depend='6'
data_depend='7'
filed_depend='8'
data='9'
excpect='10'
result='11'
#获取caseid
def get_id():
return global_var.Id
#获取url
def get_url():
return global_var.url
#获取是否执行
def get_run():
return global_var.run
#获取请求方式
def get_method():
return global_var.method
#获取head
def get_header():
return global_var.header
#获取依赖id
def get_case_depend():
return global_var.case_depend
#获取依赖数据
def get_data_depend():
return global_var.data_depend
#获取依赖所属字段
def get_filed_depend():
return global_var.filed_depend
#获取请求数据
def get_data():
return global_var.data
#获取预期结果
def get_excepet():
return global_var.excpect
#获取实际结果
def get_result():
return global_var.result
def get_header_value():
header={
"Authorization": "****"
}
获取excle数据
其中请求数以json格式存放到json文件,如:
封装一个类去操作json文件,文件名operation_json.py
#coding:utf-8
import json
class OperetionJson:
def __init__(self):
self.data=self.read_data()
#读取json文件
def read_data(self):
with open('../dataconfig/data.json') as fp:
data= json.load(fp)
return data
#根据关键字获取数据
def get_data(self,id):
return self.data[id]
if __name__ == '__main__':
opjson = OperetionJson()
opjson.get_data(id)
新建一个获取数据的文件get_data.py,将获取接口数据的方法封装成类
#coding:utf-8
from util.operation_excel import OperationExcel
import data.data_config
from util.operation_json import OperetionJson
class GetData:
def __init__(self):
self.opera_excle =OperationExcel()
#获取excle行数,就是case个数
def get_case_lines(self):
return self.opera_excle.get_lins()
#获取是否执行,row对应行
def get_is_run(self,row):
flag = None
#获取列
col=int(data.data_config.get_run())
run_model = self.opera_excle.get_cell_value(row,col)
#判断是否执行
if run_model=='yes':
flag = True
else:
flag = False
return flag
#是否携带header
def is_header(self,row):
col=int(data.data_config.get_header())
header=self.opera_excle.get_cell_value(row,col)
if header=='yes':
return data.data_config.get_header_value()
else:
return None
#获取请求方式
def get_request_method(self,row):
col=int(data.data_config.get_method())
request_method=self.opera_excle.get_cell_value(row,col)
return request_method
#获取url
def get_request_url(self,row):
col=int(data.data_config.get_url())
url=self.opera_excle.get_cell_value(row,col)
return url
#获取请求数据
def get_request_data(self,row):
col = int(data.data_config.get_data())
r_data = self.opera_excle.get_cell_value(row,col)
if r_data == '':
return None
return r_data
#通过获取关键字拿到data数据
def get_data_for_json(self,row):
opera_json = OperetionJson()
#通过请求数据get_request_data单元格数据获取对应json数据
request_data = opera_json.get_data(self.get_request_data(row))
return request_data
#获取预期结果
def get_expect_data(self,row):
col = int(data.data_config.get_excepet())
expect = self.opera_excle.get_cell_value(row,col)
if expect == '':
return None
return expect
post、get基类封装
在数据包(base)下创建文件runmethod.py
#coding:utf-8
import requests
class RunMethod:
def post_main(self,url,data,header=None):
res = None
if header !=None:
res = requests.post(url=url,data=data,headers=header).json()
else:
res = requests.post(url=url,data=data).json()
return res
def get_main(self,url,header,data=None):
res = None
if header != None:
res = requests.get(url=url, data=data, headers=header).json()
else:
res = requests.get(url=url, data=data).json()
return res
def run_main(self,method,url,data,header):
res = None
if method == 'post':
res = self.post_main(url,data,header)
else:
res = self.get_main(url,data,header)
return res
封装好后我们要怎么去执行我们的主流程呢?接下来需要进行主流程封装,在数据包(main)下,创建文件run_test.py
# coding:utf-8
import sys
sys.path.append("F:/project/untitled")
from base.runmethod import RunMethod
from data.get_data import GetData
class RunTest:
def __init__(self):
self.run_method = RunMethod()
self.data = GetData()
# 程序执行主入口
def go_on_run(self):
rs = ""
# 获取excel行数,即case个数
rows_count = self.data.get_case_lines()
# 循环执行case
for i in range(1,rows_count):
res=""
url = self.data.get_request_url(i)
method = self.data.get_request_method(i)
is_run = self.data.get_is_run(i)
data = self.data.get_data_for_json(i) # 请求数据存放在json文件
header = self.data.is_header(i)
if is_run:
# 传入参数顺序与runmethod.py文件中run_main方法入参一致
res = self.run_method.run_main(method, url, data, header)
rs+=str(res)+'\n'
return rs
if __name__ == '__main__':
run = RunTest()
print(run.go_on_run())
执行程序,运行结果如下: