基於Python + requests 的web接口自動化測試框架


之前采用JMeter進行接口測試,每次給帶新人進行培訓比較麻煩,干脆用python實現,將代碼和用例分離,易於維護。

 

項目背景

公司的軟件采用B/S架構,進行數據存儲、分析、管理

 

工具選擇

python開發的速度很快,且容易上手,豐富的第三方庫,大大加快了開發速度和難度,自己開發一個簡單的框架,優點是足夠靈活,可以隨時根據需求進行變更

 

框架思路(unittest)

考慮可重用性和可維護性,針對測試人員編寫測試用例的方便性,采用數據驅動的設計方式,將數據分層出來,與業務邏輯剝離,測試人員就可以通過數據文件專注的寫測試用例,不用關注代碼編寫,提高了效率

將測試的結果生成HTML格式的測試報告

 

模塊介紹

# 封裝的方法

Package

         Base.py             請求(POST、GET)

         Unit.py              工具類(斷言、獲取response數據)

# 測試報告

Report

# 接口場景用到的資源(圖片、視頻)

Resource

# 測試用例

Test_case

         TestCase_**.py

         …

TestCase_**.py

# unittest框架

all_test.py                 (包括生成html格式的測試報告)

# 實現在外部配置文件中配置請求接口URL、參數

pageMessage.py

 

代碼介紹

封裝的POST請求,代碼如下:

def r_get(url, payload={}):

    """ GET 請求 url:接口,payload:參數 """

    response = ''
    try:
        # 根據傳入的參數長度判斷是否發送參數
        if payload.__len__() == 0:
            r = s.get(url, headers=heads)
        else:
            r = s.get(url, params=payload, headers=heads)
        response = json.loads(r.text)
    except Exception as err:
        print err
    return response

 

封裝的GET請求,代碼如下:

def r_post(url, payload={}, tp=''):
    """ POST 請求 url:接口,payload:參數 ,tp:類型"""
    try:
        # 根據傳入的參數長度判斷是否發送參數
        if payload.__len__() == 0:
            r = s.post(url, headers=heads)
        else:
            # 根據傳入的參數類型判斷是否發送json格式的
            if tp == 'json':  # json數據
                r = s.post(url, data=json.dumps(payload), headers=heads)
            else:
                r = s.post(url, data=payload, headers=heads)
        response = json.loads(r.text)
    except Exception as err:
        print err
    return response

 

獲取response響應數據,代碼如下:

def get_message(text, key):
    """ 獲取返回報文的數據 text:報文內容,key: 獲取參數關鍵字 """
    value = ''
    try:
        data = text['data']
        # print '報文格式:', type(data)
        if type(data) == list:
            da = data[0]      # 報文格式
            value = da[key]
        else:
            value = data[key]
        value = str(value)
        print 'Message: ' + key + '=' + value
    except Exception as err:
        print "Error:", (err)
    return value

 

斷言,代碼如下:

def assert_case(url, text, cod, mes):
    """ 斷言,判斷 code 和 message """
    code, message = '', ''
    try:
        code = text['code']
        message = text['message']
        assert_that(str(cod)).is_equal_to(str(code))
        assert_that(str(mes)).is_equal_to(str(message))
    except Exception, e:
        print url + ' code: ' + str(code) + ' message:' + str(message) + ' ' + str(e)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM