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中使用 ...
随机推荐
- AtCoder Grand Contest 001 题解
传送门 \(A\) 咕咕咕 const int N=505; int a[N],n,res; int main(){ scanf("%d",&n); fp(i,1,n< ...
- Ansible管理上千台主机时需要的速度优化
1 开启ssh长连接 OpenSSH 5.6版本后SSH支持了Multiplexing 设置参数 ssh_args = -C -o ControlMaster=auto -o ControlPersi ...
- ICEM-轴(周期复制网格)
原视频下载地址:https://yunpan.cn/cqMnfpqQQdZZI 访问密码 802b
- GO- 使用JSON
1 json.Marshal 把对象转换为JSON的方法 原型如下 func Marshal(v interface{}) ([]byte, error)这个函数接收任意类型的数据 v,并转换为字节 ...
- Debian/Ubuntu/CentOS开机启动
说明:常用的Linux启动项就是在/etc/rc.local的exit 0语句之间添加启动脚本,另一种方法,使用update-rc.d命令添加/禁止开机启动项. 在centos7中增加脚本有两种常用的 ...
- 使用INDY解决BASE64回车换行问题
使用INDY解决BASE64回车换行问题 使用DELPHI EncodeStream(),对流数据进行BASE64编译以后,每隔75个字符,就会添加回车换行符(#$D#$A),这会造成许多问题. 网上 ...
- python 设计模式之中介者模式
#先啰嗦一下 至少半个多月的样子没写博客了,月初去了趟黄山,赏了美景,自然没时间也没条件敲博客了,一个多星期就这么过去了.返回深圳后,工作积压了一堆,然后白天就马不停蹄的忙工作,晚上回家伺候小娃,又想 ...
- java 抽象类为什么不能被实例化?
我把CSDN论坛里面的一个帖子内容list到下面,自己看着理解,东家一言,西家一语,杂合起来,基本上也就理解了java中的抽象类为什么不能被实例化了. 因篇幅有限,只能罗列部分留言 以下内容不分先后顺 ...
- android: 日期转Unix时间戳,Unix时间戳转日期,带时区
1.UTC时间&GMT时间 UTC时间是时间标准时间(Universal Time Coordinated),UTC是根据原子钟来计算时间,误差非常小. UTC也是指零时区的时间,如果要表示其 ...
- 批量转换Excel转CSV文件
本文为Excel VBA代码,可以实现将某一文件夹内的Excel文件(xls或者xlsx)另存为“逗号分隔的csv文件”. 使用条件: 1. Windows系统: 2. 已安装 MS 2007或以 ...