1. 程式人生 > >jmeter 傳送http請求,並把獲取到的請求的訂單資訊儲存到檔案中

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,因此所有的訂單號都儲存在同一個檔案中,不知道這樣會不會都在寫同一個檔案導致檔案不全,要測試下才知道

相關推薦

jmeter 傳送http請求獲取到的請求訂單資訊儲存檔案

有一個任務,需要頻繁傳送訂單請求,並分析訂單請求中有沒有存在重複訂單號,思路是用jmeter 傳送http請求,使用正則表示式獲取到訂單號,並把訂單號和執行緒號作為引數提供給java請求,在java請求中把訂單號寫到包括有執行緒號的命名檔案中。完成出來的樣子是這樣的 步驟如下: 1、Jme

java獲取字串裡的日期資訊獲取的日期資訊轉成Date

字串:String  aa="物品日報表 2018年9月29日"; Date  newdate=stringZhuanDate(aa); //字串裡的時間轉換成date public Date stringZhuanDate(String biaoti){

服務端接收到客戶端傳送的檔名檔案的內容返回給客戶端

public class ScoketService {public static void server() {System.out.println("-------------服務已啟動-------------");ServerSocket serverSocket = null;try {server

List集合練習題 完成getAllDog 方法從一個Animal集合挑選出所有的Dog物件這些物件 放在一個Dog 集合返回。

package cn.sc.test; import java.util.ArrayList; import java.util.List; public class TestAnimal { public static void main(String[] args) { List

(多型問題)從一個Animal陣列挑選出所有的Dog物件這些物件放在一個Dog陣列返回

package com.day11_1; import java.util.*; public class Test9 { public static void main(String[] args) { Animal[] as = {

spring引入properties檔案在controller等層獲得引入檔案屬性的值

引入配置檔案方法一: 用context:property-placeholder引入配置檔案 <!-- 配置由spring讀取jdbc的屬性檔案 --> <context:property-placeholder location="classpath:

java使用Apache HttpClient傳送Http請求獲取返回結果

傳送http請求可以寫成一個工具類,HttpClient可以使用連線池建立,這樣的好處是我們可以自己定義一些配置,比如請求超時時間,最大連線數等等。 public class HttpUtil { private static CloseableHttpClient http

JAVA傳送HTTP請求接受返回內容

JDK 中提供了一些對無狀態協議請求(HTTP )的支援,下面我就將我所寫的一個小例子(元件)進行描述:  首先讓我們先構建一個請求類(HttpRequester )。  該類封裝了 JAVA 實現簡單請求的程式碼,如下:package atco.http; import java.io.BufferedR

使用HttpClient傳送http請求解析從伺服器端返回的資料

使用Apache的httpclient包可以模擬HTTP請求的傳送, get和post均可以。最方便的地方就是請求struts等web框架進行測試,省去了做測試頁面的差事。import java.io.IOException; import java.io.InputStr

layui基本使用(動態獲取數據需要的數據傳到新打開的窗口)

拉伸 窗口 動態獲取 賬單 遮罩 跳轉 透明度 -c resize <div class="xiaoxi">\n‘ + ‘ <div class="layui-row">\n‘ + ‘ <input type="

Java後臺傳送post請求接收返回資訊

/** * 向指定的 URL傳送遠端POST方法的請求 * @param url傳送請求的 URL * @param json請求引數, * @return 所代表遠端資源的響應結果 */ public static JSONObject sendPost(String

nodejs 使用axios模組發起http請求進行攔截各種請求資料

1、安裝axios npm install axios --save -g 2、先寫好攔截器、服務等 新建一個名為http_server.js的檔案 // http_server.js var axios = require("axios") // 建立axios例項s c

fiddler 攔截指定的請求 獲取請求頭和token資訊

開啟 fiddler -> rules ->customize rules 編輯customizerules.js 檔案 找到OnBeforeRequest方法 在這個方法體的第一行新增如下程式碼(說明:if判斷中的域名自行定義,可攔截指定的域名請求資訊) if (oSe

自定義Spring的Aop切面類攔截業務請求獲取請求的引數名和引數值

/**  * @author 劉俊重  * @Description 稽核校驗  * 所有的service業務方法都會先走這個方法,  * 先判斷本操作需不需要稽核,如果需要稽核則插入稽核隊列表,  * 不需要稽核則直接插入相關業務表  * @date 2017年7月5日  */ @Component @As

java模擬http的Get/Post請求設定ip與port代理

1、因為很多公司的內網都設有代理,瀏覽器通過ip與port上網,而java程式碼模擬http get方式同樣需要外網代理; 2、Java實現http的Get/Post請求程式碼; 3、主要是設定HttpURLConnection請求頭裡面的屬性 比如Cookie、Us

python使用xlrd讀取excel資料作為requests的請求引數返回的資料寫入excel

實現功能: 從excel中的第一列資料作為post請求的資料,資料為json格式;把post返回的結果寫入到excel的第二列資料中 每一行的資料都不一樣,可實現迴圈呼叫 # !/usr/bin/env python # -*- coding:utf-8 -*- #import xlwt

python實現獲取電腦和嵌入式裝置(樹3)IP、主機名、Mac地址這些資訊上傳雲伺服器。

import socket import uuid # 獲取主機名 hostname = socket.gethostname() #獲取IP ip = socket.gethostbyname(hostname) # 獲取Mac地址 def get_mac_address

Java傳送http POST,GET,獲取返回資料

/** * * @param strUrl * 請求地址 * @param params * 請求引數 * @param method * 請求方法 * @return 網路請

Ajax傳送請求接受字串

前臺: $.ajax({ type: 'POST', url: url, dataType: "jso