jmeter在非GUI模式下,怎么将多个http请求放在一个事务里面?我把多个HTTP请求放在了一个事务管理器里面,但是生成的报告和运行结果里面,都是分开的,这样要怎么设置?
在 JMeter 的非 GUI 模式下,您可以使用事务控制器(Transaction Controller)来将多个 HTTP 请求放在一个事务里面。事务控制器允许您对一组请求进行逻辑分组,并将它们作为一个整体来进行性能测试。
要将多个 HTTP 请求放在一个事务里面,您可以按照以下步骤操作:
在测试计划中添加一个事务控制器。右键单击测试计划 -> 添加 -> 逻辑控制器 -> 事务控制器。
将要放在事务中的 HTTP 请求添加到事务控制器下。右键单击事务控制器 -> 添加 -> 取样器 -> HTTP 请求。
重复步骤 2,添加其他 HTTP 请求到同一个事务控制器中。
这样,这些 HTTP 请求就会被视为一个事务,JMeter 将会对它们进行性能测试和统计分析。
在非 GUI 模式下执行测试时,您可以使用以下命令行参数来指定 JMeter 测试计划文件和生成的结果文件:
jmeter -n -t your_test_plan.jmx -l your_results.jtl
不知道你这个问题是否已经解决, 如果还没有解决的话:采用arthas的trace方法,通过该工具,可以看到每个函数调用的执行时间长度,这样有助于在做性能优化的时候,针对耗时最长的操作进行有针对性的优化,从而提高服务程序的整体性能。
[arthas@21948]$ trace com.platform.server.controller.ApiController isOpen
Press Q or Ctrl+C to abort.
Affect(class count: 2 , method count: 2) cost in 155 ms, listenerId: 1
`---ts=2021-10-22 11:23:34;thread_name=http-nio-8195-exec-17;id=4a;is_daemon=true;priority=5;TCCL=org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader@64aeaf29
`---[9.9956ms] com.platform.server.controller.ApiController$$EnhancerBySpringCGLIB$$4e90c2f0:isOpen()
`---[9.775ms] org.springframework.cglib.proxy.MethodInterceptor:intercept()
`---[8.3941ms] com.platform.server.controller.ApiController:isOpen()
+---[0.0204ms] com.platform.common.response.R:success() #75
+---[0.0143ms] javax.servlet.http.HttpServletRequest:getSession() #76
+---[0.1107ms] com.platform.server.dto.DeviceDto:getCifNo() #77
+---[0.0188ms] javax.servlet.http.HttpSession:setAttribute() #77
+---[0.0083ms] com.platform.server.dto.DeviceDto:getDeviceUuid() #79
+---[0.0066ms] com.platform.server.dto.DeviceDto:getCifNo() #80
+---[0.0342ms] com.platform.server.dto.DeviceDto:toString() #81
+---[0.3729ms] org.slf4j.Logger:info() #81
+---[7.1051ms] com.platform.service.ShldDeviceService:selectByDuuidAndCNo() #82
+---[0.0127ms] com.platform.common.response.R:put() #89
`---[0.4451ms] org.slf4j.Logger:info() #90
可以看出方法中各个调用所花费的时间,找出花费时间最多的方法调用,确定性能瓶颈,有针对性地进行优化,对提高性能有很好的帮助。
在JMeter的非GUI模式下,可以使用事务控制器将多个HTTP请求放在一个事务里面。但是默认情况下,生成的报告和运行结果中这些请求是单独展示的。如果你希望将它们作为一个整体展示,请按照以下步骤进行设置:
步骤1:创建一个事务控制器 在测试计划中添加一个事务控制器,并将需要放在同一个事务里面的HTTP请求作为它的子节点。可以通过右键点击测试计划,选择添加 > 逻辑控制器 > 事务控制器来添加事务控制器,然后将需要放在事务中的HTTP请求作为事务控制器的子节点。
步骤2:在HTTP请求中设置事务名 在每个HTTP请求中,通过添加一个前缀或后缀来设置事务名。可以在HTTP请求中的“服务器名称或IP”字段中添加一个前缀或后缀,比如设置为:"TransactionName - YourHTTPRequest",其中"TransactionName"是事务的名称,"YourHTTPRequest"是该HTTP请求的名称。
步骤3:使用非GUI模式运行压力测试 通过命令行运行JMeter进行压力测试,在命令行中指定测试计划文件和结果文件的保存路径。例如:
./jmeter -n -t testplan.jmx -l results.jtl
其中,"-n"表示非GUI模式,"-t"指定测试计划文件的路径,"-l"指定结果文件的保存路径。
步骤4:生成压力测试报告 在测试结束后,可以使用生成报告的命令来将结果文件转换为Web形式的压力测试报告。使用以下命令:
./jmeter -g results.jtl -o report
其中,"-g"指定参数为结果文件的路径,"-o"指定为输出的Web报告的目录。
通过以上步骤设置后,在生成的压力测试报告和运行结果中,这些HTTP请求将作为一个整体显示。
需要注意的是,在设置事务名时,请确保事务名在所有HTTP请求中是唯一的,以确保正确的事务分组和展示。