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中使用 ...
随机推荐
- Gluon学习02-使用GPU
小书匠kindle 目录,方便快速定位: 1.安装cuda与cudnn 2.安装mxnet-gpu 本机环境介绍: 系统:Linuxmint Python版本:Python3 1.安装cuda与cud ...
- 多层iframe取值问题
var fid = self.frameElement.getAttribute("id");//获取当前页面的iframe的id值 var fid = ‘workspace’: ...
- 浅谈无旋treap(fhq_treap)
一.简介 无旋Treap(fhq_treap),是一种不用旋转的treap,其代码复杂度不高,应用范围广(能代替普通treap和splay的所有功能),是一种极其强大的平衡树. 无旋Treap是一个叫 ...
- 判断声明出来的list为空的时候,list!=null
判断声明出来的list为空的时候,listjcxm!=null&&listjcxm.size()==0: 有时候list不为null但是size为0 map也是类似
- 【2018.08.01】(表/栈/队列/大小顶堆)学习Stark和Queue算法小记
Train Problem I As the new term comes, the Ignatius Train Station is very busy nowadays. A lot of st ...
- fidder监控请求响应时间和请求IP
1.增加监控请求的详情时间 在CustomRules.js的class Handlers中增加 //添加请求的响应时间 public static BindUIColumn("Time T ...
- error: cannot connect to daemon解决办法
本文链接:https://blog.csdn.net/ipinki1218/article/details/80704806运行adb shell时出现error: cannot connect to ...
- angular 中父子路由
1. 创建组件引入组件 import { NewsaddComponent } from './components/newsadd/newsadd.component'; import { News ...
- BIM IFC算量
1.基础工程:挖槽.垫层.基础底板.基础墙.地圈梁.暖气沟.回填土等:2.主体工程:梁.板.柱.墙等:3.屋顶工程:挑檐.女儿墙.保温.防水.压顶等:4.装修工程:外墙抹灰.墙裙.门窗套.内墙抹灰.粉 ...
- osg fbx 模型结构操作
osg::Node* TeslaManage::findOsgNodeByName(QString &nodeNme) { osg::Node* findNode = NULL; std::v ...