标签: beanshell

如何从 Jmeter 执行 java 类

有没有办法从jmeter执行java类?我已经用maven程序集打包了我的类,并将其放在JMETER_HOME的lib文件夹中。然后我在测试用例中创建了 BSF Listener 并写道:

import my.package.name.App;

my.package.name.App app = new my.package.name.App("argument1", "argument2");
Run Code Online (Sandbox Code Playgroud)

是否有另一种方法来执行java类或其他可能使用java -jar直接调用jar的方法,这个类基本上从较小的文件创建一个大文件,这些位置由jmeter提供,因此需要将其包含在测试中,因为它是流量的一部分。

java jmeter beanshell

5
推荐指数
1
解决办法
2万
查看次数

如何在beanshell中创建方法?

我使用edittext和一个按钮在android中创建了一个简单的beanshell ide.单击该按钮时,Interpreter.eval()将调用edittext.getText().toString()该函数并作为参数传入.我想知道:如何在beanshell中创建一个方法并运行它?

这是我试图在我的beanshell ide中执行的代码:

import android.widget.Toast

int i=add(1, 5);
Toast.makeText(context, ""+i, 5000).show();

int add(int i, int j){
    return i+j;
}
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

找不到命令:add()

java scripting android beanshell

5
推荐指数
1
解决办法
3619
查看次数

JMeter - 从 BeanShell 预处理器中停止线程

是否可以在BeanShell PreProcessor 中停止线程或强制失败?我尝试从ThreadGroup类和其他一些类访问“stop()”函数/方法,但我不确定我做得对,或者是否可能。

我想强制我的测试在我的BeanShell 预处理器中停止,如果我的脚本中的这个特定 if 语句导致 TRUE...这可能吗?我确实阅读了一些“Failure”和“FailureMessage”函数,但不确定使用这些函数的最终结果是什么。

任何想法或建议将不胜感激!

提前致谢,
马特

jmeter beanshell

5
推荐指数
1
解决办法
4966
查看次数

在测试计划中运行一次 Beanshell 预处理器

我有一个 Bean shell 预处理器,它最终根据用户传递的值设置一些全局变量,例如主机名和路径。

bean shell 设置的变量将被所有线程组使用。

目前,我已将 BS 预处理器放置在线程之外,并且它运行完美。 在此输入图像描述

问题是它为每个线程运行,这对性能不友好

我只希望它在测试计划开始时运行一次以提高性能。

我尝试将其放入安装线程中,但它不起作用。

除了 BS 预处理器之外,还有其他东西可以提高性能吗(它只为整个计划运行一次,而不是为每个线程运行一次)。

jmeter beanshell

5
推荐指数
1
解决办法
5345
查看次数

如何在 JMeter 中使用 beanshell 获取机器 IP 地址?

我正在尝试在 beanshell 中为 jmeter 编写一个脚本,通过它我可以获得机器的 IP 地址(使用ipconfig命令并仅从输出中提取 IP 地址)?

以下代码仅给出需要传递给 jmeter 的请求的 IP。

String IP = InetAddress.getByName(prev.getURL().getHost()).getHostAddress();
vars.put("IP", IP);
Run Code Online (Sandbox Code Playgroud)

任何人都可以指导我吗?

jmeter beanshell

5
推荐指数
1
解决办法
2761
查看次数

JMeter 脚本中的 S3 访问

我正在尝试从 S3 存储桶获取文件作为 JMeter 测试的设置线程组的一部分,并且 JSR223 采样器中有以下 Groovy 脚本:

import java.io.IOException
import java.io.InputStream
import java.util.Properties

import com.amazonaws.services.s3.AmazonS3
import com.amazonaws.services.s3.AmazonS3ClientBuilder
import com.amazonaws.services.s3.model.GetObjectRequest
import com.amazonaws.services.s3.model.S3Object
import com.amazonaws.auth.BasicAWSCredentials
import com.amazonaws.auth.AWSStaticCredentialsProvider
import com.amazonaws.services.s3.S3CredentialsProviderChain

def awsAccessKey = "my_key"
def awsSecretAccessKey = "my_secret_key"
System.setProperty("aws.accessKeyId", awsAccessKey)
System.setProperty("aws.secretKey", awsSecretAccessKey)

def awsCreds = new BasicAWSCredentials(awsAccessKey, awsSecretAccessKey)
def s3Client = AmazonS3ClientBuilder.standard()
                .withRegion("us-west-2")
                .build()
def s3Object = s3Client.getObject(new GetObjectRequest("bucket-name", "filename"))
def is = s3Object.getObjectContent()
Run Code Online (Sandbox Code Playgroud)

当我使用 .withCredentials(awsCreds) 和设置系统属性时,代码都会抛出以下内容:

java.lang.NoClassDefFoundError: Could not initialize class com.amazonaws.services.s3.S3CredentialsProviderChain
Run Code Online (Sandbox Code Playgroud)

