1. 程式人生 > >jmeter讀取本地CSV檔案

jmeter讀取本地CSV檔案

用jmeter錄製考試上傳成績等指令碼時,出現的問題及解決方法如下:

1、beanshell前置處理器,不能讀取本地csv檔案裡的資料:

方法一:

在beanshell裡不能直接從本地的csv檔案裡讀取到tid的值,幸好tid資料是有規律的,從700000開始,依次增加,於是通過如下的幾個步驟,解決了我的問題:

(1)首先在test plan增加了一個全域性變數,如tid,並賦值700000(這時,就不能讀取csv裡的資料了,這裡需要注意);

(2)在beanshell前置處理器上寫如下程式碼:

這裡的md5加密是匯入的jar包,進行呼叫的

import com.xuexin.*;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

	String tid=vars.get("tid");
	String m_xuexin_id = Integer.toString(Integer.parseInt(tid)+1);
	String examSubjectID = "******";
	String mid_url = "examSubjectID=" + examSubjectID + "&xuexinID=" + m_xuexin_id;
	mymd5 mymd5 = new mymd5();
     	String sign_score = mymd5.getMd5(mid_url);
     	vars.put("sign_score",sign_score.toString());
     	vars.put("tid",m_xuexin_id.toString());
(3)http請求,引數值處,直接讀取tid和sign_score,然後tid和sign就都能讀取出來並匹配了。

PS:

a.傳的json串裡,包含很多個picnum,但是這個數值----程式本身也是隨機生成的,所以最後用隨機數函式生成picnum,這樣既和伺服器已有的不重複,本身基本上也不會重複

b.還可以用時間函式,每次取當前時間,這樣既不相同,也不會重複,前提是這些數值伺服器本身也是按一定規則生成的。

方法二:

寫java程式碼直接從本地讀取csv檔案的資料,然後匯入jar包,通過呼叫jar包的方法引用

(1)首先在test plan增加了2個全域性變數,如i,j,並分別賦值1、0;

(2)引入jar包,並在beanshell前置處理器上進行呼叫:

java原始碼

import java.io.*;

/**
 * Created by New-T450 on 2017/7/20.
 */
public class ReadCsvData {

    public static String readCSV(int row,int col){
        String last = "";
        try {
            BufferedReader reader = new BufferedReader(new FileReader("D:\\scriptFile\\jmeter\\parameter\\yjxdata.csv"));//換成你的檔名
            // reader.readLine();//第一行資訊,為標題資訊,不用,如果需要,註釋掉
            String line = null;
            int index=0;
            while((line=reader.readLine())!=null){
                String item[] = line.split(",");//CSV格式檔案為逗號分隔符檔案,這裡根據逗號切分
                if(index==row-1){
                    if(item.length>=col){
                        last = item[col];//這就是你要的資料了
                        System.out.println(last);
                    }
                }
                //int value = Integer.parseInt(last);//如果是數值,可以轉化為數值
                index++;
            }
            return last;
            
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }

    }

}
beanshell呼叫原始碼
	mymd5 mymd5 = new mymd5();
	ReadCsvData readdata = new ReadCsvData();

	String row=(String)vars.get("i");
	String col=(String)vars.get("j");

	String tid1=readdata.readCSV(Integer.parseInt(row),Integer.parseInt(col));
	vars.put("tid1",tid1.toString());
	log.info("tid1="+tid1);

	row=Integer.parseInt(row)+1+"";
	vars.put("i",row);
     	vars.put("j",col);
	
	String examSubjectID = "********";
	String m_xuexin_id = Integer.toString(Integer.parseInt(tid1));
	String mid_url = "examSubjectID=" + examSubjectID + "&xuexinID=" + m_xuexin_id;
	String sign_score = mymd5.getMd5(mid_url);
    
	vars.put("sign_score",sign_score.toString());
	vars.put("examSubjectID",examSubjectID.toString());
	vars.put("m_cur_version",m_cur_version.toString());
	vars.put("tid1",tid1.toString());
	log.info("tid1="+m_xuexin_id+" and sign_score="+sign_score);
(3)http請求,引數值處,直接讀取tid1和sign_score,然後tid1和sign就都能讀取出來並匹配了。

PS:

a.因為需要ReadCsvData.class 裡的方法返回值,所以定義方法時不能用void關鍵字;由於要返回last的值,所以要把last在方法的最前面進行宣告並賦值空字串;

b.由於java裡傳參的時候是引用的int型別,所以在beanshell裡需要把字串強轉為int型別,否則就會找不到readCSV這個方法;

c.由於每個迴圈都需要i和j增加,因此用vars.put時,應該把row和col值賦給i、j,這樣才能保證下個迴圈讀取的資料是下一行或者下一列的。

2、content-type錯誤,導致伺服器接收不到我傳遞的引數:

因為post的引數裡,其中有一個是json串,於是我就把整個請求都當成json串往伺服器傳了,因此我在http請求下添加了一個http資訊頭管理器,並在管理器中添加了一個引數,引數名稱為Content-Type,引數值為application/json;結果伺服器收到的引數一直為空。後來找了很長時間的原因,才發現可能是多了一個這個,試著把它刪了,執行後正常,沒問題了。

3.json串裡,有的引數也需要引數化,這裡只需要把需要引數化的地方替換成${引數名稱},然後就能讀取資料了(當然前提是能有地方存放正確的引數值列表)。

