zoukankan      html  css  js  c++  java
  • 接口自动化增加jsonschema验证

    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);
        }
    }
  • 相关阅读:
    BZOJ3518 : 点组计数
    BZOJ2217 : [Poi2011]Lollipop
    李洪强经典面试题40-可能碰到的iOS笔试面试题-C语言
    对AFN的二次封装
    李洪强经典面试题39-iOS 程序员 6 级考试(答案和解释)
    iOS五种本地缓存数据方式
    iOS开发网络篇—数据缓存
    iOS中的通知
    李洪强漫谈iOS开发[C语言-048]-打印平方表
    李洪强漫谈iOS开发[C语言-047]-数列求和
  • 原文地址:https://www.cnblogs.com/zqlmmd/p/12074645.html
Copyright © 2011-2022 走看看