需求
假定有如主图相同的http请求。我们一般的做法是,用postman去抓取http请求,然后修改request的body或者header里的数据,点击send按钮,检查返回的response的body是否正确。
对于输入。一般来说,我们会纯手工,或者半自动的,设计测试用例。例如使用边界值分析,等价类划分等方法,用在我们的输入参数中。比如我参数中的configname最多200个参数,我测试输入201个参数。
对于输出。一般来说,我们大部分时候是肉眼检查,或者写代码,通过jsonpath取参数,然后判断是否存在来检查。
这里我打算用一个新的方法来降低测试的手工特性,让他更自动化一点。以下想法还处于调试阶段,用于大规模使用,暂时不行。
设计
输入修改方案:引入faker库和jsonschema库。通过这两个库,我们可以产生随机的json串
faker是我无意之间发现的,能按照规律产生随机字的库,例如
fake.name()
是产生一个随机的名字,只要加入适当的providers,就能按照需要的规则产生随机字
jsonschema这个用的人很多,这里就不介绍了,下面推荐一个网站,能把json请求转换为schema格式
schema中会注明每个字段的规则,例如是string类型还是integer。
输出修改方案:使用jsonschma的validate方法来检查(这种检查方法目前有一些检查不充分,但是已经可以让测试人员减少一些工作量了)
jsonschema.validate(response, schema)
使用方案
1.去postman抓取http请求,并且记录下所需要的输入json和输出json2.打开https://jsonschema.net/ 把输入json和输入json 转换成jsonschema3.把输入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之后再放出来