相關推薦

jmeter讀取本地CSV檔案

用jmeter錄製考試上傳成績等指令碼時,出現的問題及解決方法如下: 1、beanshell前置處理器,不能讀取本地csv檔案裡的資料: 方法一: 在beanshell裡不能直接從本地的csv檔案裡讀取到tid的值,幸好tid資料是有規律的,從700000開始,依次增加,於

pandas 讀取本地csv檔案,處理,儲存

from sqlalchemy import create_engine import pandas as pd from pandas import DataFrame, Series engine = create_engine(“mysql+pymysql

win7(64位)Sql server 用T-sql讀取本地資料檔案dbf的資料檔案

原文地址:https://www.cnblogs.com/cl1006/p/9924066.html 第一步啟用Ad Hoc Distributed Queries  在SQLserver執行以下的語句: exec sp_configure 'show advanced options

讀取本地座標檔案,在百度地圖畫運動軌跡(2018新華三“物聯網終端行為分析”第三題)

目錄 問題描述 解決思路 1.註冊百度金鑰 2.建立本地TXT檔案。 3.編寫HTML程式碼 4.搭建本地HTML伺服器 5.在百度地圖顯示運動軌跡 參考文獻 問題描述 該部分內容來自新華三NAVIGATE創客節-黑客鬆“物聯網終端行為分析”第三題:已知一

Android 讀取本地txt檔案和寫入txt檔案本地

import android.util.Log; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java

js讀取本地json檔案

js程式碼: // 獲取api的ip部分             var mJson=$.ajax({url:"api.json",async:false});      

Java 常用的工具類—判斷Excel版本&讀取Excel/CSV檔案

以下內容均來自實際專案需求,記錄下,網上找的讀取Excel會出現不少問題,下面程式碼是經過好多次測試改進的符合現在專案的程式碼,如有不同要求,請自行修改,程式碼均只去掉了包名。 注:我們的Excel 第一行是表頭,其他行是資料1、第一行遇到空列,後面的內容自動忽略掉, 2、如

nginx 配置 讀取本地靜態檔案

通過瀏覽器http://127..0.0.1:8010/ROOT/swf/123.pdf訪問到系統目錄E:/ROOT/swf/123.pdf需要在nginx.conf中新增location規則 如下:   server {        

python 讀取本地txt檔案的doc的url,自動下載,查詢內容

參考文章 python讀寫doc/docx/txt/xls檔案 python讀取word文件表格裡的資料 使用python找到指定路徑下的全部txt(可以是jpg,doc等等)檔案 獲取txt中儲存的url地址 import re import urllib.request

IO流讀取本地檔案,並且在控制檯打印出來

第一步:我們在D盤根目錄下寫個HelloWorld這個入門程式,你可能還沒有刪除。那我們就拿這個java檔案來試試 第二步:開啟你習慣使用的idea工具,複製以下程式碼,注意:路徑,包名,還有類名 package javaexercises; imp

Python讀取複雜CSV檔案

class ReadCSV: anchor = 0 final = [] def __init__(self, path, head=0): quote = 0 row_tmp = '' cell_tmp = '' cell = [] channel = file(path

Unity3d 讀取本地txt檔案

            建立一個MyFile.txt檔案、將它放到streamingAssetsPath資料夾下(沒有的話手動建立一個)              var fileAddress = System.IO.Path.Combine(Application.st

Tcl 指令碼讀取複雜CSV檔案

用 tcl/tk 寫了個測試工具,需要用tcl 指令碼讀取csv 檔案。但複雜的csv 檔案中,每個單元格可能包含逗號,雙引號,換行符,雙引號中又有換行符等等情況,導致讀取困難。網上找到的一些例子,大多是逐個讀取單個字元,用了一段時間,感覺效率差了點。研究了一下,自己寫了

android app 讀取本地.db檔案,實現不變資料本地化(附小demo)

今天是正月十三,作為壽星的我依然奮鬥在工作中,醉了。-------------喧囂的成人世界,守住本真的心。 在專案中,有一部分資料,雖然是從介面拿取的,但是這些資料有個特點,就是一般不會再去改變了。對於這樣的資料來說,我是絕對不會每次用都去調介面,請求資料需要時間,需

java 讀取本地excel 檔案,將excel內容轉換成java物件

操作工具 eclipse + maven 1. java操作excel所使用的jar包 poi-ooxml        <dependency>     <groupId>org.apache.poi</groupId>     <

android 之 讀取本地json檔案返回string

public static String getJson(String fileName, Context context){ StringBuilder stringBuilder

Vue 讀取本地靜態檔案 json【很全,很詳細】

文章轉自原創部落格    http://www.xdx97.com/#/single?bid=c4fadbb8-93e3-3129-10eb-a7216f4a99b4   目的:使用vue讀取本地的靜態檔案。   方法一:require

java讀取寫入csv檔案Demo

讀取Demo: public static void main(String[] args) { File csv = new File("C:\\Result.csv"); // CSV

H264解碼之讀取本地H264檔案

讀取本地檔案,並逐幀讀取: onReadThread(): void RtspVideo::onReadThread() { // 解碼引數 char *virInBuf = new char[MAX_DECODER_INPUT_BUFFER_SIZE]; //初

使用JS讀取本地文字檔案(相容各種瀏覽器)

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script type="te