Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Stringbody中传递json字符串,并在Gatling中传递动态值?_Json_Scala_Performance Testing_Load Testing_Gatling - Fatal编程技术网

如何在Stringbody中传递json字符串,并在Gatling中传递动态值?

如何在Stringbody中传递json字符串,并在Gatling中传递动态值?,json,scala,performance-testing,load-testing,gatling,Json,Scala,Performance Testing,Load Testing,Gatling,我必须在我的加特林请求的StringBody中传递这个字符串 {"definitionId":4891544, "stringVariables" : {"Copy 1-json-metadata-instance":" {\r\n \"external-resource\": {\r\n \"id\": 4881561,\r\n \"name\": \"Training Outbound-File\",\r\n \"type\": \"resource\"\r\n },\r\n \"asset

我必须在我的加特林请求的StringBody中传递这个字符串

{"definitionId":4891544, "stringVariables" : {"Copy 1-json-metadata-instance":" {\r\n \"external-resource\": {\r\n \"id\": 4881561,\r\n \"name\": \"Training Outbound-File\",\r\n \"type\": \"resource\"\r\n },\r\n \"asset-context\": {\r\n \"value\": \".\",\r\n \"isExpression\": false\r\n },\r\n \"vfs-location\": {\r\n \"protocol\": \"FILE\",\r\n \"port\": 0,\r\n \"path\": \"/fx/fx-enterprise/storage/media/Training Outbound-FILE\"\r\n }", "Copy 2-json-metadata-instance":" {\r\n \"external-resource\": {\r\n \"id\": 48218841,\r\n \"name\": \"Training Outbound-File\",\r\n \"type\": \"resource\"\r\n },\r\n \"asset-context\": {\r\n \"value\": \".\",\r\n \"isExpression\": false\r\n },\r\n \"vfs-location\": {\r\n \"protocol\": \"FTP\",\r\n \"hostname\": \"ntvt.upload.llnw.net\",\r\n \"port\": 0,\r\n \"path\": \"/poc/V5Dev/R1\",\r\n \"username\": \"ntvt-ht-nt-staging\",\r\n \"password\": \"jpc6t8\"\r\n }"} }}}
这是我的scala脚本

// Dynamic Json values  
    val filePath = System.getProperty("filePath", "/fx/fx-enterprise/storage/media/Training Outbound-FILE")
    val ftpHostname = System.getProperty("ftpHostname", "ntvt.upload.llnw.net")
    val ftpUsername = System.getProperty("ftpUsername", "ntvt-ht-nt-staging")
    val ftpPassword = System.getProperty("ftpPassword", "jpc6t8")
    val ftpPath = System.getProperty("ftpPath", "/poc/V5Dev/R1")
    val UUID = System.getProperty("UUID", "b71awerv-4946-4bwe-8eqa-2412fgh98002")
    val definitionId = System.getProperty("definitionId", "48924212")

    val scn = scenario("Launch")
            .exec(http("Wf")
            .post("""/api/workflows""")
            .headers(headers_0)
    // Modification-1   
        .body(StringBody(s"""{"definitionId":"${definitionId}", "stringVariables" : { "Copy 1-json-metadata-instance":" {\r\n \"external-resource\": {\r\n \"id\": 488841,\r\n \"name\": \"Training Outbound-File\",\r\n \"type\": \"resource\"\r\n },\r\n \"asset-context\": {\r\n \"value\": \".\",\r\n \"isExpression\": false\r\n },\r\n \"vfs-location\": {\r\n \"protocol\": \"FILE\",\r\n \"port\": 0,\r\n \"path\": \"${filePath}\"\r\n }", "Copy 2-json-metadata-instance":" {\r\n \"external-resource\": {\r\n \"id\": 488841,\r\n \"name\": \"Training Outbound-File\",\r\n \"type\": \"resource\"\r\n },\r\n \"asset-context\": {\r\n \"value\": \".\",\r\n \"isExpression\": false\r\n },\r\n \"vfs-location\": {\r\n \"protocol\": \"FTP\",\r\n \"hostname\": \"${ftpHostname}\",\r\n \"port\": 0,\r\n \"path\": \"${ftpPath}\",\r\n \"username\": \"${ftpUsername}\",\r\n \"password\": \"${ftpPassword}\"\r\n }"} } }}""")).asJSON)   

    //Modification-2
        //  .body(StringBody(s"""{"definitionId":"$definitionId", "stringVariables" : { "Copy 1-json-metadata-instance":" {"external-resource": {"id": 488841,"name": "Training Outbound-File", "type": "resource"},"asset-context": {"value": ".","isExpression": false},"vfs-location": {"protocol": "FILE","port": 0,"path": "$filePath"}", "Copy 2-json-metadata-instance":" {"external-resource": {"id": 488841,"name": "Training Outbound-File","type": "resource"},"asset-context": {"value": ".","isExpression": false},"vfs-location": {"protocol": "FTP","hostname": "$ftpHostname","port": 0,"path": "$ftpPath","username": "$ftpUsername","password": "$ftpPassword"}"} } }}""")))   

    setUp(scn.inject(atOnceUsers(userCount))).protocols(httpProtocol)
