Jmeter CSV操作
统计行号列号
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.File; print("========输出结果表格${csvPath}============ "+"${csvPath}");
print("========Case 表格${csvPath}============ "+"${csvCase}"); BufferedReader br=new BufferedReader(new FileReader("${csvCase}"));
//BufferedReader bufRdr = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF8"));
String tmpStr="";
int rowNum=0;
while(tmeStr=br.readLine()!=null){
rowNum++;
}
rowNum=rowNum-1;//去掉CSV文件标题行;
vars.put("rowNum",String.valueOf(rowNum));
print("-----------------1CSV文件行数:--------"+rowNum+"-------------------");
log.info("-----------------1CSV文件行数:--------"+rowNum+"-------------------"); print("-----------------Case源CSV表格路径:--------"+"${csvCase}"+"-------------------");
//String getRowNum=vars.get("rowNum"); //int csvNo= Integer.parseInt(vars.get("rowNum")); int totalElements= Integer.parseInt(vars.get("rowNum"));
print("Total_csvNoCSV总行号---->> "+totalElements);
vars.put("totalElements", String.valueOf(totalElements));
//print(${__javaScript("${totalElements}")});
//print("======javaScript======"+${__javaScript(totalElements)});
prev.setDataEncoding("utf-8");
caseNo,testInput,intent,domain,expectedResult,PASS_FAIL,actualResult,response,description,tester
import java.util.Collection;
import java.util.Iterator;
import java.util.*;
import java.io.FileWriter;
import java.util.Arrays;
import java.io.Writer;
import java.util.List;
import com.alibaba.fastjson.JSONPath;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import Util.WriteStreamAppend;
import Util.Excel;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.File;
import org.apache.log4j.Logger;
import com.cloudminds.csv2excel;
import com.cloudminds.csv2excel.CsvToExcel;
import com.cloudminds.csv2excel.CsvToExcel.convertCsvToXls;
import com.cloudminds.CsvToExcel.convertCsvToXls;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import org.apache.jmeter.assertions;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.assertions.AssertionResult;
import org.json.*; import org.apache.commons.lang.math.NumberUtils;
import org.apache.log4j.Logger;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import com.opencsv.CSVReader;
import com.cloudminds.csv2excel.AppMain; //print("========输出结果表格${csvPath}============ "+"${csvPath}");
//print("========Case 表格${csvPath}============ "+"${csvCase}");
//
//BufferedReader br=new BufferedReader(new FileReader("${csvCase}"));
//String tmpStr="";
//int rowNum=0;
//while(tmeStr=br.readLine()!=null){
// rowNum++;
//}
//rowNum=rowNum-1;//去掉CSV文件标题行;
//vars.put("rowNum",String.valueOf(rowNum));
//print("-----------------CSV文件行数:--------"+rowNum+"-------------------");
//log.info("-----------------CSV文件行数:--------"+rowNum+"-------------------"); print("${caseNo}");
print("${testInput}");
print("${intent}");
print("${expectedResult}");
print("${actualResult}"); String prevQuery = prev.getSamplerData();
print("当前的接口请求拼接 输出---->> "+prevQuery);
//CookieManager manager = ctx.getCurrentSampler().getCookieManager();
//print(manager);
String response=prev.getResponseDataAsString();
print("当前的接口返回值response 输出---->> "+response);
String tr1 =response;
vars.put("rsp",response);
print("tr1--->>> "+tr1);
print("==================== "+${ResponceData});
// 转换成JSON串
JSONObject json = JSONObject.parseObject(${ResponceData});
System.out.println("1当前json--->> "+ json);
JSONObject result = JSON.parseObject(${ResponceData});
System.out.println("2当前tr1--->> "+ result); print("断言$.json==================== "+"${source}"+" "+"${text}"+" "+"${intent_json}"+" "+"${url}");
Object source = JSONPath.eval(json, "${source}");
Object text = JSONPath.eval(json, "${text}");
Object intent_json = JSONPath.eval(json, "${intent_json}");
Object url = JSONPath.eval(json, "${url}"); String sou=JSONObject.toJSONString(source);
String tex=JSONObject.toJSONString(text);
String inte=JSONObject.toJSONString(intent_json);
String ur=JSONObject.toJSONString(url);
print(sou);
print(tex);
print(inte);
print(ur);
//String arsult="source字段: "+sou+" text字段: "+tex+" intent字段: "+inte+" url字段: "+ur;
String arsult="source= "+sou+";"+" text= "+tex+";"+" intent= "+inte+";"+" url= "+ur+";"+"当前AgentID= "+"${agentId}";
print(arsult);
vars.put("arsult",arsult); //默认走,分割
char SEPARATOR = ','; public void writeLine(FileWriter writer, String[] params, char separator)
{
boolean firstParam = true;
StringBuilder stringBuilder = new StringBuilder();
String param = "";
for (int i = 0; i < params.length; i++)
{
param = params[i];
log.info(param);
print("===========写入成功============");
//如果行中的第一个参数,则不需要分隔符
if (!firstParam)
{
stringBuilder.append(separator);
}
//append
stringBuilder.append(param);
firstParam = false;
}
stringBuilder.append("\n");
print("换行==================== 。");
log.info(stringBuilder.toString());
writer.append(stringBuilder.toString());
print("写入的数据 "+stringBuilder.toString()); } //get path of csv file (creates new one if its not exists)
print("========检查csv写入============ "+"${csvPath}");
String csvFile = "${csvPath}"; print("开始写入数据======= "); print("1断言内容======= "+"${assert_content}");
String ErrorValue ="${assert_content}";
print("2断言内容======= "+ErrorValue); if(prev.getResponseDataAsString().contains("${assert_content}")){
//大入口统一成功 if (!(ur=="")) {
if (!(ur.contains("mp3"))) {
String fail="FAIL";
print(arsult);
vars.put("passorFail",fail);
Failure = true;//直接判断失败,表示接口跑失败,在结果树中sample是红色的
FailureMessage =" 当前断言不包含 " + "${assert_content}" + "." ;
print ( " 未通过当前断言不包含 " + "${assert_content}"); // this goes to stdout
log.warn( "未通过当前断言不包含 " + "${assert_content}"); // this goes to the JMeter log file
} } if (!(inte=="")) {
if (!((inte.contains("cm_dance")) || (inte.contains("cloudminds")))) {
String fail="FAIL";
print(arsult);
vars.put("passorFail",fail);
Failure = true;//直接判断失败,表示接口跑失败,在结果树中sample是红色的
FailureMessage =" 当前断言不包含 " + "${assert_content}" + "." ;
print ( " 未通过当前断言不包含 " + "${assert_content}"); // this goes to stdout
log.warn( "未通过当前断言不包含 " + "${assert_content}"); // this goes to the JMeter log file
} } if (!(tex==null)) {
if (!(tex.length()>500)) {
String fail="FAIL";
print(arsult);
vars.put("passorFail",fail);
Failure = true;//直接判断失败,表示接口跑失败,在结果树中sample是红色的
FailureMessage =" 当前断言不包含 " + "${assert_content}" + "." ;
print ( " 未通过当前断言不包含 " + "${assert_content}"); // this goes to stdout
log.warn( "未通过当前断言不包含 " + "${assert_content}"); // this goes to the JMeter log file
} } System.out.println("大入口统一Pass");
String ps="PASS";
vars.put("passorFail",ps); } else{
String fail="FAIL";
print(arsult);
vars.put("passorFail",fail);
Failure = true;//直接判断失败,表示接口跑失败,在结果树中sample是红色的
FailureMessage =" 当前断言不包含 " + "${assert_content}" + "." ;
print ( " 未通过当前断言不包含 " + "${assert_content}"); // this goes to stdout
log.warn( "未通过当前断言不包含 " + "${assert_content}"); // this goes to the JMeter log file } String[] params ={"${caseNo}", "${testInput}", "${intent}","${domain}", "${expectedResult}",vars.get("passorFail"), vars.get("arsult") ,vars.get("rsp"),"${description}","${tester}"}; FileWriter fileWriter = new FileWriter(csvFile, true);
writeLine(fileWriter, params, SEPARATOR); fileWriter.flush();
fileWriter.close();
private static Logger logger = Logger.getLogger(AppMain.class);
fileLoc = CsvToExcel.convertCsvToXls("${csvPath}", csvFile);
logger.info("文件位置==>> " + fileLoc);
响应断言判断
//响应内容正则提取部分
String ResponseResult = vars.get("ResponseResult");
//断言
String Assertion = vars.get("Assertion"); //判断断言是否通过
if(ResponseResult.equals(Assertion) || ResponseResult.equals("Process Case")){
Failure = false;
//兼容其他并存的断言
FailureMessage = "接口响应:\r\n" + prev.getResponseDataAsString() + "\r\n";
}else{
Failure = true;
if (prev.getResponseDataAsString().length() < 255) {
FailureMessage = "接口响应:\r\n" + prev.getResponseDataAsString() + "\r\n";
}else{
FailureMessage = "接口响应片段:\r\n" + ResponseResult + "\r\n";
}
FailureMessage += "用例断言:\r\n" + Assertion; String logInfo = "\n";
logInfo = logInfo + prev.getThreadName() + " " + prev.getSampleLabel() + "\n";
logInfo = logInfo + prev.getSamplerData() + "\n";
logInfo = logInfo + prev.getResponseCode() + "\n\n";
logInfo = logInfo + prev.getResponseDataAsString() + "\n";
log.info(logInfo);
}
写入csv
import com.csvreader.CsvWriter; String NewDataPath="C:\\";
CsvWriter cw = new CsvWriter(NewDataPath+"\\test.csv");
cw.writeRecord(new String[]{"test1","test2","test3"});
cw.writeRecord(new String[]{"a","aa","aaa"});
cw.close();
下载javacsv.jar,然后将其放入apache-jmeter-*\lib目录
import com.csvreader.CsvWriter;
Jmeter CSV操作的更多相关文章
- Java CSV操作(导出和导入)
Java CSV操作(导出和导入) CSV是逗号分隔文件(Comma Separated Values)的首字母英文缩写,是一种用来存储数据的纯文本格式,通常用于电子表格或数据库软件.在 CSV文件 ...
- csv操作帮助类
功能描述: 集合转换为csv数据 DataSe转换为csv数据 using System; using System.Collections.Generic; using System.Data; u ...
- Jmeter接口测试操作
一.Jmeter接口测试操作步骤 1. 启动jmeter,右键点击测试计划-->添加-->Threads(Users)-->线程组,点击线程组菜单,右边显示参数设置. 2 . 右键点 ...
- 【Java】Java CSV操作代码
CSV是逗号分隔文件(Comma Separated Values)的首字母英文缩写,是一种用来存储数据的纯文本格式,通常用于电子表格或数据库软件.在 CSV文件中,数据“栏”以逗号分隔,可允许程序通 ...
- python之pandas数据筛选和csv操作
本博主要总结DaraFrame数据筛选方法(loc,iloc,ix,at,iat),并以操作csv文件为例进行说明 1. 数据筛选 a b c (1)单条件筛选 df[df[] # 如果想筛选a列的取 ...
- pandas 写csv 操作
pandas 写csv 操作 def show_history(self): df = pd.DataFrame() df['Time'] = pd.Series(self.time_hist) df ...
- jmeter分布式操作-远程启动功能探索
一.背景: 之前在Jmeter插件监控服务器性能一篇中说到,在非GUI环境中监控时为了保存监控数据需要修改jmeter脚本,并且每次通过施压机(远程服务器,非GUI环境)来压测时都要将jmeter脚本 ...
- JMeter数据库操作详解
Jmeter提供了JDBC连接的插件,通过执行SQL语句的java API,实现对数据库的访问和查询,同时可以操作一次向数据库插入上百条上千条数据. 一.安装驱动包 将需要连接JDBC的jar包放入j ...
- jmeter csv中获取带引号的数据详情
最近在工作中,对jmeter实践的点滴的记录这里分享,不一定正确,仅供参考和讨论,有想法的欢迎留言.谈论. 1技巧1:从csv中获取带引号的数据详情 背景:我们从csv中获取数据,在jmeter中使用 ...
随机推荐
- As I Began to Love Myself
As I Began to Love Myself: Charlie Chaplin on his 70th birthday As I began to love myself I found th ...
- php cookie 操作
创建 cookie <?php setcookie(); ?> 取回 Cookie 的值 <?php // Print a cookie echo $_COOKIE["us ...
- dsu on tree学习笔记
前言 一次模拟赛的\(T3\):传送门 只会\(O(n^2)\)的我就\(gg\)了,并且对于题解提供的\(\text{dsu on tree}\)的做法一脸懵逼. 看网上的其他大佬写的笔记,我自己画 ...
- 简易版最长序列(map映射)
题目描述 给你一组数(未排序),请你写设计一个程序:求出里面个数最多的数.并输出这个数的长度. 例如:给你的数是:1. 2. 3. 3. 4. 4. 5. 5. 5 .6, 其中只有6组数:1, ...
- qt mvc3
前面两节讲的model是一维的,这次开始二维的也就是我们常说的Table,相对与list,我们多了一个列的概念. 下面讲解一个例子.我先说明一下我们这个例子,在程序目录下,我们有一个文本文件,其中存放 ...
- ASP.NET MVC传递Model到视图的多种方式之通用方式的使用
ASP.NET MVC传递Model到视图的多种方式总结——通用方式的使用 有多种方式可以将数据传递到视图,如下所示: ViewData ViewBag PartialView TempData Vi ...
- Windows 下 把EXE 程序变成服务运行
1. 下载 instsrv.exe 和 srvany.exe 我下载的地址 [点击打开链接][https://www.cr173.com/soft/64394.html] 2. cmd cd ...
- osg 添加 fbx插件 osg中编译fbx
使用osg加载fbx模型,需要自己编译fbx插件,编译流程与插件使用案例如下 代码地址:https://github.com/shelltdf/osgFBX CMake Error: The foll ...
- 阶段5 3.微服务项目【学成在线】_day17 用户认证 Zuul_10-前端显示当前用户-jwt查询接口
定义接口 在api的项目里面定义.AuthControllerApi里面定义接口 jwtResult,里面就有一个jwt的字段. 实现接口 需要这三步 定义私有方法从cookie中读取访问令牌 参数需 ...
- PAT 甲级 1055 The World's Richest (25 分)(简单题,要用printf和scanf,否则超时,string 的输入输出要注意)
1055 The World's Richest (25 分) Forbes magazine publishes every year its list of billionaires base ...