自动发送请求并保存响应
Posted
技术标签:
【中文标题】自动发送请求并保存响应【英文标题】:Automate sending a request and saving the response 【发布时间】:2018-04-02 07:59:32 【问题描述】:有一个我想点击并保存响应的 URL。 URL id 每次都需要递增并保存响应。例如 -
首次获取请求 - http://google.com/getdata/?Id=1
第一反应 - 一个
第二个请求 - http://google.com/getdata/?Id=2
第二个响应 - 两个
等等……
我想每次都增加 id 来点击请求并保存响应
我尝试过使用提琴手,但无法弄清楚如何增加 id 并保存响应。
附: - 我必须获得大约 6,00,000 次点击
【问题讨论】:
您打算使用哪种脚本语言? 您能详细说明您希望如何保存回复吗? 【参考方案1】:既然提到了“Postman”标签,我可以帮助您了解如何在 Postman 中实现它。 Postman 有一个很好的使用“变量”的特性。
您可以使用环境变量或全局变量。
在他们的文档中了解更多信息: https://www.getpostman.com/docs/v6/postman/environments_and_globals/variables
您可以使用全局变量(例如“counter”)并将其设置为 1 / 任何您想要的起点。
然后你可以像这样修改你的请求:
http://google.com/getdata/?Id=iteration
现在,在请求的 Tests 脚本中,您可以编写以下脚本
let i = parseInt(pm.globals.get('iteration')) + 1;
pm.globals.set('iteration', i);
此外,要访问响应,您可以在 Test 脚本中使用以下命令:
console.log(pm.response); // Use pm.response as per your needs
将请求保存在集合中。 现在加载 Postman's Runner 并选择集合。 现在您可以将迭代计数设置为 6,00,000 并点击运行!
请记住,大量迭代会导致性能下降。
【讨论】:
我收到一个错误,“该请求没有任何测试” 这不是错误。跑步者表明你没有设置任何测试。但是,如果您在请求中编写了 console.log,那么 1)。启动 Postman 控制台(查看 > Postman 控制台)2)。现在使用 runner 运行集合。您会在控制台中看到您的回复。 问题是它显示 iteration 为未解决的变量,变量未在当前环境中定义 哦,您是否设置了一个环境,然后在其中放置了一个变量“迭代”?当您使用跑步者时,您需要从下拉列表中选择“环境” - 它就在左侧迭代框的上方。【参考方案2】:在JMeter中你需要点击,Ctrl+0和Ctrl+1来创建,线程组和HTTP Request
在线程组中将您需要的点击数放入Number of Threads (users)
在 HTTP 请求中放入 Server Name or IP
www.google.com 和 Path
/getdata/?Id=$__threadNum
__threadNum 将创建从线程 1 到命中数越来越多的数字。
对于少量点击或调试,您可以添加View Results Tree,通过在测试计划/线程组级别单击 Ctrl+9 来查看请求/响应。
要保存响应,请使用后处理器,尤其是通过单击 Ctrl+2 在 HTTP 请求下方添加 Regular Expression Extractor。
允许用户使用 Perl 类型的正则表达式从服务器响应中提取值。作为后处理器,该元素将在其范围内的每个 Sample 请求之后执行,应用正则表达式,提取请求的值,生成模板字符串,并将结果存储到给定的变量名中。
需要注意的是load testing你需要使用非GUI模式,这意味着使用命令行调用jmeter作为jmeter -n -t myTest.jmx
您将使用命令行模式(称为非 GUI 模式)来运行它以进行负载测试。 不要使用 GUI 模式运行负载测试!
要将所有响应保存到一个文件,请参阅save response data,或者如果您想为每个线程/用户保存文件,您可以添加Save Responses to a file
【讨论】:
感谢您的回复。我无法理解保存响应的过程。能否请您详细说明。 @Karma5 添加了有关保存回复的更多详细信息【参考方案3】:提琴手:
打开脚本编辑器(Control + r)然后在 OnBeforeResponse
中添加以下代码 static function OnBeforeResponse(oSession: Session)
if(oSession.oRequest["X-SAVE-ME"] != "")
oSession.SaveResponseBody("C:\\tempfiddler\\" + oSession.SuggestedFilename);
转到“作曲家”标签并在 URL 中包含带有任何值的标题 X-SAVE-ME,将您的 ID 替换为 #(就像这样:http://google.com/getdata/?Id=#) fiddler 现在会在执行前询问 ID 的开始和结束值;
【讨论】:
【参考方案4】:请在下面找到您的场景的快照。
Scenario_Testplan
首先,转到用户属性并输入“sample_variables = ID, Response_File_Name”或您为变量选择的任何名称。重启jmeter。 创建以下计划:-
-
CSV 数据集配置具有增量值和响应文件名
HTTP 请求将使用 $ID
将响应保存到文件将使用 $Response_File_Name
希望这会有所帮助。
【讨论】:
【参考方案5】:我会通过命令行执行此操作,使用带有 curl 到 URL 的 while 循环,将标准输出上的正文结果存储到文件中。它看起来像这样:
for i in 1..600000; do curl "http://google.com/getdata/?id=$i" > body-result-id-$i; done
我无法测试上面的行,因为我现在无法访问控制台,但我认为它应该可以工作。
【讨论】:
【参考方案6】:在 Burp 中,您可以使用 Intruder 工具执行此操作。首先,在 Burp 中捕获一个示例请求。如果您不确定如何执行此操作,请参阅getting started 文档。
然后右键单击请求并选择“发送给入侵者”。
在 Intruder 中的 Positions 选项卡中,首先单击“Clear”,然后选择要更改的部分,然后单击“Add”
在 Payloads 选项卡中,将 Payload 类型选择为“Numbers”并配置范围。
点击“开始攻击”
更多信息,请咨询documentation。
【讨论】:
【参考方案7】:另一个解决方案是您可以在 jmeter 中使用 Counter。你可以从下面的路径中找到 线程组 > configElement > 计数器。
-
根据需要配置计数器。
为计数器提供参考名称 i。
在您的请求中使用变量
更多信息。
【讨论】:
以上是关于自动发送请求并保存响应的主要内容,如果未能解决你的问题,请参考以下文章