Переменная в теле запроса заменяется на {} во время POST - PullRequest
0 голосов
/ 11 июня 2018

Я использую Каратэ DSL (версия 0.6.1.1), и у меня есть следующий сценарий:

  Scenario:
    Given url baseURL
    * def email = "test_email@test_domain.com"
    * def query = "SELECT * FROM public.users where username='" + email + "' ORDER BY user_id ASC"
    * def dbUrl = databaseUrl + "databaseName"
    * def config = { username: '#(databaseUsername)', password: '#(databasePassword)', url: '#(dbUrl)', driverClassName: 'org.postgresql.Driver' }
    * def DbUtils = Java.type('utility.database.DbUtils')
    * def db = new DbUtils(config)
    * def results = db.readRow(query)
    * def supplierId = results.user_id
    * print "SUPPLIERID: " + supplierId

    Given path '/path/to/endpoint'
    And header content-type = 'application/json'
    And request { supplierId: #(supplierId) }
    When method POST
    Then status 200

utility.database.DbUtils - это пользовательский класс, а readRow() - это единственный член строки этогокласс, который возвращает результат JdbcTemplate.queryForMap(query).

Запуск этого сценария дает следующий журнал:

<code>
    10:53:17.477 [main] INFO  com.intuit.karate - [print] SUPPLIERID: 957750e7-ee6b-486d-977c-05c8ac7bb589
    10:53:17.506 [main] INFO  com.intuit.karate - request:{
      "supplierId": 957750e7-ee6b-486d-977c-05c8ac7bb589
    }
    10:53:18.372 [main] DEBUG com.intuit.karate - 
    1 > POST <a href="http://baseurl.com/path/to/endpoint" rel="nofollow noreferrer">http://baseurl.com/path/to/endpoint</a>
    1 > Accept-Encoding: gzip,deflate
    1 > Connection: Keep-Alive
    1 > Content-Length: 17
    1 > Content-Type: application/json
    1 > Host: base.url.com
    1 > User-Agent: Apache-HttpClient/4.5.3 (Java/1.8.0_162)
    {"supplierId":{}}

Вы можете видеть, что сначала тело запроса имеет значение supplierId как 957750e7-ee6b-486d-977c-05c8ac7bb589.Как только POST сделан, хотя, supplierId просто {}.Похоже, это как-то связано с тем, что supplierId заполняется вызовом базы данных.Если я заменю вызов базы данных на простой * def supplierId = "957750e7-ee6b-486d-977c-05c8ac7bb589", тело запроса будет выглядеть так, как ожидалось.

Почему supplierId заменяется на {} при выполнении вызова POST и как мне остановитьэто от этого?

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Похоже, это была проблема с преобразованием типов.Я получил его, заменив * def supplierId = results.user_id на * string supplierId = results.user_id.

0 голосов
/ 12 июня 2018

Похоже, вы неправильно указали синтаксис встроенного выражения.Я думаю, что это одно изменение должно исправить, обратите внимание на строковые кавычки:

And request { supplierId: '#(supplierId)' }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...