接口测试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)

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