Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
复杂Jmeter场景_Jmeter - Fatal编程技术网

复杂Jmeter场景

复杂Jmeter场景,jmeter,Jmeter,我有一个在Jmeter中实现起来有困难的场景 情景 创建2个线程组 线程组1:应该生成100多个特定的ID(通过POST),并将ID保存在某个地方,以供其他线程组使用 线程组2:应该能够读取在线程组1中创建的ID。 线程可以设置为10个用户,每个用户从上面访问10个ID。例如,用户1将获得线程组1中生成的前10个ID,用户2也将如此,以此类推 问题: 我已经创建了线程组1,它生成100个特定ID 我只能使用${uuuu setProperty(Id,${Id})使用BeanShell断言保存单个

我有一个在Jmeter中实现起来有困难的场景

情景 创建2个线程组

线程组1:应该生成100多个特定的ID(通过POST),并将ID保存在某个地方,以供其他线程组使用

线程组2:应该能够读取在线程组1中创建的ID。 线程可以设置为10个用户,每个用户从上面访问10个ID。例如,用户1将获得线程组1中生成的前10个ID,用户2也将如此,以此类推

问题:

我已经创建了线程组1,它生成100个特定ID 我只能使用${uuuu setProperty(Id,${Id})使用BeanShell断言保存单个Id

但是,我不知道如何将所有这些ID保存在文件或内存中,以便线程组2可以访问

另外,我如何设置线程组2以拾取ID(即,将线程用户数设置为10,然后第一个用户将拾取线程组1和子线程组1中生成的10个ID)

目前我正在调查Jmeter和Gatling,看看哪种工具能够解决这些类型的场景


谢谢

首先,从测试计划中选择选项连续运行线程组,以便线程组一次启动一个线程组

假设您使用后处理器从线程组1提取ID,则在代码区域中添加一个作为post请求(线程组1)的子线程,代码如下所示

FileWriter fstream = new FileWriter("pathToYourFileDirectory/IDs.csv",true);
BufferedWriter out = new BufferedWriter(fstream);
String Id = vars.get("ID");// ID should be the reference name of your post processor which extract the ID 


if(Id.equals("NOT_FOUND")){// NOT_FOUND is the default value for your post processor, in case the post request failed, you will not type anything into the csv file
    out.close();

}
else{
    out.write(Id);
out.write(System.getProperty("line.separator"));
    out.close();


}
上述代码将把您的ID写入csv文件
IDs.csv

现在将元素添加到第二个线程组中,并按如下所示填写字段

  • 文件名:
    IDs.csv
  • 变量名:Id

现在,您可以使用Jmeter变量
${Id}
,该变量将保存Id值。

首先,从测试计划中选择选项连续运行线程组,以便线程组一次启动一个线程组

假设您使用后处理器从线程组1提取ID,则在代码区域中添加一个作为post请求(线程组1)的子线程,代码如下所示

FileWriter fstream = new FileWriter("pathToYourFileDirectory/IDs.csv",true);
BufferedWriter out = new BufferedWriter(fstream);
String Id = vars.get("ID");// ID should be the reference name of your post processor which extract the ID 


if(Id.equals("NOT_FOUND")){// NOT_FOUND is the default value for your post processor, in case the post request failed, you will not type anything into the csv file
    out.close();

}
else{
    out.write(Id);
out.write(System.getProperty("line.separator"));
    out.close();


}
上述代码将把您的ID写入csv文件
IDs.csv

现在将元素添加到第二个线程组中,并按如下所示填写字段

  • 文件名:
    IDs.csv
  • 变量名:Id

现在您可以使用Jmeter变量
${Id}
,它将保存Id值。

这两个线程组是同时运行还是一次运行一个?一次运行一个。基本上线程组2依赖于线程组1,否则测试将失败。所以线程组1必须完成所有100个ID的生成,然后线程组2才能开始读取它们。另外,为了增加额外的复杂性,线程组2(应该)并行运行,而不是一个接一个,但不是那么重要。请参阅类似的答案,您正在使用后处理器从post请求(线程组1)中提取ID?这两个线程组是同时运行还是一次运行一个?一次一个。基本上线程组2依赖于线程组1,否则测试将失败。所以线程组1必须完成所有100个ID的生成,然后线程组2才能开始读取它们。另外,为了增加额外的复杂性,线程组2(应该)并行运行,不是一个接一个,但不是那么重要。请参阅类似的答案,您正在使用后处理器从post请求(线程组1)提取ID?您好-感谢您的回复。这应该行得通,但是我对这行代码有一个问题:stringid=vars.get(“Id”);//“ID”应该在哪里声明?我相信这个“ID”是保存从响应中提取的“ID”的变量?目前,我正在使用JSON提取器从响应中提取“id”,并将其存储在变量中。然后我在下一个线程中引用该变量。您好-谢谢您的回复。这应该行得通,但是我对这行代码有一个问题:stringid=vars.get(“Id”);//“ID”应该在哪里声明?我相信这个“ID”是保存从响应中提取的“ID”的变量?目前,我正在使用JSON提取器从响应中提取“id”,并将其存储在变量中。然后在下一个线程中引用该变量。