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提供的框架). ·扩 ... 
随机推荐
- Nodejs+Express 搭建 web应用
			简单的记录下关于如何使用nodejs+Express 极速搭建一个web应用. 项目所需,要用到nodejs,那就去学咯.简单的看了下 七天学会NodeJS,Node.js 教程.发现其实好简单的,分 ... 
- 从零开始搭建运维体系 - ansible
			从零开始搭建运维体系 - ansible 基本配置好了局域网内的机器后,第一个遇到的问题就是如何批量操作这么多台机器,ansible就是这么一个自动化运维工具. ansible是一个基于ssh的批量远 ... 
- 搞懂Redis到底快在哪里
			前言 Redis是一种基于键值对(Key-Value)的NoSQL数据库,Redis的Value可以由String,hash,list,set,zset,Bitmaps,HyperLogLog等多种数 ... 
- Service Worker基础知识整理
			Service Worker是什么 service worker 是独立于当前页面的一段运行在浏览器后台进程里的脚本.它的特性将包括推送消息,背景后台同步, geofencing(地理围栏定位),拦截 ... 
- Flutter 即学即用系列博客——03 在旧有项目引入 Flutter
			前言 其实如果打算在实际项目中引入 Flutter,完全将旧有项目改造成纯 Flutter 项目的可能性比较小,更多的是在旧有项目引入 Flutter. 因此本篇我们就说一说如何在旧有项目引入 Flu ... 
- Cayley图数据库的简介及使用
			图数据库 在如今数据库群雄逐鹿的时代中,非关系型数据库(NoSQL)已经占据了半壁江山,而图数据库(Graph Database)更是攻城略地,成为其中的佼佼者. 所谓图数据库,它应用图理论( ... 
- 用JS在html页面实现打印功能
			首先在head里面加入下面一段js代码: <script language="javascript"> function preview(oper) { if (ope ... 
- 数据库缓存mybatis,redis
			简介 处理并发问题的重点不在于你的设计是怎样的,而在于你要评估你的并发,并在并发范围内处理.你预估你的并发是多少,然后测试r+m是否支持.缓存的目的是为了应对普通对象数据库的读写限制,依托与nosql ... 
- php禁用函数设置及查看方法详解
			这篇文章主要介绍了php禁用函数设置及查看方法,结合实例形式分析了php禁用函数的方法及使用php探针查看禁用函数信息的相关实现技巧,需要的朋友可以参考下 本文实例讲述了php禁用函数设置及查看方法. ... 
- Android为TV端助力 listview与recyclerview上下联动
			首先是主布局fragment里面的xml文件 <?xml version="1.0" encoding="utf-8"?><RelativeL ... 