如果我按原样传递原始字符串(不带动态值),它会工作) 抛出以下错误:

==修改后的输出-1====

compositeByteData={"definitionId":"4891544", "stringVariables" : { "Copy 1-json-metadata-instance":"
 {
 "external-resource": {
 "id": 488841,
 "name": "Training Outbound-File",
 "type": "resource"
 },
 "asset-context": {
 "value": ".",
 "isExpression": false
 },
 "vfs-location": {
 "protocol": "FILE",
 "port": 0,
 "path": "/fx/fx-enterprise/storage/media/Training Outbound-FILE"
 }", "Copy 2-json-metadata-instance":" {
 "external-resource": {
 "id": 488841,
 "name": "Training Outbound-File",
 "type": "resource"
 },
 "asset-context": {
 "value": ".",
 "isExpression": false
 },
 "vfs-location": {
 "protocol": "FTP",
 "hostname": "ntvt.upload.llnw.net",
 "port": 0,
 "path": "/poc/V5Dev/R1",
 "username": "ntvt-ht-nt-staging",
 "password": "jpc6t8"
 }"} } }}
realm=Realm{principal='masteruser', password='masteruser', scheme=BASIC, realmName='null', nonce='n
ull', algorithm='null', response='null', qop='null', nc='00000001', cnonce='null', uri='null', meth
odName='GET', useAbsoluteURI='false', omitQuery='false'}
=========================
HTTP response:
status=
500 Internal Server Error
headers=
Content-Type: [application/json]
Date: [Tue, 20 Dec 2016 10:41:29 GMT]
Server: [Apache-Coyote/1.1]
Content-Length: [69]
Connection: [keep-alive]

body=
{
  "errors" : {
    "error" : "Error while processing request"
  }
}   
==修改后的输出-2====

body=
{
  "errors" : {
    "error" : "Unexpected character ('e' (code 101)): was expecting comma to separate OBJECT entries\n at [Source: org.apache.catalina.connector.CoyoteInputStream@201d449c; line: 1, column: 86]"
  }
}

在Scala中的任何
字符串之前添加
s
时,调用字符串插值器。根据其文档,您必须删除所有反斜杠,因为它们会导致InvalidEscapeException

  /** The simple string interpolator.
   *
   *  It inserts its arguments between corresponding parts of the string context.
   *  It also treats standard escape sequences as defined in the Scala specification.
   *  Here's an example of usage:
   *  {{{
   *    val name = "James"
   *    println(s"Hello, $name")  // Hello, James
   *  }}}
   *  In this example, the expression $name is replaced with the `toString` of the
   *  variable `name`.
   *  The `s` interpolator can take the `toString` of any arbitrary expression within
   *  a `${}` block, for example:
   *  {{{
   *    println(s"1 + 1 = ${1 + 1}")
   *  }}}
   *  will print the string `1 + 1 = 2`.
   *
   *  @param `args` The arguments to be inserted into the resulting string.
   *  @throws IllegalArgumentException
   *          if the number of `parts` in the enclosing `StringContext` does not exceed
   *          the number of arguments `arg` by exactly 1.
   *  @throws StringContext.InvalidEscapeException
   *          if a `parts` string contains a backslash (`\`) character
   *          that does not start a valid escape sequence.
   */
  def s(args: Any*): String = standardInterpolator(treatEscapes, args)
我建议删除所有“\” 也将“替换为”


我希望这会有所帮助,我格式化了JSON字符串正文,并在JSON对象开始声明的地方找到了引号。请看屏幕截图。我不确定您的JSON是否有效,删除了\r\n并添加了额外的反斜杠\(我的意思是使用双反斜杠\而不是单反斜杠)


嗨,Alex,我已经从代码中删除了所有“/”和“/r/n”,并将“替换为”但相同的“错误”:“处理请求时出错”谢谢Alex的回答。它使用\\而不是\
.body(StringBody(s"""{"definitionId":${definitionId}, "stringVariables" : { "Copy 1-json-instance":" { \\"external-resource\\": { \\"id\\": 48234231, \\"name\\": \\"Outbound-File\\", \\"type\\": \\"resource\\" }, \\"asset-context\\": { \\"value\\": \\".\\", \\"isExpression\\": false }, \\"location\\": { \\"protocol\\": \\"FILE\\", \\"port\\": 0, \\"path\\": \\"${filePath}\\" }", "Copy 2-json-instance":" { \\"external-resource\\": { \\"id\\": 4823441, \\"name\\": \\"Outbound-File\\", \\"type\\": \\"resource\\" }, \\"asset-context\\": { \\"value\\": \\".\\", \\"isExpression\\": false }, \\"location\\": { \\"protocol\\": \\"FTP\\", \\"hostname\\": \\"${ftpHostname}\\", \\"port\\": 0, \\"path\\": \\"${ftpPath}\\", \\"username\\": \\"${ftpUsername}\\", \\"password\\": \\"${ftpPassword}\\" }"} }""")))