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)的更多相关文章

  1. Jmeter二次开发代码(2)

    /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreem ...

  2. Jmeter二次开发代码(1)

    package org.apache.jmeter.functions; import java.util.Collection;import java.util.LinkedList;import ...

  3. JMeter二次开发(2)-编写 JSON Assertion 插件

    本篇文章主要介绍如何对JMeter进行二次开发,添加自己所需的功能.这里以Json验证为例进行说明.在web接口测试过程中,JSON的应用已经非常普遍,但原声的JMeter并没有提供Json及Json ...

  4. Jmeter二次开发——自定义函数

    在之前的博文中,Jmeter二次开发--基于Java请求,已介绍了Jmeter二次开发的基础情况,上次分享的是java请求开发,今天来分享下Jmeter中的函数开发.聊到Jmeter的函数,知道Jme ...

  5. JMeter二次开发(1)-eclipse环境配置及源码编译

    1.下载src并解压 http://jmeter.apache.org/download_jmeter.cgi   2.获取所需jar包,编译 ant download_jars ant instal ...

  6. jmeter 二次开发

    基于jmeter的java请求的二次开发 常用的方法: ①.addArgument("name", "value")    定义参数 ②.sampleStart ...

  7. Jmeter二次开发——基于Java请求

    简述 这近几年,越来越多非http的协议需要进行性能测试,包括不仅限于各类rpc.mq.缓存等.对于这些协议,市面上可能没有现成的工具可以直接使用,这个时候,我们可以自己动手,通过编写相应的JavaS ...

  8. kettle工具二次开发-代码启动JOB

    kettle工具是一款优秀的数据同步.数据处理的BI工具,收到了很多人的青睐.kettle软件通过可视化的图标可以让我们很轻易的能完成数据同步.处理的开发工作.但是使用kettle可视化界面在跑JOB ...

  9. 性能测试基础---jmeter二次开发

    ·Jmeter的二次开发,常见的有以下几种类型: ·扩展.修改Jmeter已有的组件(源代码) ·扩展.修改Jmeter已有的函数. ·完全自主开发一个新的组件(依赖于Jmeter提供的框架). ·扩 ...

随机推荐

  1. Nodejs+Express 搭建 web应用

    简单的记录下关于如何使用nodejs+Express 极速搭建一个web应用. 项目所需,要用到nodejs,那就去学咯.简单的看了下 七天学会NodeJS,Node.js 教程.发现其实好简单的,分 ...

  2. 从零开始搭建运维体系 - ansible

    从零开始搭建运维体系 - ansible 基本配置好了局域网内的机器后,第一个遇到的问题就是如何批量操作这么多台机器,ansible就是这么一个自动化运维工具. ansible是一个基于ssh的批量远 ...

  3. 搞懂Redis到底快在哪里

    前言 Redis是一种基于键值对(Key-Value)的NoSQL数据库,Redis的Value可以由String,hash,list,set,zset,Bitmaps,HyperLogLog等多种数 ...

  4. Service Worker基础知识整理

    Service Worker是什么 service worker 是独立于当前页面的一段运行在浏览器后台进程里的脚本.它的特性将包括推送消息,背景后台同步, geofencing(地理围栏定位),拦截 ...

  5. Flutter 即学即用系列博客——03 在旧有项目引入 Flutter

    前言 其实如果打算在实际项目中引入 Flutter,完全将旧有项目改造成纯 Flutter 项目的可能性比较小,更多的是在旧有项目引入 Flutter. 因此本篇我们就说一说如何在旧有项目引入 Flu ...

  6. Cayley图数据库的简介及使用

    图数据库   在如今数据库群雄逐鹿的时代中,非关系型数据库(NoSQL)已经占据了半壁江山,而图数据库(Graph Database)更是攻城略地,成为其中的佼佼者.   所谓图数据库,它应用图理论( ...

  7. 用JS在html页面实现打印功能

    首先在head里面加入下面一段js代码: <script language="javascript"> function preview(oper) { if (ope ...

  8. 数据库缓存mybatis,redis

    简介 处理并发问题的重点不在于你的设计是怎样的,而在于你要评估你的并发,并在并发范围内处理.你预估你的并发是多少,然后测试r+m是否支持.缓存的目的是为了应对普通对象数据库的读写限制,依托与nosql ...

  9. php禁用函数设置及查看方法详解

    这篇文章主要介绍了php禁用函数设置及查看方法,结合实例形式分析了php禁用函数的方法及使用php探针查看禁用函数信息的相关实现技巧,需要的朋友可以参考下 本文实例讲述了php禁用函数设置及查看方法. ...

  10. Android为TV端助力 listview与recyclerview上下联动

    首先是主布局fragment里面的xml文件 <?xml version="1.0" encoding="utf-8"?><RelativeL ...