博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python接口自动化小工具(简版)
阅读量:7106 次
发布时间:2019-06-28

本文共 6210 字,大约阅读时间需要 20 分钟。

hot3.png

一、需求

    本文仅适用于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!┏┛              ┗┓┓┏━━━━┳┓┏┛               ┃┫┫    ┃┫┫               ┗┻┛    ┗┻┛"""

 

转载于:https://my.oschina.net/medivhxu/blog/1502977

你可能感兴趣的文章
Flask+uwsgi+Nginx+Ubuntu部署
查看>>
初探 MySQL 的 Binlog
查看>>
HP SmartStart CD ISO下载地址
查看>>
域控制器更改IP
查看>>
利用自定义Java注解实现资源注入
查看>>
多维地址
查看>>
rpm打包mysql5.5
查看>>
《Effective C++》之条款33:避免遮掩继承而来的名称
查看>>
现代软件工程 作业 1 个人项目
查看>>
我的友情链接
查看>>
jdk1.7升级为1.8
查看>>
Hyper-V虚拟网络总结
查看>>
博客作业:raid各级别特性
查看>>
团队冲刺第四天
查看>>
前端之Sass/Scss实战笔记
查看>>
windows server 2008 下安装openmeetings 2.2.0
查看>>
我的友情链接
查看>>
怎么修改PDF文件内容呢?你知道这种方法吗?
查看>>
linux帐号管理常用命令
查看>>
oracle UGA分布示意图
查看>>