Jmeter二次开发代码(3)
package org.apache.jmeter.functions;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.file.NoSuchFileException;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* File data container for CSV (and similar delimited) files Data is accessible
* via row and column number
*
*/
public class MyExcelReadBeanInfo {
private static final Logger log = LoggerFactory.getLogger(MyExcelReadBeanInfo.class);
private final List<List<String>> fileData; // Lines in the file, split into columns
private final String fileName; // name of the file
private final String sheetName; // name of the sheetName
//实例化workbook
private static Workbook excelWorkBook;
//实例化sheet
private static Sheet excelSheet;
//实例化FILE
private static FileInputStream excelFile;
//定义一个参数设置起始行
private static int beginCellNum;
//顶一个一个参数设置起始列
private static int beginRowNum;
private int nextRow;
public MyExcelReadBeanInfo(String file, String sheet, int rowNum, int cellNum) throws IOException, FileNotFoundException {
log.debug("FRCC({},{})", file, sheet, cellNum, rowNum);
fileName = file;
sheetName = sheet;
beginCellNum = cellNum;
beginRowNum = rowNum;
nextRow = 0;
fileData = new ArrayList<>();
load();
}
/*
* 此方法主要用于设定Excel的路径和sheet名称
*/
private void load() throws IOException, FileNotFoundException {
try {
// 实例化Excel文件的FileInputStream对象
excelFile = new FileInputStream(fileName);
// 实例化Excel文件的Workbook对象
String FileExtensionName = fileName.substring(fileName.indexOf("."));
// 判断文件类型如果是.xlsx,则使用XSSFWorkBook对象进行实例化
// 判断文件类型如果是.xls,则使用SSFWorkBook对象进行实力化
if (FileExtensionName.equals(".xlsx")) {
excelWorkBook = new XSSFWorkbook(excelFile);
} else if (FileExtensionName.equals(".xls")) {
excelWorkBook = new HSSFWorkbook(excelFile);
}
// 实例化Sheet对象,指定Excel文件中的Sheet名称,后续用于Sheet中,行列的单元格操作
excelSheet = excelWorkBook.getSheet(sheetName);
//获取Excel数据文件Sheet中的数据行号
//getLastRowNum方法获取数据的的最后行号
//getFirstRowNum方法获取数据的第一行行号
//相减后算出数据的行号
//注意:Excel文件的行号和列号都是从0开始的
int rowCount = excelSheet.getLastRowNum() - excelSheet.getFirstRowNum() + 1;
for(int i = beginRowNum - 1; i<rowCount; i++) {
System.out.println(excelRead(i, beginCellNum).size());
System.out.println(excelRead(i, beginCellNum));
fileData.add(excelRead(i, beginCellNum));
}
} catch (NoSuchFileException e) {
fileData.clear();
log.warn(e.toString());
throw e;
}
}
/*
* 此方法主要用于读取Excel中的数据
*/
private static List<String> excelRead(int RowNum, int cellNum) {
//实例化一个List
List<String> result = new ArrayList<>();
// 注意:Excel文件的行号和列号都是从0开始的
// 获取Excel数据文件中的列号
int cellCount = excelSheet.getRow(RowNum).getLastCellNum();
// 循环遍历获取数据
for (int i = cellNum-1; i < cellCount; i++) {
String excelDate = (String) (excelSheet.getRow(RowNum).getCell(i).getCellTypeEnum() == CellType.STRING
? excelSheet.getRow(RowNum).getCell(i).getStringCellValue()
: "" + excelSheet.getRow(RowNum).getCell(i).getNumericCellValue());
result.add(excelDate);
}
return result;
}
public String getColumn(int rowNum) throws IndexOutOfBoundsException {
String colData;
colData = fileData.get(rowNum).get(0);
log.debug("{}({},{}):{}", fileName, rowNum, colData);
return colData;
}
public int nextRow() {
int row = nextRow;
nextRow++;
if (nextRow >= fileData.size()) {// 0-based
nextRow = 0;
}
log.debug("Row: {}", row);
return row;
}
/**
* @return the file name for this class
*/
public String getFileName() {
return fileName;
}
// Added to support external testing
public int getSize(){
return fileData.size();
}
}
Jmeter二次开发代码(3)的更多相关文章
- Jmeter二次开发代码(2)
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreem ...
- Jmeter二次开发代码(1)
package org.apache.jmeter.functions; import java.util.Collection;import java.util.LinkedList;import ...
- JMeter二次开发(2)-编写 JSON Assertion 插件
本篇文章主要介绍如何对JMeter进行二次开发,添加自己所需的功能.这里以Json验证为例进行说明.在web接口测试过程中,JSON的应用已经非常普遍,但原声的JMeter并没有提供Json及Json ...
- Jmeter二次开发——自定义函数
在之前的博文中,Jmeter二次开发--基于Java请求,已介绍了Jmeter二次开发的基础情况,上次分享的是java请求开发,今天来分享下Jmeter中的函数开发.聊到Jmeter的函数,知道Jme ...
- JMeter二次开发(1)-eclipse环境配置及源码编译
1.下载src并解压 http://jmeter.apache.org/download_jmeter.cgi 2.获取所需jar包,编译 ant download_jars ant instal ...
- jmeter 二次开发
基于jmeter的java请求的二次开发 常用的方法: ①.addArgument("name", "value") 定义参数 ②.sampleStart ...
- Jmeter二次开发——基于Java请求
简述 这近几年,越来越多非http的协议需要进行性能测试,包括不仅限于各类rpc.mq.缓存等.对于这些协议,市面上可能没有现成的工具可以直接使用,这个时候,我们可以自己动手,通过编写相应的JavaS ...
- kettle工具二次开发-代码启动JOB
kettle工具是一款优秀的数据同步.数据处理的BI工具,收到了很多人的青睐.kettle软件通过可视化的图标可以让我们很轻易的能完成数据同步.处理的开发工作.但是使用kettle可视化界面在跑JOB ...
- 性能测试基础---jmeter二次开发
·Jmeter的二次开发,常见的有以下几种类型: ·扩展.修改Jmeter已有的组件(源代码) ·扩展.修改Jmeter已有的函数. ·完全自主开发一个新的组件(依赖于Jmeter提供的框架). ·扩 ...
随机推荐
- 又拍云张聪:OpenResty 动态流控的几种姿势
2019 年 1 月 12 日,由又拍云.OpenResty 中国社区主办的 OpenResty × Open Talk 全国巡回沙龙·深圳站圆满结束,又拍云首席架构师张聪在活动上做了< Ope ...
- ASP.NET Core中使用GraphQL - 第三章 依赖注入
ASP.NET Core中使用GraphQL ASP.NET Core中使用GraphQL - 第一章 Hello World ASP.NET Core中使用GraphQL - 第二章 中间件 SOL ...
- 《前端之路》之三 数组的属性 && 操作方法(上)
目录 03:数组的属性 && 操作方法(上) 03:数组的属性 && 操作方法(上) 一.Array property 数组的属性 1.constructor 返回对创 ...
- 探索js原型链和vue构造函数中的奥妙
这篇文章首先会讲到原型链以及原型链的一些概念,然后会通过分析vue的源码,来看一下vue的构造函数是如何被创建的,now we go! 一.什么是原型链? 简单回顾下构造函数,原型和实例的关系: ...
- .NET Core中的一个接口多种实现的依赖注入与动态选择看这篇就够了
最近有个需求就是一个抽象仓储层接口方法需要SqlServer以及Oracle两种实现方式,为了灵活我在依赖注入的时候把这两种实现都给注入进了依赖注入容器中,但是在服务调用的时候总是获取到最后注入的那个 ...
- Tesseract 在 windows 下的安装及简单应用
Tesseract 是一个开源的 OCR 引擎,可以识别多种格式的图像文件并将其转换成文本,最初由 HP 公司开发,后来由 Google 维护.下载地址:https://digi.bib.uni-ma ...
- Tomcat 对 HTTP 协议的实现(上)
协议,直白的说就是存在一堆字节,按照协议指定的规则解析就能得出这堆字节的意义.HTTP 解析分为两个部分:解析请求头和请求体. 请求头解析的难点在于它没有固定长度的头部,也不像其他协议那样提供数据包长 ...
- DSAPI 键盘鼠标钩子
通常,说到Hook键盘鼠标,总需要一大堆代码,涉及各种不明白的API.而在DSAPI中,可以说已经把勾子简化到不能再简化的地步.甚至不需要任何示例代码即会使用.那么如何实现呢? Private Wit ...
- wkhtmltox实现网页转换成图片或pdf
1.先下载http://download.gna.org/wkhtmltopdf/obsolete/windows/wkhtmltox-0.11.0_rc1-installer.exe,安装 2.在命 ...
- 重写Ext中的typeOf函数
重写Ext中的typeOf函数来解决Ext JS中typeOf对字符串对象.元素节点.文本节点.空白文本节点判断并不准确的问题 重写的typeOf函数使用自己实现的TypeOf函数2中的代码 测试代码 ...