【问题标题】:Jmeter: parameterization issue with request BodyJmeter:请求正文的参数化问题
【发布时间】:2016-05-25 14:04:21
【问题描述】:

我正在发送带有一个参数化参数 ${id} 的以下请求,请求看起来像 实际信息:

{"Data":"{\"Source\":\"#include <stdio.h>\\nint main()\\n{\\nint n;\\nprintf(\\\"Enter an integer\\\");\\nscanf(\\\"%d\\\", &n);\\nif (n%2 == 0)\\nprintf(\\\"Even\\\");\\nelse\\nprintf(\\\"Odd\\\");\\nreturn 0;\\n}\",\"Lang\":\"c\",\"callback_url\":\"callback_url_string\",\"cid\":\"159:60719:2667:${id}\"}","Action":"compile","TenantId":"159","UserId":"0","CID":"159:60719:2667:${id}","LanguageId":"25331"}

但是在发送请求时,JMETER 正在改变请求(删除像 \'s 这样的少数格式)并发送到服务器并且服务器以错误的请求响应进行响应。

JMETER 发送如下:

{"Data":"{\"Source\":\"#include <stdio.h>\nint main()\n{\nint n;\nprintf(\\"Enter an integer\\");\nscanf(\\"%d\\", &n);\nif (n%2 == 0)\nprintf(\\"Even\\");\nelse\nprintf(\\"Odd\\");\nreturn 0;\n}\",\"Lang\":\"c\",\"callback_url\":\"callback_url_string\",\"cid\":\"159:60719:2667:558019\"}","Action":"compile","TenantId":"159","UserId":"0","CID":"159:60719:2667:558019","LanguageId":"25331"}

如果您在没有参数化的情况下发送上述请求(输入值),那么它可以正常工作。

请告诉我如何解决此问题。

【问题讨论】:

    标签: jmeter


    【解决方案1】:

    我假设这是一个 POST HTTP 请求,并且正文部分有这些数据

    能否请将 HTTP 正文指向以下从 bin 目录开始的相对路径

    ${__eval(${__FileToString(path/to/payloadfile.txt,,)})}
    

    现在 payloadfile.txt 仍然可以包含实际内容,它还将评估 ${ID} 和其他变量。

    如果有帮助别忘了点击回答。乐于助人,祝测试愉快

    优化:

    我使用过在线工具:

    先看第一个地方的数据是正确的https://jsonformatter.curiousconcept.com/

    我看到了

    {  
       "Data":{  
          "Source":"#include <stdio.h\/>\r\n int main()\r\n {\r\n int n;\r\n printf(\"Enter an integer\");\r\n scanf(\"%d\", &n);\r\n if (n%2 == 0)\r\n printf(\"Even\");\r\n else\r\n printf(\"Odd\");\r\n return 0;\r\n "
       },
       "Lang":"c",
       "callback_url":"callback_url_string",
       "cid":"159:60719:2667:${id}",
       "Action":"compile",
       "TenantId":"159",
       "UserId":"0",
       "CID":"159:60719:2667:${id}",
       "LanguageId":"25331"
    }
    

    我单独分离出C程序

    #include <stdio.h/>
     int main()
     {
     int n;
     printf("Enter an integer");
     scanf("%d", &n);
     if (n%2 == 0)
     printf("Even");
     else
     printf("Odd");
     return 0;
     }
    

    并使用在线工具应用转义字符[应用java脚本转义]

    http://www.freeformatter.com/javascript-escape.html#ad-output

    输出:

    #include <stdio.h\/>\r\n int main()\r\n {\r\n int n;\r\n printf(\"Enter an integer\");\r\n scanf(\"%d\", &n);\r\n if (n%2 == 0)\r\n printf(\"Even\");\r\n else\r\n printf(\"Odd\");\r\n return 0;\r\n }
    

    这是我使用的,它显示了有效的 json 文档。如果您没有发送有效的 json 文档服务器将抛出错误。不要在 HTTP 采样器中选择编码

    【讨论】:

    • 感谢您的回复。我尝试了您的建议,但如上所述,请求仍然出错。我观察到的一件事是 \n 和 printf/scanf... 导致了这个问题。
    • 如果你是从一个文件发送它,为什么你不能将 c 程序参数化到一个文件中并引用该文件,这样你就不必在你的 c 程序中放置 \n 和转义字符, 现在有效载荷部分看起来 "Source":"${${__FileToString(path/to/cprogram.txt,,)}} "
    • 实际上我正在录制一些脚本并尝试再次运行,虽然录制正确但在添加参数化参数 ${id} 并尝试再次运行后,我遇到了上述问题。跨度>
    • 请附上通过 jmeter 的请求截图。我的意思是查看此特定请求的结果树屏幕截图。您可以通过编辑您的问题并附上图片来做到这一点。顺便说一句,这个 ${id} 是从哪里来的,你在使用它之前是否将它存储到一个名为 id 的变量中
    • 这是 JMETER 记录的值: {"Data":"{\"Source\":\"# Python Program to Reverse a Number using While loop\\n \\nNumber = int (input(\\\"请输入任意数字:\\\"))\\nReverse = 0\\nwhile(Number > 0):\\n Reminder = Number %10\\n Reverse = (Reverse *10) + 提醒\\n Number = Number\\nprint(\\\"\\\\n 输入数字的反转是 = %d\\\" %Reverse)\",\"Lang\":\"python3\" ,\"callback_url\":\"callback_url_string\",\"cid\":\"159:60719:2667:1000\"}","Action":"compile","TenantId":"159"," UserId":"0","CID":"159:60719:2667:1000","LanguageId":"25336"}
    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 2020-07-19
    • 2021-11-12
    相关资源
    最近更新 更多