zoukankan      html  css  js  c++  java
  • Jmeter读取Excel,BeanShell取样器调用rt.jar和jxl.jar

    将rt.jar和jxl.jar,放在apache-jmeter-5.0libext下面
    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)));                                                                        
                    }
                    
                }

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

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

  • 相关阅读:
    How to import data from Oracle into PostgreSQL(转)
    C++——算法 回溯 八皇后问题
    Python——彩图变线稿
    算法——二叉树的遍历 前序 中序 后序 广度优先 深度优先 (转)
    C++——计数排序 (转)
    C++——位运算相关 (转)
    C++——std::vector相关 (转)
    C++——双指针 (转)
    C++——求三数之和,实操从低效做法逐步提升到高效做法,受益良多
    C++——基础容器
  • 原文地址:https://www.cnblogs.com/shuzf/p/9907811.html
Copyright © 2011-2022 走看看