2016-12-13 2 views
2

내 요청에 대해 json 응답을 받고 있습니다. 따라서 jMeter에서 구조 및 데이터 형식 유효성 검사에 JSONSchema을 사용하고 싶습니다.

최선의 방법으로 어떻게이 작업을 수행 할 수 있습니까?
이러한 종류의 작업을 수행하기 위해 jMeter에 사용할 수있는 플러그인이 있습니까?jMeter에서 JSONSchema를 사용하여 JSON 데이터의 유효성을 검사하는 방법

:

응답 JSON은

{ 
    "id": "60D5B6D2-9607-4E23-91D0-14EB5EA806EA", 
    "imp": [ 
    { 
     "id": "1", 
     "tagid": "759926", 
     "banner": { 
     "w": 300, 
     "h": 250, 
     "topframe": 1, 
     "api": [ 
      5 
     ] 
     } 
    } 
    ] 
} 

JSONSchema이

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "type": "object", 
    "properties": { 
    "id": { 
     "type": "string" 
    }, 
    "imp": { 
     "type": "array", 
     "items": { 
     "type": "object", 
     "properties": { 
      "id": { 
      "type": "string" 
      }, 
      "tagid": { 
      "type": "string" 
      }, 
      "banner": { 
      "type": "object", 
      "properties": { 
       "w": { 
       "type": "integer", 
       "minimim": 10, 
       "maximum": 150 
       }, 
       "h": { 
       "type": "integer", 
       "minimim": 10, 
       "maximum": 150 
       }, 
       "topframe": { 
       "type": "integer", 
       "minimim": 10, 
       "maximum": 150 
       }, 
       "api": { 
       "type": "array", 
       "items": { 
        "type": "integer" 
       } 
       } 
      }, 
      "additionalProperties": false, 
      "required": [ 
       "w", 
       "h", 
       "topframe", 
       "api" 
      ] 
      } 
     }, 
     "additionalProperties": false, 
     "required": [ 
      "id", 
      "tagid", 
      "banner" 
     ] 
     } 
    } 
    }, 
    "additionalProperties": false, 
    "required": [ 
    "id", 
    "imp" 
    ] 
} 

답변

2

Validate JSON against Schema in Java 기사에서 설명한 것처럼 스크립팅을 수행해야하므로 스키마에 대해 JSON 객체의 유효성을 검사 할 수있는 기능이 기본적으로 제공되지 않습니다. 참조 링크가 죽으면 그냥 경우에, 당신은 JMeter Classpath

activation-1.1.jar 
btf-1.2.jar 
guava-16.0.1.jar 
jackson-annotations-2.2.3.jar 
jackson-core-2.2.3.jar 
jackson-coreutils-1.8.jar 
jackson-databind-2.2.3.jar 
joda-time-2.3.jar 
jopt-simple-4.6.jar 
json-schema-core-1.2.5.jar 
json-schema-validator-2.2.6.jar 
jsr305-3.0.0.jar 
libphonenumber-6.2.jar 
mailapi-1.4.3.jar 
msg-simple-1.1.jar 
rhino-1.7R4.jar 
uri-template-0.9.jar 

가장 빠른에서 다음 라이브러리가 필요합니다 그들을 얻는 가장 쉬운 방법은 같은 최소한의 pom.xml 파일을 생성한다 :

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>foo</groupId> 
    <artifactId>bar</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <dependencies> 
     <!-- https://mvnrepository.com/artifact/com.github.fge/json-schema-validator --> 
     <dependency> 
      <groupId>com.github.fge</groupId> 
      <artifactId>json-schema-validator</artifactId> 
      <version>2.2.6</version> 
     </dependency> 
     <!-- https://mvnrepository.com/artifact/com.github.fge/jackson-coreutils --> 
     <dependency> 
      <groupId>com.github.fge</groupId> 
      <artifactId>jackson-coreutils</artifactId> 
      <version>1.8</version> 
     </dependency> 
     <!-- https://mvnrepository.com/artifact/com.github.fge/json-schema-core --> 
     <dependency> 
      <groupId>com.github.fge</groupId> 
      <artifactId>json-schema-core</artifactId> 
      <version>1.2.5</version> 
     </dependency> 
    </dependencies> 


