Как проверить ответ Jmeter JSON на данные базы данных - PullRequest
0 голосов
/ 30 октября 2019

Я ищу решение для подтверждения ответа Jmeter JSON на данные базы данных и печати несоответствий в сообщении результата утверждения

Пример ответа Jmeter JSON

{"data": [
        {
        "code": 99,
        "name": "A"
    },
        {
        "code": 2,
        "name": "B"
    },
        {
        "code": 7,
        "name": "C"
    },
        {
        "code": 4,
        "name": "D"
    },
        {
        "code": 6,
        "name": "E"
    },
        {
        "code": 3,
        "name": "C"
    }
]}

Данные базы данных, полученные через JDBC Sampler в виде JSON

[
        {
        "name": "A",
        "code": 1
    },
        {
        "name": "B",
        "code": 2
    },
        {
        "name": "F",
        "code": 7
    },
        {
        "name": "D",
        "code": 4
    },
        {
        "name": "E",
        "code": 6
    },
        {
        "name": "C",
        "code": 3
    }
]

Пример сообщения подтверждения

        Discrepancies 
     API                          DB
{"code": 99,"name": "a"} <->    {"name": "A","code": 1}  

Ответы [ 2 ]

0 голосов
/ 04 ноября 2019

Предполагая, что у вас есть значения JSON выше, сохраненные в fromJSON и fromDatabase Переменные JMeter соответственно

  1. Добавить Утверждение JSR223 как дочерний элемент Sampler , который вы хотите потерпеть неудачу
  2. Поместите следующий код в область «Сценарий»:

    def fromJSON = new groovy.json.JsonSlurper().parseText(vars.get('fromJSON'))
    def fromDatabase = new groovy.json.JsonSlurper().parseText(new groovy.json.JsonBuilder(data: new groovy.json.JsonSlurper().parseText(vars.get('fromDatabase'))).toPrettyString())
    
    
    def differences = fromJSON.collectEntries { k, v -> fromDatabase[k] ? [k, (v - fromDatabase[k])] : [:] }
    
    if (differences.data.size() != 0) {
        AssertionResult.setFailure(true)
        AssertionResult.setFailureMessage('Discrepancies : ' + System.getProperty('line.separator')
                + new groovy.json.JsonBuilder(differences).toPrettyString())
    }   
    
  3. Вот и все, вв случае несовпадений утверждение приведет к сбою пробоотборника и сообщит о различиях:

    enter image description here

Вас также могут заинтересовать альтернативные подходы, которыетребуется меньше знаний о коде и Groovy, например, Джексон или JSONAssert , посмотрите Самый простой способ сравнения ответов REST API с использованием статьи JMeter для получения более подробной информации.

0 голосов
/ 31 октября 2019

Вы пытались использовать утверждение JSR223?

См. https://www.blazemeter.com/blog/scripting-jmeter-assertions-in-groovy-a-tutorial/

Спасибо.

...