有一个需求,新建一批账号,把获取的账号相关信息存入文本文件,当文本文件保存的数据达到一定的数量,就自动停止新建账号。
分析下需求:
1、把账号信息保存到文件,需要使用bean shell脚本(bean shell脚本语法和java一样,功能也一样),并且需往脚本中传入要保存的信息
2、文件中保存的数据达到一定的数量,就自动停止新建账号。数量也是要用bean shell脚本读文件获取文件行数,并传出。自动停止新建脚本,这就需要价格jmeter的if控制器,在if控制器的条件中判断数量是否达到。
脚本实现过程:
1、位了模拟得到账号信息,先设置一个User Defined Variables,通过add > config element > User Defined Variables 添加
在User Defined Variables 中添加一个变量account_info,值随意给就可以,如“111111111111”,这样往文件中保存“111111111111”模拟为账号信息
2、新建一个bean shell 脚本,读取获取文件行数
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStreamReader; int count = 0; try{ File file = new File("E:\test.txt"); // 如果文件不存在就新建 if (!file.exists()) { file.createNewFile(); } // 读文件 BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(new FileInputStream(file.getAbsolutePath()), "UTF-8")); // 循环获取文件行数 while ((str=bufferedReader.readLine())!=null) { count = count + 1; } bufferedReader.close(); }catch(IOException e) { e.printStackTrace(); } //文件行数java变量传给jmeter变量total_lines vars.put("total_lines",String.valueOf(count));
3、新建一个if 控制器
if 控制器里面的条件填写:
${__jexl3(${total_lines}<11,aa)},其中total_lines 是bean_shell脚本返回的。使用${__jexl3(${total_lines}<11,aa)} 对${total_lines}<11进行判断并返回true 或false
4、再在if控制器中新建一个 写文件bean shell
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStreamReader; // 传入jmeter 变量 account ,使用java变量 message接收 String message= vars.get("account_info"); try{ File file = new File("E:\test.txt"); // 如果文件不存在,就新建一个文件 if (!file.exists()) { file.createNewFile(); } // 文件末尾追加写入文件 FileOutputStream fos = new FileOutputStream(file.getAbsoluteFile(),true); fos.write(message.getBytes()); fos.write(" ".getBytes()); fos.close(); }catch(IOException e) { e.printStackTrace(); }
整个jmeter 脚本结构形式