zoukankan      html  css  js  c++  java
  • Jmeter(三十一)_数据驱动,业务关联

    这种数据驱动的本质是:将测试的case,参数,url,预期结果,存储于本地excel中。运行脚本时,从文件中获取预期结果,将实际结果与预期结果比较,将实际结果,比较结果,响应状态码回写excel。

    一:主干业务处理

    1:需要的jar包

    Apache POI 3.17 

    Apache POI-OOXML 3.17 

    Apache Commons IO 2.6 

    OOXML模式1.3 

    commons-collections4-4.1 

    xmlbeans-2.6.0 

    2:将这些jar包放到jmeter的lib目录下,记得要在jmeter关闭的情况下放置!然后重启jmeter 。

    添加jar包后,在本地jmeter目录下创建用例文件,如下所示

     

    • Case - 用例名称
    • parameter- 参数值,用于生成对API的请求
    • request - 在此列中,JMeter将向API写入接口路径
    • Method - 在此列中,JMeter将写入请求方法
    • ActualResult - 实际结果是我们接口实际返回的结果。将与预期值进行比较
    • ExpectedResult 预期结果是我们期望从API获得的结果,手动写入
    • ResponseCode 响应码是我们接口返回的响应状态
    • Status Jmeter将实际值与预期值进行比较,得出断言结论

    2:添加一个线程组

    3:添加一个用户变量 

    在测试计划中创建一个名为“pathToFile”的变量”。这个变量的值是我们上面创建的Excel文件的路径(注意双反斜杠

     

    4. 添加一个JSR223采样器,目的是根据excel文件创建一个Workbook对象 

     

    代码如下:

     

    import org.apache.poi.xssf.usermodel.XSSFWorkbook; 
    import org.apache.poi.xssf.usermodel.XSSFSheet; 
    import org.apache.poi.xssf.usermodel.XSSFRow; 
    import java.io.*; 
    XSSFWorkbook book ="";
    try{
        
    InputStream inputStream = new FileInputStream(new File("${pathToFile}"));
    book = new XSSFWorkbook(inputStream); 
    inputStream.close(); 
    
    } catch(Exception e){
    log.info("!!!!!!!!"+ e.getMessage()+"!!!!!!!!!!!!!!!");
    
    }
    
    if(!book.equals("")){
    
    vars.putObject("book",book); 
    } else {
    
    SampleResult.setStopTestNow(true); 
    }

    5:添加一个While控制器 

    While控制器用于Excel文件包含输入数据的行数,作为发送请求的次数

     

    在While Controller中,添加以下代码,用于停止While Controller

    ${__javaScript("${stopWhile}"!="OK")}

    6:While控制器下添加一个计数器,用于循环计数 

     

    7:While控制器下添加一个JSR223采样器 

    这一步我们从excel中获取字符串,并将这些值存储在变量中

     

    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import java.io.*;
    
    int i = Integer.parseInt(vars.get("counter"));
    
    XSSFRow row = vars.getObject("book").getSheetAt(0).getRow(i);
    
    vars.putObject("row",row);    
    
        for (int j = 1; j <= vars.getObject("book").getSheetAt(0).getRow(0).getLastCellNum(); j++) {
            
            if (row.getCell(j) == null) {
                row.createCell(j).setCellValue("");
            }
        }    
    
        String parameter = row.getCell(1).toString();
        vars.put("parameter",parameter);
    
        String request = row.getCell(2).toString();
        vars.put("request",request);
    
        String Method = row.getCell(3).toString();
        vars.put("Method",Method);
    
        String expectedResult = row.getCell(5).toString();
        vars.put("expectedResult",expectedResult);
    
        String Case = row.getCell(0).toString();
        vars.put("Case",Case);
    
    
        

    8:While控制器添加一个if控制器 ,用于判断excel中的方法,决定接口分支

     

    9:IF控制器下添加http请求 ,该请求在控制器下循环读取用例(接口路径和参数)

     

    10:http请求下循环提取响应信息 ,用于和预期值进行比较

     

    11:http请求下添加一个BeanShell断言 ,用于比较实际结果和预期结果,并在Excel中记录响应实际值,响应状态和用例通过状态

     

    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    import java.io.IOException;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    
    //String responseToApi  = SampleResult.getUrlAsString(); 
    String requestCode = SampleResult.getResponseCode(); 
    String responseFromApi = ("${responseMessage}");
    String status = null;
    
    if (vars.get("expectedResult").equals(responseFromApi)) {    
        status = "Passed";    
    } else {
        status = "Failed";
    }
    
    //vars.getObject("row").createCell(3).setCellValue(responseToApi);
    vars.getObject("row").createCell(4).setCellValue(responseFromApi);
    vars.getObject("row").createCell(7).setCellValue(status);
    vars.getObject("row").createCell(6).setCellValue(ResponseCode);
    //vars.getObject("row").createCell(0).setCellValue("${__samplerName()}");
    
    String stopWhile = null;
    int i = Integer.parseInt(vars.get("counter"));
    
    if (i >= vars.getObject("book").getSheetAt(0).getLastRowNum()) {
        stopWhile = "OK";
        vars.put("stopWhile",stopWhile);
    }

    12:添加JSR223采样器 ,用于回写运行结果到excel中

    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import java.io.*;

    try {

    FileOutputStream out = new FileOutputStream(new File("${pathToFile}"));
    vars.getObject("book").write(out);
    vars.getObject("book").close();

    } catch (Exception e) {

    log.info("!!!!!!!!" + e.getMessage() + "!!!!!!!!!!!!!!!");
    }

     

    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import java.io.*;
    
    try {
        
        FileOutputStream out = new FileOutputStream(new File("${pathToFile}"));
        vars.getObject("book").write(out);
        vars.getObject("book").close();
    
    } catch (Exception e) {
    
         log.info("!!!!!!!!" + e.getMessage() + "!!!!!!!!!!!!!!!");
    }

    注:

    1:以上所有主干业务写入excel中的sheet1!

     

     

    2:从主干业务中返回主数据id和session,并保存为全局变量供支线业务调用

     

     

     

    二:分支业务处理

    1:在excel中创建新的sheet,作为分支流程的数据

     

    2:创建一个新的线程组,写入分支业务流,修改sheet值

     

     

    3:sampler中调用全局变量的主数据id,与主业务流进行关联

     

    以上配置完成之后,执行脚本。数据会写入两个sheet文件,分别回写用例执行结果

  • 相关阅读:
    vb 退出窗口提示
    游戏开发 简介
    gridview 缓存 优化
    Android中Bitmap和Drawable
    解析网络 xml 流程
    vb 检测是否突然断网
    进度条
    网站广告
    android 五大布局
    VB 读写文件
  • 原文地址:https://www.cnblogs.com/Zfc-Cjk/p/9116691.html
Copyright © 2011-2022 走看看