您的位置:首页 > 编程语言 > Python开发

python接口自动化脚本

2017-08-04 00:00 411 查看
一、需求

本文仅适用于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_nohost_namePathportBodyexpected_resultsrequest_funresultrespones_stautsrespones_bodysys_time
test-001http://127.0.0.1:8000/index/{msg:这是第一个预期的request}
五、code

#!/usr/bin/env python
# coding=utf-8

import urllib
import xlrd
from xlutils.copy import copy
from jpype import *
import os
import time

class 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 code

if __name__ == '__main__':
run = InterFaceTestTool()
run.send_data()

PS:接口加密部分还没写好~基本方法已经写好了,有兴趣的朋友可以自己加工一下

debug ---> IOError: [Errno socket error] [Errno 10061] #主机需要主动开启测试端口或者换个真实的接口测试

"""
┏┓    ┏┓
┏━┛┻━━━━┛┻━┓
┃     ☃    ┃
┃   ┳┛ ┗┳  ┃
┃     ┻    ┃
┗━┓      ┏━┛
┃      ┗━━━┓
┃  神兽保佑 ┣┓
┃ 永无BUG!┏┛
┗┓┓┏━━━━┳┓┏┛
┃┫┫    ┃┫┫
┗┻┛    ┗┻┛
"""
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: