Каратэ: странная проблема с разбором переменных в json - PullRequest
1 голос
/ 06 марта 2019

Я обнаружил эту проблему сегодня после обновления IDE:

Scenario: test scenario
    * def amqpHost = '10.10.10.10'
    * def amqpPort = 5555
    * def amqpUser = 'tesetUser'
    * def amqpPass = 'testPass'
    * def amqpExchange = 'test.rabbitmq.exchange'
    * def amqpQueueName = 'test.rabbitmq.queue'
    * def amqpRoute = 'test.rabbitmq.route'
    * def amqpVirtualHost = '/'

    * print "PORT: " + amqpPort
    * print "PORT: " + amqpUser
    * print "PORT: " + amqpPass
    * print "PORT: " + amqpExchange
    * print "PORT: " + amqpQueueName

    * def inputParams = { fleetId: '#(fleetId)', host: '#(amqpHost)', port:'#(amqpPort)', user:'#(amqpUser)', password: '#(amqpPassword)', exchange: '#(amqpExchange)', route: '#(amqpRoute)', virtual_host: '#(amqpVirtualHost)' }
    * print "INPUT: " + inputParams

Вывод:

[print] PORT: 5555
[print] PORT: tesetUser
[print] PORT: testPass
[print] PORT: test.rabbitmq.exchange
[print] PORT: test.rabbitmq.queue
[print] INPUT: {fleetId=#(fleetId), host=10.10.10.10, port=5555, user=tesetUser, password= '#(amqpPassword)', exchange= '#(amqpExchange)', route= '#(amqpRoute)', virtual_host= '#(amqpVirtualHost)'}

amqpPassword и остальные переменные не были проанализированы правильно.Но когда я удаляю все пробелы ("host: '# (amqpHst)'"> "host: '# (amqpHst)'") в json:

* def inputParams = { fleetId:'#(fleetId)', host:'#(amqpHost)', port:'#(amqpPort)', user:'#(amqpUser)', password:'#(amqpPassword)', exchange:'#(amqpExchange)', route:'#(amqpRoute)', virtual_host:'#(amqpVirtualHost)' }

я получаю результат:

{fleetId=#(fleetId), host=10.10.10.10, port=5555, user=tesetUser, password=#(amqpPassword), exchange=test.rabbitmq.exchange, route=test.rabbitmq.route, virtual_host=/}

Похоже, эта проблема появляется после моего обновления IntelliJ Idea или одного из плагинов сегодня.Я использую: Idea 2018.3.5 CE (build # IC-183.591221) Огурец для Java v183.5429.1

1 Ответ

1 голос
/ 06 марта 2019

Во-первых, обратите внимание, что существует очень удобный способ использования ключевого слова print, которое, при необходимости, печатает JSON, см. Ниже:

* print "PORT:", amqpPort
* print "PORT:", amqpUser
* print "PORT:", amqpPass
* print "PORT:", amqpExchange
* print "PORT:", amqpQueueName

* def inputParams = { fleetId: '#(fleetId)', host: '#(amqpHost)', port:'#(amqpPort)', user:'#(amqpUser)', password: '#(amqpPass)', exchange: '#(amqpExchange)', route: '#(amqpRoute)', virtual_host: '#(amqpVirtualHost)' }
* print "INPUT:", inputParams

И я получаю:

[print] INPUT: {
  "fleetId": "#(fleetId)",
  "host": "10.10.10.10",
  "port": 5555,
  "user": "tesetUser",
  "password": "testPass",
  "exchange": "test.rabbitmq.exchange",
  "route": "test.rabbitmq.route",
  "virtual_host": "/"
}

Так что это выглядит хорошо для меня. Предложение, почему бы не определить весь inputParams как сам JSON? Вы даже можете прочитать это из файла. И обратите внимание, как вы можете использовать foo.bar точечную нотацию:

* def inputParams = { fleetId: 'foo', host: '10.10.10.10', port: 5555, user: 'tesetUser', password: 'testPass', exchange: 'test.rabbitmq.exchange', route: 'test.rabbitmq.route', virtual_host: '/' }

* print "port:", inputParams.port
* print "user:", inputParams.user
* print "pass:", inputParams.password
* print "exch:", inputParams.exchange

* print "INPUT:", inputParams

Я не думаю, что это вообще связано с IDE - если вы все еще видите проблемы, следуйте этому процессу: https://github.com/intuit/karate/wiki/How-to-Submit-an-Issue

...