运行 JMeter 通过 PSExec 使用来自 Jenkins 的参数

Run JMeter through PSExec with parameters from Jenkins

我有以下结构:

  1. 机器 1:Jenkins slave (Windows)
  2. 机器 2:JMeter 机器 (Windows)

我想得到什么? 机器 1 从 Jenkins 接收一些参数(用于 JMeter 测试)。

path/Performance.bat %param1% %param2% %param3%

所以,Performance.bat 看起来像:

IF %param1%==param1_value(
IF %param2%==param2_value(
@echo
path_to_psexec\PsExec.exe \machine1_address -u user -p password cmd /c (

 MKDIR %param3%\Automation_Results_Build_%BUILD_NUMBER%_ID
 cd %JMeterPath%/
 jmeter -n -t [...])
 
exit /b 0
))

所以,基本上它会创建一个结果文件夹,然后导航到 JMeter 位置并尝试 运行 使用给定值进行性能测试。

问题。 似乎 PSExec 没有按预期执行命令。通过 CMD 发送了 3 个命令:为结果创建文件夹、导航到 JMeter 路径、运行 测试。我的方法有什么问题?如何在同一个 PSexec 调用中 运行 多个 CMD 命令?

输出:

ECHO is on.

PsExec v2.2 - Execute processes remotely
Copyright (C) 2001-2016 Mark Russinovich
Sysinternals - www.sysinternals.com

Connecting to machine_address...
   
Starting PSEXESVC service on machine_address...
    
Connecting with PsExec service on machine_address...
    
Starting cmd on machine_address...
    
cmd exited on machine_address with error code 0.
The system cannot find the path specified.
'jmeter' is not recognized as an internal or external command,
operable program or batch file.

为什么 The system cannot find the path specified.

我不想在机器 2 上创建 .bat 文件,因为我想在 Jenkins 中查看测试的输出。

您可以创建一个 PowerShell 脚本,您可以在其中执行所有命令。

以下命令需要包含在您的 PowerShell 脚本中,该脚本将连接到您的远程计算机并在远程计算机上执行命令。

$machine_addr = "your_ip_address"

$user = your_username

$Password = your_password

$pass = ConvertTo-SecureString -AsPlainText $Password -Force

$Cred = New-Object System.Management.Automation.PSCredential -ArgumentList $user ,$pass

Invoke-Command -ComputerName $machine_addr -ScriptBlock {C:\path_to_your_jmeter_with_parameters} -Credential $Cred

您可以根据自己的方便添加其他命令,例如您要创建文件夹

New-Item -Path "folder name with path" -ItemType directory 

创建 PowerShell 脚本后,只需从批处理文件中调用即可。

C:\Users\%username%\Desktop\path_to_your_powershell_file\filename.ps1

建议: 您也可以创建带有参数的单个 PowerShell 脚本,就像您使用批处理文件一样。(它只会消除创建批处理文件的负担)