# coding:utf-8
import xlrd
from xlutils.copy import copy # 导入xlutils的copy方法
class HandleExcel:
"""封装操作excel的方法"""
def __init__(self, file='E:/PyChram项目集合/interfacetest/excel/30.xls', sheet_id=0):
self.file = file
self.sheet_id = sheet_id
self.data = self.get_data()
# 为了在创建一个实例时就获得excel的sheet对象,可以在构造器中调用get_data()
# 因为类在实例化时就会自动调用构造器,这样在创建一个实例时就会自动获得sheet对象了
# 获取某一页sheet对象
def get_data(self):
data = xlrd.open_workbook(self.file)
sheet = data.sheet_by_index(self.sheet_id)
return sheet
# 获取excel数据行数
def get_rows(self):
rows = self.data.nrows
# t = self.get_data() # 调用get_data()取得sheet对象(如果不在构造器获取sheet对象,就需要在方法内先获取sheet对象,再进行下一步操作,每个方法都要这样,所以还是写在构造器中方便)
# rows = t.nrows
return rows
# 获取某个单元格数据
def get_value(self, row, col):
value = self.data.cell_value(row, col)
return value
# 向某个单元格写入数据
def write_value(self, row, col, value):
data = xlrd.open_workbook(self.file) # 打开文件
data_copy = copy(data) # 复制原文件
sheet = data_copy.get_sheet(0) # 取得复制文件的sheet对象
sheet.write(row, col, value) # 在某一单元格写入value
data_copy.save(self.file) # 保存文件
# 封装excel的列名常量
def get_caseseq():
"""获取caseSeq"""
caseSeq = 0
return caseSeq
def get_apitype():
"""获取apiType"""
apiType = 1
return apiType
def get_apiseq():
"""获取apiSeq"""
apiSeq = 2
return apiSeq
def get_apiName():
"""获取apiName"""
apiName = 3
return apiName
def get_priority():
"""获取priority"""
priority = 4
return priority
def get_url():
"""获取url"""
url = 5
return url
def get_method():
"""获取method"""
method = 6
return method
def get_header():
"""获取header"""
header = 7
return header
def get_purpose():
purpose = 8
return purpose
def get_params():
"""获取params"""
params = 9
return params
def get_expectvalue():
"""获取expectValue"""
expect = 10
return expect
def get_resultvalue():
result = 11
return result
if __name__ == '__main__':
test = HandleExcel()
print(test.get_data())
print(test.get_rows())
print(test.get_value(0, 0))
————————————————
2.将操作excel的方法封装好后,准备接口用例来遍历循环
3.编写主函数代码,实现接口用例遍历并将测试结果写入excel表中
# coding:utf-8
from mylib.run_method import RunMain
from mylib.handle_excel import *
import json
class RunTestCase:
def __init__(self):
self.Runmain = RunMain() # 实例化调用get/post请求基类
self.data = HandleExcel() # 实例化操作excel文件类
def go_run(self):
rows_count = self.data.get_rows() # 获取excel行数
for i in range(1,rows_count): # 利用行数进行迭代处理每个接口
url = self.data.get_value(i, get_url()) # 循环获取url的值
print(url)
method = self.data.get_value(i, get_method()) # 循环获取method的值
print(method)
if self.data.get_value(i, get_params()) == '':
data = None
else:
data = json.loads(self.data.get_value(i, get_params())) # 循环获取请求参数,并将得到的数据反序列
expect = self.data.get_value(i, get_expectvalue()) # 循环获取期望输出
is_run = self.data.get_value(i, get_priority()) # 获取是否运行,即判断excel中priority是不是"H"
if is_run == 'H':
res = self.Runmain.run_main(url, method, data) # 调用get/post主函数
print(res)
if expect in res:
print('测试成功')
self.data.write_value(i, get_resultvalue(), 'pass')
else:
print('测试失败')
self.data.write_value(i, get_resultvalue(), 'fail')
if __name__ == '__main__':
run = RunTestCase()
run.go_run()
|