jmeter 发送http请求,并把获取到的请求的订单信息保存到文件中

有一个任务,需要频繁发送订单请求,并分析订单请求中有没有存在重复订单号,思路是用jmeter 发送http请求,使用正则表达式获取到订单号,并把订单号和线程号作为参数提供给java请求,在java请求中把订单号写到包括有线程号的命名文件中。完成出来的样子是这样的

步骤如下:

1、Jmeter 发送http请求

  1) 新建HTTP信息头管理器

2) 新建HTTP请求

2,在下单过后返回部分信息如下:"msg":"下单成功","result":"1","sendCode":"96828628","weektm":"星期二,12:00"

新建 正则表达式提取器  ,获取sendCode 后面的值96828628  正则表达式填写:"sendCode":"(\d{8}),这样订单号就保存在变量sendCode中

3、到此,订单号sendCode已经获取到,需要把这个订单号保存到文件中,可以采用“保存响应到文件”  把响应保存到以线程命名的文件中,但是不好的是一个文件只能保存一个结果,不能往结果中追加结果,对于后期汇总不方便

这里使用了java请求来处理,按线程文件名命名,把同一个线程所有的响应结果保存到同一个文件中,n个线程就保存n个文件,这样就使用了java请求,java请求需要做的有

  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获取订单号和线程号,并使用订单号和线程号 写人文件,同时jmeter 性能测试的java请求也是这样来实现的,按照格式在runTest 中做各种请求。

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 senCode;
    private String threadNumber;

    // 设置从jmeter传入参数
    public Arguments getDefaultParameters() {
        Arguments params = new Arguments();
        params.addArgument("senCode", "0");// 设置senCode参数
        params.addArgument("threadNumber", "0");// 设置threadNumber
        return params;
    }

    // 初始化方法,性能测试时只执行一次
    public void setupTest(JavaSamplerContext arg0) {

    }

    // 重复执行测试的地方
    public SampleResult runTest(JavaSamplerContext arg0) {
        senCode = arg0.getParameter("senCode"); // 获取jmeter传入的参数值,
        threadNumber = arg0.getParameter("threadNumber"); // 获取jmeter传入的参数值,
        results = new SampleResult();
        results.sampleStart();// jmeter 开始统计响应时间标记

            AppendFile.appendFile("E:\\jmeter\\"+threadNumber+".txt", senCode);

            if(senCode.length() ==8){
            results.setSuccessful(true);
            results.setResponseData("threadNumber:"+threadNumber+"|senCode:"+senCode, null);
            }else{
                results.setSuccessful(false);
                results.setResponseData("threadNumber:"+threadNumber+"|没有获取到验证码    ", null);
            }

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

        return results;
    }

    // 结束方法,实际运行时每个线程仅执行一次,在测试方法运行结束后执行
    public void teardownTest(JavaSamplerContext arg0) {
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
    }
}

把java项目文件导出jar包,放在jmeter 的lib/ext 文件夹中

