码迷,mamicode.com
首页 > Web开发 > 详细

接口自动化增加jsonschema验证

时间:2019-12-20 20:55:57      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:比较   vat   img   def   mamicode   BYD   void   map   sch   

1. pom.xml 配置

    <dependency>
      <groupId>com.github.fge</groupId>
      <artifactId>json-schema-validator</artifactId>
      <version>2.2.6</version>
    </dependency>

2. 数据源即 jsonschema文件。

文件放置于resources目录下,因为测试与线上的数据返回有所不同,所以结合环境隔离

技术图片

 

 3. jsonschema和接口返回的校验

package util;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.fge.jackson.JsonNodeReader;
import com.github.fge.jsonschema.core.report.ProcessingMessage;
import com.github.fge.jsonschema.core.report.ProcessingReport;
import com.github.fge.jsonschema.main.JsonSchemaFactory;
import org.testng.Assert;
import org.testng.Reporter;
import java.io.IOException;
import java.io.InputStream;

/**
 * JsonSchema工具类
 */
public class jsonSchemaUtil {
    /**
     * 从指定路径读取Schema信息
     *
     * @param filePath Schema路径
     * @return JsonNode型Schema
     * @throws IOException 抛出IO异常
     */
    private static JsonNode readJSONfile(String filePath) throws IOException {
        InputStream stream = jsonSchemaUtil.class.getClassLoader().getResourceAsStream(filePath);
        return new JsonNodeReader().fromInputStream(stream);
    }


    /**
     * 将Json的String型转JsonNode类型
     *
     * @param str 需要转换的Json String对象
     * @return 转换JsonNode对象
     * @throws IOException 抛出IO异常
     */
    private static JsonNode readJSONStr(String str) throws IOException {
        return new ObjectMapper().readTree(str);
    }

    /**
     * 将需要验证的JsonNode 与 JsonSchema标准对象 进行比较
     *
     * @param schema schema标准对象
     * @param data   需要比对的Schema对象
     */
    private static void assertJsonSchema(JsonNode schema, JsonNode data) {
        ProcessingReport report = JsonSchemaFactory.byDefault().getValidator().validateUnchecked(schema, data);
        if (!report.isSuccess()) {
            for (ProcessingMessage aReport : report) {
                Reporter.log(aReport.getMessage(), true);
            }
        }
        Assert.assertTrue(report.isSuccess());
    }


    /**
     * 将需要验证的response 与 JsonSchema标准对象 进行比较
     *
     * @param schemaPath JsonSchema标准的路径
     * @param responseJson   需要验证的Json数据
     * @throws IOException 抛出IO异常
     */
    public static void assertResponseJsonSchema(String schemaPath, String responseJson) throws IOException {
        JsonNode jsonSchema = readJSONfile(schemaPath);
        JsonNode responseJN = readJSONStr(responseJson);
        assertJsonSchema(jsonSchema, responseJN);
    }
}

 

接口自动化增加jsonschema验证

标签:比较   vat   img   def   mamicode   BYD   void   map   sch   

原文地址:https://www.cnblogs.com/zqlmmd/p/12074645.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!