我还将相同的代码转换为以下 Beanshell Sampler:

import java.io.IOException;
import java.io.InputStream;
import …
Run Code Online (Sandbox Code Playgroud)

groovy jmeter beanshell amazon-web-services

5
推荐指数
1
解决办法
4642
查看次数

我如何在 jmeter 中使用 beanshell 预处理器删除空参数

我正在尝试读取包含超过 500 行的 csv 文件,每一行都将作为对 API 的请求。现在我的问题是一些参数有空字符串,我想设置一个条件,以防参数返回空字符串,然后在点击 API 之前从请求正文中删除该参数

下面是我的json

{
  "body": {
    "Id1": "${Id1}",
    "addressId": "${addressId}",
    "languageCode": "${languageCode}",
    "tempId": "${tempId}"
}
Run Code Online (Sandbox Code Playgroud)

现在在阅读 csv 后,我在我的请求正文中得到以下值

{
  "body": {
    "Id1": "1",
    "addressId": "1233",
    "languageCode": "E",
    "tempId": ""
}
Run Code Online (Sandbox Code Playgroud)

如您所见, tempId 具有空字符串。现在使用 bean-shell 预处理器我试图删除它但没有运气

Object requestBody = sampler.getArguments().getArgument(0).getValue();

if (requestBody.get("tempId").equals("")){
    sampler.getArguments.removeArgument("tempId");
}
Run Code Online (Sandbox Code Playgroud)

当我查看结果树时,我没有看到 tempId 从请求中删除。我将不胜感激任何帮助

jmeter beanshell

5
推荐指数
1
解决办法
889
查看次数

如何在 JMeter 中通过 XPath Extractor 提取响应?

我得到如下响应:

<response>
  <status code='200' server_time='xxx' />
  <tests>
    <test id='1' name='a!' status='Started' />
    <test id='2' name='bb!' status='New' />
    <test id='3' name='ccc!' status='New' />
    <test id='4' name='dddd!' status='New' />
  </tests>
</response>
Run Code Online (Sandbox Code Playgroud)

我已经在采样器中添加了一个 Xpath 提取器:

Reference name: mytest
XPath Query: //test[@id='1']
Run Code Online (Sandbox Code Playgroud)

但是返回变量(mytest)是错误的。

OUT.println(mytest) --> void
Run Code Online (Sandbox Code Playgroud)

我是 JMeter 的新手。我能做些什么来解决这个问题?

xpath web-testing jmeter beanshell

4
推荐指数
1
解决办法
2万
查看次数

JMeter 在 beanshell 中设置用户定义的变量不起作用

我想在 beanshell 中覆盖 Jmeter 中的用户定义变量。我尝试了 beanshell 预处理器、后处理器或示例,但没有任何效果。

我的代码:

vars.put("box_user", "mybox");
log.info(vars.get("box_user"));
Run Code Online (Sandbox Code Playgroud)

输出是正确的,mybox。但是当我稍后在采样器中使用 ${box_user} 变量时,用户名不正确。它具有开始初始化的价值。

怎么了?

这是我的 jmeter 项目的 xml,尝试了另一个变量名,但它不起作用:

<?xml version="1.0" encoding="UTF-8"?>
    <jmeterTestPlan version="1.2" properties="2.8" jmeter="2.13 r1665067">
     <hashTree>
    <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test Plan" enabled="true">
      <stringProp name="TestPlan.comments"></stringProp>
      <boolProp name="TestPlan.functional_mode">false</boolProp>
      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
      <elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
        <collectionProp name="Arguments.arguments"/>
      </elementProp>
      <stringProp name="TestPlan.user_define_classpath"></stringProp>
    </TestPlan>
    <hashTree>
      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">
        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
        <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
          <boolProp name="LoopController.continue_forever">false</boolProp>
          <stringProp name="LoopController.loops">1</stringProp>
        </elementProp>
        <stringProp name="ThreadGroup.num_threads">1</stringProp>
        <stringProp …
Run Code Online (Sandbox Code Playgroud)

java jmeter beanshell

4
推荐指数
1
解决办法
1万
查看次数

如何在 JMeter 中获取线程和采样器名称

我想在 JMeter 测试计划中获取线程和采样器名称并将其保存在变量中。

我已经使用 BeanShell 后处理器保留了测试计划名称:

导入 org.apache.jmeter.services.FileServer;

String testPlanName = FileServer.getFileServer().getScriptName(); vars.put("testPlanName", testPlanName)

我在电子邮件通知中使用它来发送诸如“测试计划 ${testPlanName} 已收到响应代码 ${responseCode}

但我想以相同的方式包含线程名称和采样器名称。

我已经尝试添加 BeanShell 后处理器 .getThreadname() 和 .getSampleName() 并导入 import org.apache.jmeter.samplers.SampleResult; 但它不起作用。

如何获取这些名称并将其用作变量?

variables jmeter beanshell

4
推荐指数
1
解决办法
5817
查看次数