打开jmeter添加一个jmeter 的java请求,选中测试类,会自动显示2个参数 sendCode 和threadNumber(这2个参数是在java请求类的的方法中设置:public Arguments getDefaultParameters()

sendCode  = ${sendcode}

threadNumber = ${__threadNum}

  

使用3个线程执行多次,结果如下:

另外使用bean shel  也能保存文件,需要在bean shell中写代码

import editFile.*;
import org.apache.jmeter.threads.JMeterContextService;
int  threadNumber = JMeterContextService.getNumberOfThreads();
String sendCode = vars.get("sendcode"); //把获取的sendcode 变成bean shell变量值
AppendFile.appendFile("E:\\jmeter\\result"+threadNumber+".txt", sendCode);
System.out.println("finished");
        

但是 获取的线程号代码都是1,因此所有的订单号都保存在同一个文件中,不知道这样会不会都在写同一个文件导致文件不全,要测试下才知道

时间: 2024-12-17 18:04:38

jmeter 发送http请求,并把获取到的请求的订单信息保存到文件中的相关文章

ecshop 获取某个商品的 所有订单信息 或者销量

把一下代码放到 lib_main.php /*获取有效订单信息*/ function sales_goods_order($goods_id){ $sql = 'select order_id from ' . $GLOBALS['ecs']->table('order_goods').'where goods_id='.$goods_id; /*order_goods 提取order_id*/ $res = $GLOBALS['db']->getAll($sql); foreach($res

如何使用jMeter发送两个逻辑上相关的HTTP请求

在前一篇文章使用jMeter构造大量并发的随机HTTP请求里我通过jMeter构造了大量的HTTP GET并发请求,对服务器产生了大量读操作. 现在我有另一个需求场景:假设我开发了一个创建Service Request的微服务,需要使用HTTP post调用.为了防止Cross Site Request Forgery(跨站域请求伪造),这个微服务调用时需要传一个XSRF token,这个XSRF token需要另一个HTTP get请求从服务器请求. 因此,这里存在两个逻辑上相关的HTTP请求

SpringMVC之请求参数的获取方式

转载出处:https://www.toutiao.com/i6510822190219264516/ SpringMVC之请求参数的获取方式 常见的一个web服务,如何获取请求参数? 一般最常见的请求为GET和POST,get请求的参数在url上可以获取,post请求参数除了url上还有可能在表单中,文件上传时,获取方式又和一般的参数获取不一样 本篇则主要集中在不同请求方式下,获取参数的使用姿势 首先需要搭建一个后端的请求,为了快速演示 利用spring-boot创建了一个机器简单的工程,依赖版

采用Loadrunner&Jmeter发送Get&Post请求技巧

一.        Get请求 不带参数 (1)       Loadrunner脚本 Action() {   web_custom_request("get请求",   "URL=http://localhost:8080/ReceiveGetPost/MyServlet",[Get URL地址]   "Method=GET",   "Resource=0",   "Referer=",   "

Jmeter发送HTTPS请求

Jmeter一般来说是压力测试的利器,最近想尝试jmeter和BeanShell进行接口测试.由于在云阅读接口测试的过程中需要进行登录操作,而登录请求是HTTPS协议.这就需要对jmeter进行设置. (一)设置HTTP请求 我们首先右键添加线程组,然后继续右键添加控制器,由于登陆操作只请求一次,因而选择仅一次控制器.接下来右键添加sampler->HTTP请求,设置HTTP请求.这里注意的地方首先是端口号,如果只是普通的HTTP协议,默认不填,而这里是HTTPS协议,因而填端口号443.另外“

【转】Apache Jmeter发送post请求

下面用Jmeter发送一个post请求, 对应的js代码如下: $("#register_a").click(function() { var name = $("#uname").val(); var pwd = $("#pwd").val(); var email = $("#email").val(); var user = { "name" : name, "password"

Jmeter入门13 jmeter发送application/octet-stream二进制流数据

http接口请求header里面 content-type: application/octet-stream  (二进制流数据),如何用jmeter发送请求? 1 添加http请求头 2 http请求 files upload里面写上文件的绝对地址 发送的文件内容:1 由开发提供的文件  2 有的是通过fiddler抓包获取的二进制流拷贝到文件里保存 the end! 原文地址:https://www.cnblogs.com/dinghanhua/p/9822734.html

基于人工分析的HTTP-POST请求报文特征获取一般方法

基于人工分析的HTTP-POST请求报文特征获取一般方法 (以百度贴吧客户端发帖行为分析为例) 本文由CSDN-蚍蜉撼青松 [主页:http://blog.csdn.net/howeverpf]原创,转载请注明出处! 现有的HTTP-POST请求报文信息还原工具都是基于特征(包括网络应用的行为识别特征与信息提取特征)的,而特征的获取往往依赖于人工分析.在分析的过程中往往需要用到一些能帮助完成网络数据采集和分析功能的工具.根据网络环境的不同,可能用到的几款工具包括: Tcpdump(Unix/Li

转:PHP中的使用curl发送请求(GET请求和POST请求)

原文地址:http://www.jb51.net/article/104974.htm 使用CURL发送请求的基本流程 使用CURL的PHP扩展完成一个HTTP请求的发送一般有以下几个步骤: 1.初始化连接句柄: 2.设置CURL选项: 3.执行并获取结果: 4.释放VURL连接句柄. 下面的程序片段是使用CURL发送HTTP的典型过程: // 1. 初始化 $ch = curl_init(); // 2. 设置选项,包括URL curl_setopt($ch,CURLOPT_URL,"http