需求
假定有如主圖相同的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

2.打開
把輸入json和輸入json 轉換成jsonschema
3.把輸入jsonschema檔案,輸出檔案jsonschema放入相應的目錄,自己寫一個用于生成随機requestbody的provider和一個測試用的主函數
4.運作測試主入口檔案,列印一下發送的json檔案,看是不是随機化了,結果是确實随機化了。
代碼
測試主入口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之後再放出來