将 Jmeter 变量解析为 OS 进程采样器

问题描述 投票:0回答:1

我在将 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}"

.ps1结果

当我启动脚本时,当条件为“假”时,操作系统进程采样器返回如下输出: 结果错误

当条件为“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}"
powershell shell jmeter beanshell
1个回答
0
投票

我无法使用以下 OS Process Sampler 配置重现您的问题:

enter image description here

以及以下 Powershell 脚本:

Write-Host "Result is: "$args[0]

enter image description here

所以我猜 JMeter 变量的“编码”没有任何问题,您应该仔细查看您的 powershell 脚本以及处理那里的变量的方式。

到目前为止我只能给你一个建议:使用 Beanshell 是某种形式的性能反模式,考虑切换到 JSR223 测试元素和 Groovy 语言。请参阅 Apache Groovy:Groovy 的用途是什么? 文章了解更多详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.