</project> 

mvn dependency:copy-dependencies을 실행 명령. JSR223 Assertion에서

import java.io.File; 
import java.io.IOException; 
import java.net.URL; 

import com.fasterxml.jackson.databind.JsonNode; 
import com.fasterxml.jackson.databind.node.ObjectNode; 
import com.github.fge.jackson.JsonLoader; 
import com.github.fge.jsonschema.core.exceptions.ProcessingException; 
import com.github.fge.jsonschema.core.report.ProcessingMessage; 
import com.github.fge.jsonschema.core.report.ProcessingReport; 
import com.github.fge.jsonschema.main.JsonSchema; 
import com.github.fge.jsonschema.main.JsonSchemaFactory; 


public class ValidationUtils { 

    public static final String JSON_V4_SCHEMA_IDENTIFIER = "http://json-schema.org/draft-04/schema#"; 
    public static final String JSON_SCHEMA_IDENTIFIER_ELEMENT = "$schema"; 

    public static JsonNode getJsonNode(String jsonText) 
      throws IOException 
    { 
     return JsonLoader.fromString(jsonText); 
    } // getJsonNode(text) ends 

    public static JsonNode getJsonNode(File jsonFile) 
      throws IOException 
    { 
     return JsonLoader.fromFile(jsonFile); 
    } // getJsonNode(File) ends 

    public static JsonNode getJsonNode(URL url) 
      throws IOException 
    { 
     return JsonLoader.fromURL(url); 
    } // getJsonNode(URL) ends 

    public static JsonNode getJsonNodeFromResource(String resource) 
      throws IOException 
    { 
     return JsonLoader.fromResource(resource); 
    } // getJsonNode(Resource) ends 

    public static JsonSchema getSchemaNode(String schemaText) 
      throws IOException, ProcessingException 
    { 
     final JsonNode schemaNode = getJsonNode(schemaText); 
     return _getSchemaNode(schemaNode); 
    } // getSchemaNode(text) ends 

    public static JsonSchema getSchemaNode(File schemaFile) 
      throws IOException, ProcessingException 
    { 
     final JsonNode schemaNode = getJsonNode(schemaFile); 
     return _getSchemaNode(schemaNode); 
    } // getSchemaNode(File) ends 

    public static JsonSchema getSchemaNode(URL schemaFile) 
      throws IOException, ProcessingException 
    { 
     final JsonNode schemaNode = getJsonNode(schemaFile); 
     return _getSchemaNode(schemaNode); 
    } // getSchemaNode(URL) ends 

    public static JsonSchema getSchemaNodeFromResource(String resource) 
      throws IOException, ProcessingException 
    { 
     final JsonNode schemaNode = getJsonNodeFromResource(resource); 
     return _getSchemaNode(schemaNode); 
    } // getSchemaNode() ends 

    public static void validateJson(JsonSchema jsonSchemaNode, JsonNode jsonNode) 
      throws ProcessingException 
    { 
     ProcessingReport report = jsonSchemaNode.validate(jsonNode); 
     if (!report.isSuccess()) { 
      for (ProcessingMessage processingMessage : report) { 
       throw new ProcessingException(processingMessage); 
      } 
     } 
    } // validateJson(Node) ends 

    public static boolean isJsonValid(JsonSchema jsonSchemaNode, JsonNode jsonNode) throws ProcessingException 
    { 
     ProcessingReport report = jsonSchemaNode.validate(jsonNode); 
     return report.isSuccess(); 
    } // validateJson(Node) ends 

    public static boolean isJsonValid(String schemaText, String jsonText) throws ProcessingException, IOException 
    { 
     final JsonSchema schemaNode = getSchemaNode(schemaText); 
     final JsonNode jsonNode = getJsonNode(jsonText); 
     return isJsonValid(schemaNode, jsonNode); 
    } // validateJson(Node) ends 

    public static boolean isJsonValid(File schemaFile, File jsonFile) throws ProcessingException, IOException 
    { 
     final JsonSchema schemaNode = getSchemaNode(schemaFile); 
     final JsonNode jsonNode = getJsonNode(jsonFile); 
     return isJsonValid(schemaNode, jsonNode); 
    } // validateJson(Node) ends 

