JMeter自动化脚本设计之数据驱动

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u011466469/article/details/88793238

背景:原本计划关于JMeter自动化测试的脚本设计分两篇来讲,出于对码字的无奈及思路的限制,决计在一篇中囊括就行了,没非得必要把什么数据驱动、关键字驱动、行为驱动等等设计模式胡乱说一通,再有现在博客上的理论与实践一搜一大批,应接不暇,通常是这篇还没把Demo搭建起来,又去那边整其他的,等着Demo搭建完了,却又发现无处施展。莫不是悲哀啊~

1、闲话少叙,现在步入正题,先避开业务场景的脚本设计方式,单接口而言,做一个以数据驱动的脚本设计,先看脚本接口:

2、脚本结构是搞定了,现在来解释一下,数据驱动是想把数据存入文件,以数据文件来驱动脚本的执行,尽管上面的脚本用其他控制元件一步到位解决,但是这有违设计初衷 ,先上beanshell后置器的代码(通过代码正则匹配取出所有的参数写入csv)

import java.util.regex.Matcher;
import java.util.regex.Pattern;

//JMeter的内置API:prev.getResponseData()获取请求的响应内容
prev.setDataEncoding("utf-8");
byte[] responseData = prev.getResponseData(); 
//定义一个String类型的变量 
String names = "";
//定义正则表达式需要匹配的模式,注意:正则表达式关键信息
Pattern pattern = Pattern.compile("weather1d/(.+?).shtml");

//Matcher java.util.regex.Pattern.matcher(CharSequence arg0)需要将字节类型转成String类型
//获取响应数据符合条件的结果
Matcher result = pattern.matcher(new String(responseData));  
//boolean java.util.regex.Matcher.find()只要找到符合条件的就返回true

while(result.find()){
//  String java.util.regex.Matcher.group(int group),group的参数是int类型,0表示获取正则模式左边数起第一个"("开始的内容,1表示获取正则模式左边数起第一个"("开始的内容
//  将返回的结果用字符串全部连接起来,"\r\n"换行保存
names += result.group(1)+"\r\n";
}
//导出的excel存放位置
private String filePath = "D:/citycode.csv";  
BufferedOutputStream bos = null;
FileOutputStream fos = null;
File file = null;

try {
   File file = new File(filePath);
   fos = new FileOutputStream(file); //不添加参数true,以非追加的方式添加内容
//   fos = new FileOutputStream(file,true); //添加参数true,以追加的方式添加内容,表格内容追加写入

   bos = new BufferedOutputStream(fos);
   bos.write(names.getBytes());
} catch (Exception e) {
   e.printStackTrace();
} finally {
   if (bos != null) {
      try {
         bos.close();
      } catch (IOException e1) {
         e1.printStackTrace();
      }
   }
   if (fos != null) {
      try {
fos.close();
      } catch (IOException e1) {
         e1.printStackTrace();
      }
   }
}

3、上面获取了需要参数化的数据写入文件,现在需要从文件中读取参数,添加csv data set config,注意红色方框:

4、因为是需要数据驱动,又不知道文件保存了多少参数,所以添加loop 控制器的时候勾选了forever,永远?为了防止真的永远,所以才有上面的配置,数据读完-->脚本执行完毕,线程就停止了。 

5、最后结果展示:这算是完成一个简单的数据驱动,实际数据驱动是可以从多个维度获取,数据库,接口用例管理系统等。

 6、上面是一种简单的脚本设计方式,但是有可能造成很多的参数文件产生,因为接口请求不会只有一个两个参数,所以需要设计脚本的时候,建议把一下固定的参数写入脚本,而将动态的数据写入文件以为数据驱动。接下来展示关键字驱动的脚本结构:

注意:switch下的sampler request name最好用英文名或是接口名,脚本是从数据文件csv读取参数,并使用split函数拆分,最后一个一个的关键字通过模板去找,在switch那里进行判断,当关键字等于请求名称的时候就去找对应接口请求。但是这里有点不好,要是接口很多,那么switch下那得是多少sampler元件?

7、关于上面关键字驱动的设计,可以去51tesing软件测试网参考,那里有详细的说明,然后自己再扩展。

8、线性脚本设计,就是通过jmeter提供的控制元件关联参数来驱动用户行为去执行哪一个接口,因为只有一个用户数据。

展开阅读全文

没有更多推荐了,返回首页