接口測試TOOL

實現目標:

以excel接口用例爲依據,實現接口的自動化測試,並生成結果

使用場景:

1.根據接口測試用例模板,編寫相應用例
2.調用腳本,自動化執行用例,並自動生成用例結果

腳本分析:

1.使用的庫方法:表格處理:xlrd,xlwt,xlutils 接口處理:cookielib, urllib, urllib2
2.各文件功能:
讀取EXCEL用例中和接口相關的數據,篩選出了接口地址、請求頭、請求參數、預測結果
將獲取的參數拼接成請求,即執行用例獲取接口返回數據

腳本間關係

在這裏插入圖片描述
用例模板: ( 提取碼:8fnk )

  1. 用例在TestCase表單中填寫
  2. 請使用xls格式保存。在這裏插入圖片描述

腳本代碼:
Control.py

# coding=utf-8
"""
 @ProjectName:test
 @FileName   :Control.py
 @Time       :2020/2/25 18:28
 @Author     :Qred
"""

from ReadTestCase import ReadTestCase
import DoCase
import WriteResults

def Start(filename = "C://Users//Qred//Desktop//接口測試模板.xls", Report = "C://Users//Qred//Desktop//接口測試模板1.xls"):
    # 執行用例獲取結果
    print ('the API test start! ')
    # 獲取參數
    workbook, Cases = ReadTestCase(filename)

    opener = DoCase.Cookies()

    expectedResults, actualResults = [], []

    # 執行用例
    for case in Cases:
        # 請求地址
        url = case[0]
        # 請求頭
        header = case[1]
        # 請求參數
        values = case[2]

        # 預期結果
        expectedResult = case[3]
        expectedResults.append(expectedResult)

        actualResult = DoCase.DoCase(opener, url, values, header)
        actualResults.append(actualResult)

    # 保存測試結果
    num = Cases.__len__()
    caseResults = []
    workbookWr, workSheetWr = WriteResults.SheetWr(workbook)

    # 用例結果
    for i in range(num):
        expectedResult = expectedResults[i]#.decode('utf-8')
        actualResult = actualResults[i].decode('utf-8')

        # 測試結果
        if actualResult.find(expectedResult) >= 0 or actualResult.rfind(expectedResult) >= 0 :
            caseResult = "PASS"
        else:
            caseResult = "FAIL"

        # 結果存儲
        row = 1 + i
        clox = 8
        WriteResults.WriteResults(workSheetWr, row, clox, actualResult)
        clox = 9
        WriteResults.WriteResults(workSheetWr, row, clox, caseResult.decode('utf-8'))

    print ('the API test finished! ')
    WriteResults.SheetSv(workbookWr, Report)


if __name__ == "__main__":
    Start()

ReadTestCase.py

# coding=utf-8
"""
 @ProjectName:test
 @FileName   :ReadTestCase.py
 @Time       :2020/2/25 15:32
 @Author     :Qred
"""
import xlrd

def ReadTestCase(filename):
    #讀取用例
    workbook = xlrd.open_workbook(filename.decode('utf-8'), formatting_info=True)
    # formatting_info=True保留原表格格式
    # workSheets = workbook.sheet_names()
    workSheet = workbook.sheet_by_name("TestCase")
    # 按行讀取數據
    nrows = workSheet.nrows
    cases = []
    for i in range(1,nrows):
        # 存儲測試參數
        rows = workSheet.row_values(i)
        cases.append(rows[4:8])

    return workbook, cases

DoCase.py

# coding=utf-8
"""
 @ProjectName:test
 @FileName   :DoCase.py
 @Time       :2020/2/25 15:32
 @Author     :Qred
"""
import cookielib
import urllib, urllib2

def Cookies():
    # 獲取cookie
    cj = cookielib.CookieJar()
    processor = urllib2.HTTPCookieProcessor(cj)
    opener = urllib2.build_opener(processor)
    urllib2.install_opener(opener)

    return opener

def DoCase(opener, url, values, header):
    # 執行測試用例
    # http請求拼接
    if len(url) != 0:
        if len(values) == 0:
            data = None
        else:
            values = eval(values)
            data = urllib.urlencode(values)

        if len(header) == 0:
            header = {}
        else:
            header = eval(header)
        req = urllib2.Request(url, data=data, headers=header)

        res = opener.open(req)
        if res.code == 200:
            res = res.read()
        else:
            res = 'error Code : {}  Msg : {}'.format(res.code, res.msg)

    else:
        res = 'error : param URL '

    return res

WriteResults.py

# coding=utf-8
"""
 @ProjectName:test
 @FileName   :WriteResults.py
 @Time       :2020/2/25 15:32
 @Author     :Qred
"""

from xlutils.copy import copy

def SheetWr(workbook):
    # 獲取表格對象
    workbookWr = copy(workbook)
    workSheetIndex = workbookWr.sheet_index("TestCase")
    workSheetWr = workbookWr.get_sheet(workSheetIndex)

    return workbookWr,workSheetWr


def WriteResults(workSheetWr, rows, clox, value):
    # 寫入用例結果
    workSheetWr.write(rows, clox, value)


def SheetSv(workbookWr, filename):
    # 保存表格
    workbookWr.save(filename)

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