Jmeter读取Excel,BeanShell取样器调用rt.jar和jxl.jar
2024-08-26 15:42:52
将rt.jar和jxl.jar,放在\apache-jmeter-5.0\lib\ext下面
import java.io.*;
import java.util.ArrayList;
import java.util.List; import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
String path = "C:/123.xls";
InputStream instream = new FileInputStream(path);
Workbook readwb = null;
Cell cell= null;
readwb = Workbook.getWorkbook(instream);
// 获取第一张Sheet表,Sheet的下标是从0开始
Sheet readsheet = readwb.getSheet(0);
// 获取Sheet表中所包含的总列数
int rsColumns = readsheet.getColumns();
// 获取Sheet表中所包含的总行数
int rsRows = readsheet.getRows(); // 获取指定单元格的对象引用
List list = new ArrayList();
//线程数(按线程数取行数)
rsRows = ${__threadNum}; print("线程数=========== :"+${__threadNum});
for (int i = 0; i < rsRows; i++) //行
{
for (int j = 0; j < rsColumns; j++) //列
{
cell = readsheet.getCell(j,i);
//list存第一行名字
if( i== 0){
list.add(cell.getContents());
continue;
}
//put变量存第二行以后的值(线程3以后会反复替换以前put的值)
vars.put(list.get(j),cell.getContents());
print(vars.get(list.get(j)));
} }
//log.info("isEnc:"+vars.get("name"));//调用jmeter内置log对象,日志会打印到jmeter.log中
//System.out.println(vars.get(list.get(j)));//打印
//print(vars.get(list.get(j)));//打印
//return vars.get(list.get(j));//返回
//print((vars.get("表头"))
由于list无法传递,则每个线程都需要将第一行表头读取存在list里面;
但线程3以后,会反复读取Excel第二行(前面行)的数据,进行vars.put()替换值操作。
优化以上问题
import java.io.*;
import java.util.ArrayList;
import java.util.List; import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
String path = "C:/123.xls";
InputStream instream = new FileInputStream(path);
Workbook readwb = null;
Cell cell= null;
readwb = Workbook.getWorkbook(instream);
// 获取第一张Sheet表,Sheet的下标是从0开始
Sheet readsheet = readwb.getSheet(0);
// 获取Sheet表中所包含的总列数
int rsColumns = readsheet.getColumns();
// 获取Sheet表中所包含的总行数
int rsRows = readsheet.getRows(); // 获取指定单元格的对象引用
List list = new ArrayList();
//线程数(按线程数取行数)
rsRows = ${__threadNum};
//该线程只读第一行和应该读的最后一行
int[] myRows = {0,rsRows-1}; print("线程数=========== :"+${__threadNum});
for (int i = 0; i < myRows.length; i++) //行
{
for (int j = 0; j < rsColumns; j++) //列
{
cell = readsheet.getCell(j, myRows[i]);
//list存第一行名字
if(myRows[i] == 0){
list.add(cell.getContents());
continue;
}
//put变量只存最后一行的值
vars.put(list.get(j),cell.getContents());
print(vars.get(list.get(j)));
} }
其实以上两种都不影响最后需要的结果,只是影响效率
在接口调用时直接 ${"表头"}
最新文章
- 初谈SQL Server逻辑读、物理读、预读
- Java中货币格式化
- Opera浏览器导出收藏到Chrome,和几个Chrome的一些小技巧
- STM8 EEPROM:
- 根据网址把图片下载到服务器C#代码
- 移除首页->;重回首页
- 【洛谷 p3382】模板-三分法(算法效率)
- 面试题_103_to_124_关于 OOP 和设计模式的面试题
- iOS开发之git学习
- 基于visual Studio2013解决C语言竞赛题之1045打印成绩
- CentOS 7 时区设置
- Android4.4KitKat支持u盘功能
- 常见浏览器的宽高代码写法!有原生JavaScript和jquery两种写法-------------------------------以及我的个人网站
- 用 Docker Machine 创建 Azure 虚拟主机
- [js高手之路]原型对象(prototype)与原型链相关属性与方法详解
- OpenStack Ocata 超详细搭建文档
- Spring框架(二)
- Sorting Slides(二分图匹配——确定唯一匹配边)
- SSDT Hook实现内核级的进程保护
- 深度学习-Windows平台下的Caffe编译教程
热门文章
- Last Day in Autodesk
- 解决VS2015单元测试“未能设置用于运行测试的执行上下文”问题
- 淘宝开放平台使用WebClient,WebRequest访问时的错误提示导致麻烦
- django CharField按整形排序
- scrapy入门:安装scrapy
- spyder 快捷键
- .net的mvc的fw版本为4.5发布到阿里云【云虚拟主机】上.
- Javascript_06_表单验证(离开单项,输入框后提示信息)
- 【PAT】 B1006 换个格式输出整数
- Teradata 终止回滚方法(rcvmanager工具)