我们收到了20个jmeter测试计划,每个测试一个endpoint,我们需要运行。在测试中,我们需要传递参数,而其他测试则不需要。
我的想法是创建一个powershell脚本,它循环遍历目录并运行测试,等待完成,然后运行下一个测试。当我们开发新的endpoint时,我们只需创建一个新的测试计划并将其保存在适当的文件夹中,powershell脚本将在下次循环测试时包含它。
我需要在开始下一个计划之前完成测试,所以我看到了这样的情况:
Write-Output "Running Test 1"
$proc = Start-Process -FilePath "C:\JmeterLoadTests\apache-jmeter-5.2.1\bin\jmeter" -ArgumentList "-n -t C:\JmeterLoadTests\test\enpointsType1\test-1-1.jmx -Jduration=10"
$proc.WaitForExit()
Write-Output "Proc 1 Done"
Write-Output "Running Proc 2"
$proc2 = Start-Process -FilePath "C:\JmeterLoadTests\apache-jmeter-5.2.1\bin\jmeter" -ArgumentList "-n -t C:\JmeterLoadTests\test\enpointsType1\test-1-1.jmx -Jduration=10"
$proc2.WaitForExit()
这只是同时启动两个测试。我的问题是如何让Powershell等待上一个测试完成。
您可能正遭受Out-Default cmdlet执行,最简单的方法是用分号分隔命令,如:
cmd1;cmd2;cmd3;etc;
这样,Powershell 将等待上一个命令完成,然后再开始下一个命令
演示:
考虑切换到Maven JMeter插件可能是一个更好的主意,默认情况下,它会执行在与pom.xml文件相关的< code>src/test/jmeter文件夹下找到的所有测试
您眼前的问题是,您的Start Process
调用缺少-PassThru
switch,这是调用返回System.Diagnostics所必需的。代表新启动进程的进程
实例。
# ...
# Note the use of -PassThru
$proc = Start-Process -PassThru -FilePath "C:\JmeterLoadTests\apache-jmeter-5.2.1\bin\jmeter" -ArgumentList "-n -t C:\JmeterLoadTests\test\enpointsType1\test-1-1.jmx -Jduration=10"
$proc.WaitForExit()
# ...
或者,如果您不需要检查进程退出代码(即< code>$proc。ExitCode,您可以简单地使用< code>-Wait开关,使< code>Start-Process本身等待进程终止:
# ...
# Note the use of -Wait
Start-Process -Wait -FilePath "C:\JmeterLoadTests\apache-jmeter-5.2.1\bin\jmeter" -ArgumentList "-n -t C:\JmeterLoadTests\test\enpointsType1\test-1-1.jmx -Jduration=10"
# ...
退后一步:
要在当前控制台窗口中同步执行控制台应用程序或批处理文件,请直接调用它们,不要使用启动进程
(或它所基于的System.Diagnostics.Process
API)。
除了在语法上更容易和不那么冗长之外,它还有两个关键优势:
>
您可以直接捕获它们的输出。
它允许您随后通过自动$LASTEXITCODE
变量检查进程退出代码。
假设< code>jmeter是一个控制台应用程序(文档建议它在使用参数调用时作为一个控制台应用程序运行):
# ...
# Direct invocation in the current window.
# Stdout and stderr output will print to the console by default,
# but can be captured or redirected.
# Note: &, the call operator, isn't strictly needed here,
# but would be if your executable path were quoted
# or contained variable references.
& C:\JmeterLoadTests\apache-jmeter-5.2.1\bin\jmeter -n -t C:\JmeterLoadTests\test\enpointsType1\test-1-1.jmx -Jduration=10
# Use $LASTEXITCODE to examine the process exit code.
# ...
有关详细信息,请参阅此答案。
null 有什么主意吗?我该怎么做?我知道我不能只使用Once Controller,因为每个请求也是由每个线程执行的。
我想对一个网站进行压力测试。主要目的是在并发用户数和命中视频数/秒(RPS)方面找到性能下降点。 我使用了ultimate thread group,并将用户数量设置为200,加速时间为200秒。我已经为终极线程组添加了吞吐量整形计时器,并将每秒请求数设置为8。(如果我每秒钟只有一次采样器点击,那就控制得很好,是8次点击/秒。如果我有一个以上的采样器点击不受控制,他们甚至达到20,25,40等..
我正在使用数据提供程序向每个测试方法传递数据。假设数据提供程序中有2行。 当前运行单个测试方法的所有迭代,然后运行第二个测试方法...例如: 但我想按以下顺序运行。 http://fruzenshtein.com/testng-dataprovider-run-tests-sequency/
这是我当前的maven-surefire-plugin配置:
我用两个请求来尝试这个测试计划,假设每个测试有一个惟一的头值。这是我当前测试计划的结构。 因此,现在使用此测试计划来运行多个线程,以测量发送到两个不同主机的POST请求的性能,但需要修改此测试计划,使不同的x1、x2、x3、…xn租户提交相同的线程(10个并发线程)。这意味着x1将并行提交10个请求,x2提交10个申请,依此类推。其余项目在测试计划中相同。 请建议是否有办法在JMeter中实现这一
我使用PyCharm来运行一个相当大的测试套件(1800个快速测试)。最近修改了一个测试,我意识到我的测试不会出错。当我单独运行这些测试时,确实会中断,但是如果我运行整个测试套件,它们总是会通过。这是由于一些以前的同事对类的这种不正确的嘲笑: 我现在需要检查整个测试套件中模拟的使用情况,但是我想单独运行每个测试,看看哪些测试没有通过(我将这些测试标记为高优先级)。我怎么能从控制台或Py魅力中做到这