天天看點

python自動化測試:通過faker生成測試資料,通過schema檢查傳回結果需求設計使用方案代碼

需求

假定有如主圖相同的http請求。我們一般的做法是,用postman去抓取http請求,然後修改request的body或者header裡的資料,點選send按鈕,檢查傳回的response的body是否正确。

對于輸入。一般來說,我們會純手工,或者半自動的,設計測試用例。例如使用邊界值分析,等價類劃分等方法,用在我們的輸入參數中。比如我參數中的configname最多200個參數,我測試輸入201個參數。

對于輸出。一般來說,我們大部分時候是肉眼檢查,或者寫代碼,通過jsonpath取參數,然後判斷是否存在來檢查。

這裡我打算用一個新的方法來降低測試的手工特性,讓他更自動化一點。以下想法還處于調試階段,用于大規模使用,暫時不行。

設計

輸入修改方案:引入faker庫和jsonschema庫。通過這兩個庫,我們可以産生随機的json串

faker是我無意之間發現的,能按照規律産生随機字的庫,例如

fake.name()      

是産生一個随機的名字,隻要加入适當的providers,就能按照需要的規則産生随機字

jsonschema這個用的人很多,這裡就不介紹了,下面推薦一個網站,能把json請求轉換為schema格式

https://jsonschema.net/

schema中會注明每個字段的規則,例如是string類型還是integer。

輸出修改方案:使用jsonschma的validate方法來檢查(這種檢查方法目前有一些檢查不充分,但是已經可以讓測試人員減少一些工作量了)

jsonschema.validate(response, schema)      

使用方案

1.去postman抓取http請求,并且記錄下所需要的輸入json和輸出json

python自動化測試:通過faker生成測試資料,通過schema檢查傳回結果需求設計使用方案代碼

2.打開

把輸入json和輸入json 轉換成jsonschema

python自動化測試:通過faker生成測試資料,通過schema檢查傳回結果需求設計使用方案代碼

3.把輸入jsonschema檔案,輸出檔案jsonschema放入相應的目錄,自己寫一個用于生成随機requestbody的provider和一個測試用的主函數

python自動化測試:通過faker生成測試資料,通過schema檢查傳回結果需求設計使用方案代碼

4.運作測試主入口檔案,列印一下發送的json檔案,看是不是随機化了,結果是确實随機化了。

python自動化測試:通過faker生成測試資料,通過schema檢查傳回結果需求設計使用方案代碼

代碼

測試主入口test_json_from_schema.py

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import json
import faker
import jsonschema
import requests
from jsonschema.exceptions import ValidationError
import jsonprovider
def generate_request(request_json_schema):
    '''
    通過schema生成随機測試資料
    :param request_json_schema:
    :return:
    '''
    fake = faker.Faker()
    fake.add_provider(jsonprovider.JSONProvider)
    request_body = fake.json(json.load(open(request_json_schema)))
    print(request_body)
    return request_body
def check_json_schema(response, schema):
    '''
    通過json_schema檢查傳回的json串
    :param response:
    :param schema:
    :return:
    '''
    result = True
    try:
        jsonschema.validate(response, schema)
    except ValidationError, e:
        print("fail")
        result = False
    return result
if __name__ == '__main__':
    # 生成request body
    body = generate_request("schema_file/create_config_request_schemas.json")
    # 使用request庫發送post請求
    url = "https://dev.honcloud.honeywell.com.cn:8080/dashboard/clustercentre/configmng/newconfig/addconfig"
    headers = {"Content-Type": "application/json", "authorization": "48a5eb61-914e-4b3a-a7a3-0b25f72d06d7"}
    response = requests.post(url, data=body, headers=headers)
    print(response.json())
    response_json=response.json()
    response_schema="schema_file/create_config_response_schemas.json"
    # 用生成的response的schema來檢查
    result=check_json_schema(response_json,response_schema)
    print(result)      

jsonprovider.py可以自行百度一個faker的provider的方案,我這裡做的也不好,随機出來的值隻遵循了字元類型,後面會考慮融合我們的邊界值分析,等價類劃分的方案進來,完善這個jsonprovider.py之後再放出來