有没有办法从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提供,因此需要将其包含在测试中,因为它是流量的一部分。
我使用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()
是否可以在BeanShell PreProcessor 中停止线程或强制失败?我尝试从ThreadGroup类和其他一些类访问“stop()”函数/方法,但我不确定我做得对,或者是否可能。
我想强制我的测试在我的BeanShell 预处理器中停止,如果我的脚本中的这个特定 if 语句导致 TRUE...这可能吗?我确实阅读了一些“Failure”和“FailureMessage”函数,但不确定使用这些函数的最终结果是什么。
任何想法或建议将不胜感激!
提前致谢,
马特
我正在尝试在 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)
任何人都可以指导我吗?
我正在尝试从 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) 我正在尝试读取包含超过 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 从请求中删除。我将不胜感激任何帮助
我得到如下响应:
<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 的新手。我能做些什么来解决这个问题?
我想在 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) 我想在 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; 但它不起作用。
如何获取这些名称并将其用作变量?