Jmeter读取Excel,BeanShell取样器调用rt.jar和jxl.jar 您所在的位置:网站首页 java读取excel中的图片 Jmeter读取Excel,BeanShell取样器调用rt.jar和jxl.jar

Jmeter读取Excel,BeanShell取样器调用rt.jar和jxl.jar

2023-03-14 22:22| 来源: 网络整理| 查看: 265

将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))); } }

其实以上两种都不影响最后需要的结果,只是影响效率

在接口调用时直接 ${"表头"}



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有