当前位置: 首页 > 知识库问答 >
问题:

如何使用电源外壳一次一个地执行单独的 Jmeter 测试计划?

李泓
2023-03-14

我们收到了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等待上一个测试完成。

共有2个答案

子车海
2023-03-14

您可能正遭受Out-Default cmdlet执行,最简单的方法是用分号分隔命令,如:

cmd1;cmd2;cmd3;etc;

这样,Powershell 将等待上一个命令完成,然后再开始下一个命令

演示:

考虑切换到Maven JMeter插件可能是一个更好的主意,默认情况下,它会执行在与pom.xml文件相关的< code>src/test/jmeter文件夹下找到的所有测试

邵劲
2023-03-14

您眼前的问题是,您的Start Process调用缺少-PassThruswitch,这是调用返回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.ProcessAPI)。

除了在语法上更容易和不那么冗长之外,它还有两个关键优势:

>

  • 您可以直接捕获它们的输出。

    它允许您随后通过自动$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魅力中做到这