    public static boolean isJsonValid(URL schemaURL, URL jsonURL) throws ProcessingException, IOException 
    { 
     final JsonSchema schemaNode = getSchemaNode(schemaURL); 
     final JsonNode jsonNode = getJsonNode(jsonURL); 
     return isJsonValid(schemaNode, jsonNode); 
    } // validateJson(Node) ends  

    public static void validateJson(String schemaText, String jsonText) throws IOException, ProcessingException{ 
     final JsonSchema schemaNode = getSchemaNode(schemaText); 
     final JsonNode jsonNode = getJsonNode(jsonText); 
     validateJson(schemaNode, jsonNode); 
    } // validateJson(text) ends 

    public static void validateJson(File schemaFile, File jsonFile) throws IOException, ProcessingException{ 
     final JsonSchema schemaNode = getSchemaNode(schemaFile); 
     final JsonNode jsonNode = getJsonNode(jsonFile); 
     validateJson(schemaNode, jsonNode); 
    } // validateJson(File) ends 

    public static void validateJson(URL schemaDocument, URL jsonDocument) throws IOException, ProcessingException{ 
     final JsonSchema schemaNode = getSchemaNode(schemaDocument); 
     final JsonNode jsonNode = getJsonNode(jsonDocument); 
     validateJson(schemaNode, jsonNode); 
    } // validateJson(URL) ends 

    public static void validateJsonResource(String schemaResource, String jsonResource) throws IOException, ProcessingException{ 
     final JsonSchema schemaNode = getSchemaNode(schemaResource); 
     final JsonNode jsonNode = getJsonNodeFromResource(jsonResource); 
     validateJson(schemaNode, jsonNode); 
    } // validateJsonResource() ends 

    private static JsonSchema _getSchemaNode(JsonNode jsonNode) 
      throws ProcessingException 
    { 
     final JsonNode schemaIdentifier = jsonNode.get(JSON_SCHEMA_IDENTIFIER_ELEMENT); 
     if (null == schemaIdentifier){ 
      ((ObjectNode) jsonNode).put(JSON_SCHEMA_IDENTIFIER_ELEMENT, JSON_V4_SCHEMA_IDENTIFIER); 
     } 

     final JsonSchemaFactory factory = JsonSchemaFactory.byDefault(); 
     return factory.getJsonSchema(jsonNode); 
    } // _getSchemaNode() ends 
} 

:

그 후 당신은 같은 것을 사용할 수 있습니다.

0

당신이 구조, 가치, 유형과 같은 JSON 문서의 검증을 (수행 할 수 있습니다 JSON Path Assertion JMeter를 플러그인을 시도입니다 한 번에 하나씩), 스키마 유효성 검사에는 적합하지 않습니다.

당신은 수동으로 항아리를 다운로드하고 그것을 /lib/ext 폴더를 넣어 JMeter를 다시 시작 JMeter-plugin Manager또는

를 사용하여 다운로드 할 수 있습니다. 문서에서


:

이 구성 요소를 사용하면 JSON 문서의 유효성 검사를 수행 할 수 있습니다.

먼저 JSON을 구문 분석하고 데이터가 JSON이 아닌 경우 실패합니다.

둘째, Jayway JsonPath 1.2.0의 구문을 사용하여 지정된 경로를 검색합니다. 경로를 찾을 수 없으면 실패합니다.

셋째, JSON 경로가 문서에서 발견되어 기대 값에 대한 유효성 검사가 요청 된 경우 유효성 검사가 수행됩니다. null 값의 경우 GUI에 특별한 체크 박스가 있습니다.

+0

JSON Path Assertion을 사용하여 JSON의 구조를 어떻게 검증 할 수 있습니까? – KC7

+0

다시 완전한 구조가 아닙니다.'Jayway JsonPath 1.2.0' 스타일을 사용하여 어설 션을 작성할 때 요소에 대한 경로를 찾을 수없는 경우 오류가 발생합니다. 간접적으로 구조를 테스트하고 있습니다. 내 대답의'Docs' 섹션에서 두 번째 포인트를 참조하십시오. –

관련 문제