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

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

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

  • 相关阅读:
    Spring自动装配Bean
    Spring中Bean的作用域和生命周期
    Spring实例化Bean的三种方法
    Spring AOP详解
    Mybatis=====注解
    GBK和UTF-8文字编码的区别
    This Android SDK requires Android Developer Toolkit version 23.0.0 or above.
    问题:Unable to find a 'userdata.img' file for ABI armeabi to copy into the AVD folder.
    Ubuntu 系统下可以做什么?
    C语言结构体数组内带字符数组初始化和赋值
  • 原文地址:https://www.cnblogs.com/shuzf/p/9907811.html
Copyright © 2011-2022 走看看