转自:https://www.freesion.com/article/3046426995/
1.为了更好的实现读取excel文件进行接口自动化测试,将操作excel文件方法封装:
-
# 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的方法封装好后,准备接口用例来遍历循环
其中:
caseSeq:用例编号
apiType:接口类型
apiSeq:接口编号
apiName:接口名称
priority:优先级
url:接口调用地址
method:协议方法
header:请求头
purpose:用例描述
params:接口参数
expectValue:期望结果
resultValue:测试结果
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()
运行结果如下:
excel表格中填入如下:
本篇简单的使用excel进行接口测试用例的执行,在测试过程中最重要的是测试用例的编写,在遇到不同的测试用例执行时会出现不同的问题,还需要多使用多练习,按照实际进行Python接口自动化测试用例编写。