一、需求
本文仅适用于http get and post 方法,其他另寻~
1、自动读取同目录下的xls文件中的用例
2、自动请求接口,返回测试结果
二、环境
windows10 + python 27
三、目录结构
interface_testcase
|----interface_test.py
|----test.xls
|----md5.jar
四、test.xls中,sheel1命名为interface_testCase,表格如下
test_no | host_name | Path | port | Body | expected_results | request_fun | result | respones_stauts | respones_body | sys_time |
---|---|---|---|---|---|---|---|---|---|---|
test-001 | http://127.0.0.1:8000 | /index/ | {msg:这是第一个预期的request} | |||||||
五、code
#!/usr/bin/env python# coding=utf-8import urllibimport xlrdfrom xlutils.copy import copyfrom jpype import *import osimport timeclass InterFaceTestTool: def __init__(self, case_no=None, ip=None, path=None, port=None, body=None, expected_results=None, fun=None , result=None, response_result=None): self.case_no = case_no # 用例编号 self.ip = ip # ip或域名 self.path = path # 请求路径 self.port = port # 端口号 self.body = body # 请求参数 self.ex_result = expected_results # 预期响应结果 self.result = result # 测试结果 self.fun = fun # 请求方法 get or post self.re_result = response_result # 响应数据 self.row_no = None # xls中的行数 def get_excel_msg(self): ''' 打开excel文件,读取文件中interface_testCase中的数据 :return: 返回数据list ''' try: data = xlrd.open_workbook('test.xls') # 这里读取测试用例的文件,可以做参数化 table = data.sheet_by_name(u'interface_testCase') self.row_no = table.nrows self.ncols = table.ncols case_list = [] for i in range(1, self.row_no): test_case = table.row_values(i) case_list.append(test_case) return case_list except Exception, e: print u'打开的文件错误:%s' % e def write_xls(self): ''' 把结果数据保存到excel中 ,已经调试OK了 :return: ''' file_name = 'test_baidu.xls' # 读取测试用例文件 try: data = xlrd.open_workbook(file_name) c_data = copy(data) sheet = c_data.get_sheet(0) for i in range(1, self.row_no): sheet.write(i, 7, self.result.decode('gbk')) sheet.write(i, 8, self.re_result.decode('gbk')) sys_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())) sheet.write(i, 9, sys_time) os.remove(file_name) c_data.save('test_baidu.xls') # 保存测试用例文件中的结果 print '文件保存成功---------> OK' except Exception, e: print u'保存文件错误: %s' % e def send_data(self): ''' 请求excel中读取到的数据 :return: 返回相应状态和测试结果 ''' data = self.get_excel_msg() for i in range(len(data)): case_list = data[i] for j in range(1, self.row_no): self.case_no = case_list[0] self.ip = case_list[1] self.path = case_list[2] # self.port = repr(int(case_list[3])) self.body = repr(case_list[4]) self.ex_result = case_list[5] self.fun = case_list[6] if self.fun == 'get': url = self.ip + self.path + '?' + self.path request_getfun = urllib.urlopen(url) if request_getfun.code == 200: html_getfun = request_getfun.readlines() if self.ex_result == html_getfun: print u'第%s条测试通过-----------> OK' % self.case_no self.result = u'通过' self.write_xls() print self.fun else: print u'第%s条测试未通过------------> NO' % self.case_no self.result = u'未通过' self.re_result = html_getfun print self.fun else: print u'请求状态码错误,%s' % request_getfun.code else: url = 'http://' + self.ip + self.path post_data = urllib.urlencode(self.body) request_postfun = urllib.urlopen(url, post_data) if request_postfun.code == 200: html_postfun = request_postfun.readlines() if self.ex_result == html_postfun: print u'第%s条用例通过-----------> OK' % self.case_no self.result = u'通过' self.write_xls() print self.fun else: print u'第%s条用例未通过-----------> NO' % self.case_no self.result = u'未通过' self.write_xls() self.re_result = html_postfun print self.fun else: print u'请求状态码错误,%s', request_postfun.code break # def get_code(self, secret_body, *body): # import copy # ''' # 调用解密jar包,把接口返回数据解密,并把数据提取出来 # ''' # jarpath = os.path.join(os.path.abspath('.'), '../driver/') # startJVM("C:/Program Files/Java/jre1.8.0_131/bin/server/jvm.dll", "-ea", # "-Djava.class.path=%s" % (jarpath + 'com.lottery.decrypt-0.1.jar')) # jd = JPackage("com.medivh").HelloWorld() # # # 深拷贝,取出解密后的数据 # jiemi_body = copy.deepcopy(jd.show()) # shutdownJVM() # # # 返回数据提取出验证码 # data = jiemi_body.get('data') # code = data.get('code') # return codeif __name__ == '__main__': run = InterFaceTestTool() run.send_data()
PS:接口加密部分还没写好~基本方法已经写好了,有兴趣的朋友可以自己加工一下
debug ---> IOError: [Errno socket error] [Errno 10061] #主机需要主动开启测试端口或者换个真实的接口测试
""" ┏┓ ┏┓ ┏━┛┻━━━━┛┻━┓ ┃ ☃ ┃ ┃ ┳┛ ┗┳ ┃ ┃ ┻ ┃ ┗━┓ ┏━┛ ┃ ┗━━━┓ ┃ 神兽保佑 ┣┓ ┃ 永无BUG!┏┛ ┗┓┓┏━━━━┳┓┏┛ ┃┫┫ ┃┫┫ ┗┻┛ ┗┻┛"""