我在将 Jmeter 变量解析为 OS Process Samplers 时遇到问题。
我目前有一个 beanshell 采样器,它可以获取前一个采样器的采样结果,如下所示:
String uploadResults="";
if(sampleResult.isSuccessful()){
uploadResults = "true";
vars.put("uploadResults", uploadResults);
} else {
uploadResults = "false";
vars.put("uploadResults", uploadResults);
}
然后我有一个 OS Process Sampler,它运行具有以下配置的 .ps1 脚本:
命令:
${powershellPath}
命令参数:powershell.exe -noexit ""& `${shellScriptPath}` '`${loginResults}`' 'Upload'""
我的 .ps1 脚本输出结果如下:
Write-Host "${result}"
当我启动脚本时,当条件为“假”时,操作系统进程采样器返回如下输出: 结果错误
当条件为“true”时,就像这样: 真实结果
不确定这里发生了什么,我怀疑这与 jmeter 变量编码有关。任何帮助将不胜感激。
编辑:这是 .ps1 代码。我已经编辑了一些信息,但主要功能就在那里。
param (
[string]$result,
[string]$transaction,
[string]$eventSource = "JMeterEventSource",
[string]$logName = "Application",
[int]$eventID = 4200
)
# Check if the event source exists, if not, create it
if (-not [System.Diagnostics.EventLog]::SourceExists($eventSource)) {
New-EventLog -LogName $logName -Source $eventSource
}
if($result -eq "false"){
switch ($transaction) {
"Upload" { $eventMessage = "FunctionalTransactions Script - upload-verification Sampler - The transaction ${transaction} is unavailable"
$eventType = "Error"
$eventID = 4211
}
"Login" { $eventMessage = "FunctionalTransactions Script - login-verification Sampler - The transaction ${transaction} is unavailable"
$eventType = "Error"
$eventID = 4211
}
}
}
else {
switch ($transaction) {
"Upload" { $eventMessage = "FunctionalTransactions Script - upload-verification Sampler - The transaction ${transaction} is available"
$eventType = "Information"
$eventID = 4210
}
"Login" { $eventMessage = "FunctionalTransactions Script - login-verification Sampler - The transaction ${transaction} is available"
$eventType = "Information"
$eventID = 4210
}
}
}
# Write the event to the log
Write-EventLog -LogName $logName -Source $eventSource -EntryType $eventType -EventID $eventID -Message $eventMessage
Write-Host "${result}"
我无法使用以下 OS Process Sampler 配置重现您的问题:
以及以下 Powershell 脚本:
Write-Host "Result is: "$args[0]
所以我猜 JMeter 变量的“编码”没有任何问题,您应该仔细查看您的 powershell 脚本以及处理那里的变量的方式。
到目前为止我只能给你一个建议:使用 Beanshell 是某种形式的性能反模式,考虑切换到 JSR223 测试元素和 Groovy 语言。请参阅 Apache Groovy:Groovy 的用途是什么? 文章了解更多详细信息。