转自: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接口自动化测试用例编写。
浙公网安备 33010602011771号