python接口自動化小工具(簡版)

一、需求

    本文僅適用於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-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!┏┛
              ┗┓┓┏━━━━┳┓┏┛
               ┃┫┫    ┃┫┫
               ┗┻┛    ┗┻┛
"""

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章