您的位置:首页 > 理论基础 > 计算机网络

jmeter添加http请求、java请求,将返回的json数据提取出来并将结果追加到一个文件

2017-08-17 16:17 936 查看
jmeter添加http请求、java请求,将返回的json数据提取出来并将结果追加到一个文件

抽奖活动返回的是json数据,所以需要先将返回的json字符串里面需要统计的字段提取出来,此处需要统计的是reward字段(reward即返回的奖品类型)

每个http请求都会返回一个reward,但jmeter一个文件只能保存一个结果,不能往结果中追加结果,如果要统计每个reward的类型,最优的办法就是将所有返回同类型的reward字段全部追加到一个文件并保存在本地,因此可以采用java请求来处理,追加写到文件并保存到本地

1、jmeter发送http请求

1) 新建http请求默认值

可在这里面添加请求的服务器IP或名称

2)新建http请求

可在这选择请求方法(此处是post),请求路径以及携带的参数,携带参数的确定可通过抓包获取

运行之后,返回数据为:

{

  "errcode":0,

  "data":

  {

    "reward":4

  }

}

我们只需要统计奖品类型reward返回的字段

2、提取json数据

1)添加正则表达式



引用名称:reward(此处可自定义)

其中正则表达式的内容是否正确,可以先自己测试一把,即运行之后在察看结果树里面可以看到一个http请求,选择RegExp Tester,在Regular expression里面输入正则表达式,可以看见返回的结果是否正确



2)查看正则表达式的返回结果,可在线程组-添加Debug Sampler,运行之后可选择Debug Sampler 查看正则表达式的返回结果



3)正则表达式可以正确返回,所以我们正则表达式引用的名称 reward可以作为一个变量,可在其他地方输入${reward}来引用

3、java请求

使用正则表达式已经提取到奖品类型reward字段,再作为参数提供给java请求,按照log+返回奖品类型命名文件,把同一个返回类型保存到同一个文件里面,reward有n个返回类型,就保存n个文件

eclipse中新建jmeter相关java类,有需要 用到jmeter相关的jar包,所以需要将截图下的两个jar导入到eclipse中



如下两个新建的java类,参考网址:http://www.cnblogs.com/testway/articles/6663910.html

1)新建一个java类AppendFile  功能是往文件中追加内容

package editFile;

import java.io.IOException;

import java.io.RandomAccessFile;

public class AppendFile {

public static void main(String[] args) {

AppendFile.appendFile("E:\\dd.txt", "1111");

AppendFile.appendFile("E:\\dd.txt", "11111");

}

public static void appendFile(String fileName, String content) {

try {

// 打开一个随机访问文件流,按读写方式

RandomAccessFile randomFile = new RandomAccessFile(fileName, "rw");

// 文件长度,字节数

long fileLength = randomFile.length();

// 将写文件指针移到文件尾。

randomFile.seek(fileLength);

randomFile.writeBytes(content + "\r\n");

randomFile.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

2)新建一个java请求类WriteResult ,作用是从jmeter获取奖品类型reward,并使用返回类型 写入文件

package editFile;

import org.apache.jmeter.config.Arguments;

import org.apache.jmeter.protocol.java.sampler.JavaSamplerClient;

import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;

import org.apache.jmeter.samplers.SampleResult;

public class WriteResult implements JavaSamplerClient {

private SampleResult results;

private String reward;

private String threadNumber;

// 设置从jmeter传入参数

public Arguments getDefaultParameters() {

Arguments params = new Arguments();

params.addArgument("reward", "${reward}");// 设置reward参数     ---此处的${reward}参数即正则表达式提取参数命名的变量名

return params;

}

// 初始化方法,性能测试时只执行一次

public void setupTest(JavaSamplerContext arg0) {

}

// 重复执行测试的地方

public SampleResult runTest(JavaSamplerContext arg0) {

reward = arg0.getParameter("reward"); // 获取jmeter传入的参数值,

results = new SampleResult();

results.sampleStart();// jmeter 开始统计响应时间标记

AppendFile.appendFile("E:\\jmeter\\log"+ reward + ".txt", reward);     

if(reward.length() ==1){

results.setSuccessful(true);

results.setResponseData("reward:"+reward, null);

}else{

results.setSuccessful(false);

results.setResponseData("获取失败 ", null);

}

results.sampleEnd();// jmeter 结束统计响应时间标记

return results;

}

// 结束方法,实际运行时每个线程仅执行一次,在测试方法运行结束后执行

public void teardownTest(JavaSamplerContext arg0) {

}

public static void main(String[] args) {

// TODO Auto-generated method stub

}

}

3)把java项目文件导出jar包,放在jmeter 的lib/ext 文件夹中,打开jmeter添加一个jmeter 的java请求,选中测试类,会自动显示reward参数(这个参数是在java请求类WriteResult 的方法中设置:

public Arguments getDefaultParameters()

params.addArgument("reward", "${reward}");



4、使用10个线程循环50次,可在本地保存路径下面看到保存的结果追加文件:



选择其中一个文件打开,http请求返回的同类型全部保存在同一个类型文件里面

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