как принять часть динамического http-запроса c, зашифровать его и заменить результат внутри http-запроса с помощью Jmeter - PullRequest
2 голосов
/ 08 января 2020

Я новичок в Jmeter. У меня есть запрос динамического c http, где определенные значения зависят от значений предыдущего запроса http. Существует encryptedKey и значение, а также. Это значение рассчитывается на основе объекта сведений, который является динамическим c. Я пишу java функцию для шифрования части динамического c запроса. Значение encryptedValue должно быть заменено результатом функции java. Dynami c Http Request: -

{
  "ver": "1.0",
  "timestamp":"2019-08-28T11:39:57.153Z",
  "Details": {
        "key": "Previous API call value",
        "key": "Previous API call value"
      },
  "EncryptedKey": "EncryptedValue"
}

Мне нужно взять только объект Details и применить к нему утилиту шифрования. Затем я должен заменить «EncryptedValue» на результат функции java и затем сделать http-запрос. Как мне сделать это в Jmeter?

То, что я пробовал до сих пор: -

В настоящее время я загружаю объект подробностей в отдельный файл и считываю его, используя java, и шифрую его.

Итак, мой последний http-запрос выглядит следующим образом: -

{
  "ver": "1.0",
  "timestamp":"2019-08-28T11:39:57.153Z",
  "Details": {
        "key": "Previous API call value",
        "key": "Previous API call value"
      },
  "EncryptedKey": "${__groovy(new com.util.Encryption().encryptData(), encryptedValue)}"
}

Но это не может заменить «Предыдущее значение вызова API» на результат предыдущего http-запроса. Есть ли другой способ решить эту проблему?

1 Ответ

1 голос
/ 08 января 2020

Если вы хотите полностью заменить тело запроса, вы можете рассмотреть возможность использования JSR223 PreProcessor и использовать такой код:

Отказ от ответственности: я не могу гарантировать, что приведенный ниже код будет работать как ваши данные запроса образца недействительны JSON, и я понятия не имею, как реализована ваша функция Encryption().encryptData()

def requestBody = new groovy.json.JsonSlurper().parseText(sampler.getArguments().getArgument(0).getValue())
def key = requestBody.Details.key
requestBody.EncryptedKey = new com.util.Encryption().encryptData(key)
def arguments = new org.apache.jmeter.config.Arguments()
sampler.setArguments(arguments)
sampler.addNonEncodedArgument('', new groovy.json.JsonBuilder(requestBody).toPrettyString(),'')
sampler.setPostBodyRaw(true)

Но вам придется переписать функцию com.util.Encryption().encryptData(), чтобы принять ключ в качестве параметра вместо чтения его из файловой системы.

В приведенном выше примере кода sampler обозначает класс HTTPSamplerProxy , см. JavaDo c для всех доступных функций.

Также проверьте Apache Groovy: парсинг и создание JSON для получения дополнительной информации об этих JsonSlurper и JsonBuilder классах и Apache Groovy - Почему и как вы должны его использовать статья для всестороннего обзора сценариев Groovy в JMeter в целом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...