空手道:json 中解析变量的奇怪问题
Karate: strange issue with parsing variables in json
我今天更新 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 和其余变量未正确解析。但是当我删除 json:
中的所有空格 ("host: '#(amqpHst)'" > "host:'#(amqpHst)'")
* 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 或其中一个插件后出现的。我用:
想法 2018.3.5 CE(构建#IC-183.591221)
Java v183.5429.1
的黄瓜
首先 - 请注意,有一种非常方便的方法可以使用 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
我今天更新 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 和其余变量未正确解析。但是当我删除 json:
中的所有空格 ("host: '#(amqpHst)'" > "host:'#(amqpHst)'")* 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 或其中一个插件后出现的。我用: 想法 2018.3.5 CE(构建#IC-183.591221) Java v183.5429.1
的黄瓜首先 - 请注意,有一种非常方便的方法可以使用 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