Jmeter(三十一)_dummysampler模拟数据驱动


之前写过一篇数据驱动的文章 数据驱动测试,但是内容过于简单,有些关键的地方没有写明白。这两天参照了一下官方文档,重新整理了一篇数据驱动测试!

这种方法的本质是:测试的参数与预期结果,存储于本地excel中。运行脚本时,从文件中获取预期结果,最后将输入值和实际结果写入Excel。

1:创建测试之前,我们需要安装几个jar包(需要jar包的加群获取:317765580)

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

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

添加jar包后,在本地jmeter目录下创建一个excel文件,如下所示:

  • 测试用例描述- 手动填写
  • 登录- “登录”参数的值,用于形成对API的请求
  • 密码- “密码”参数的值,用于生成对API的请求
  • 请求- 在此列中,JMeter将向API写入请求
  • 实际结果- 在此列中,JMeter将写入API的响应
  • 预期结果是我们期望从API获得的结果。手动填写
  • 状态- 在此列中,JMeter将记录测试用例通过或未通过的状态

基于Excel文件,我们将执行5个测试用例。对于每个测试用例,我们预期响应都是:“{”message“:”用户登录未正确输入“}”

2:添加一个线程组

3:添加一个用户变量

线程组 - >右键单击 - >添加 - >配置元素 - >用户定义的变量

在用户定义的变量 中创建一个名为“pathToFile”的变量 其值为“D:\gongju\apache-jmeter-3.2\bin\file\demo.xlsx”。这个变量的值是我们上面创建的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. *; 从我们添加到JMeter的Jar文件中导入所必需的类

XSSFWorkbook book =""; 用数据类型XSSFWorkbook创建一个参考变量“book”。该变量将引用包含Excel文件中所有行的对象。

try{}catch{}

一个旨在处理异常的块。在代码执行过程中可能会出现一个不可预见的情况。在我们的情况下,如果我们创建的Excel文件不存在了,就可能会出现无法预料的情况。可能发生异常的代码放置在“try”块中。处理异常并通知用户这种情况的代码放置在“catch”块中

InputStream inputStream = new FileInputStream(new File("${pathToFile}"));

访问指定路径上Excel文件。文件的路径是变量"${pathToFile}",我们在用户定义的变量中创建过

InputStream inputStream = new FileInputStream()读取Excel文件中的所有行

book = new XSSFWorkbook(inputStream); 创建一个XSSFWorkbook对象,该对象将包含Excel文件中的所有行

inputStream.close();- 停止从文件读取

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

log.info()将消息输出到JMeter控制台

e.getMessage()接收异常消息

if(!book.equals("")){

vars.putObject("book",book); } else {

SampleResult.setStopTestNow(true); }

!book.equals("")- 检查“book”变量是否未引用空对象,如果发生异常,可以创建一个空对象,并且不会接收来自Excel文件的行。

如果没有读取到Excel文件的行,则会执行代码SampleResult.setStopTestNow(true)

5.添加一个While控制器

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

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

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

6:添加一个计数器,设置如下参数

7.添加一个JSR223采样器

这一步中,我们从对象,单元格值的行中获取字符串,并将这些值存储在变量中

for(int j = 1; j <= vars.getObject(“book”)。getSheetAt(0).getRow(0).getLastCellNum(); j ++){ if(row.getCell(j)== null){ row .createCell(J).setCellValue(“”); } }

for(int j = 1; j <= vars.getObject(“book”)。getSheetAt(0).getRow(0).getLastCellNum(); j ++)- 获取每个单元格。

if(row.getCell(j)== null){

row.createCell(j).setCellValue("");

}- 如果单元格不存在,我们创建一个单元格并将其设置为空值。

String login = row.getCell(1).toString();- 获取行中第一个单元格的值并指定变量login的值。在我们的例子中,对第一个请求,变量“login”的值为1

vars.put(“login”,login);

String password = row.getCell(2).toString();- 获取行中第二个单元格的值并指定密码。在我们的例子中,对第一个请求,变量“password”的值为= 22

vars.put(“password”,password);

String expectedResult = row.getCell(5).toString();- 获取行中第五个单元格的值并分配“expectedResult”变量的值。

vars.put(“expectedResult”,expectedResult);

8:添加虚拟采样器,用于模拟一个post请求

{"login":"${login}","password":"${password}"}

{"message":"User login is not entered correctly"}

{"login":"${login}","password":"${password}"}

{"message":"User login is not entered correctly"}

9.添加一个BeanShell声明

用于比较实际结果和预期结果,并在Excel中记录请求,响应和状态

10.添加一个JSR223采样器,用于将结果保存到本地的excel文件中

执行以下操作:

将每个请求的结果写入我们创建的“book”对象,而不是写入实际的Excel文件。直到在发送最后一次请求后,将所有结果都将写入Excel文件

可以看到所有的结果都写入了本地的文件,预期值写入与实际值一致,结果为pass!

看一下结构图!

优质内容筛选与推荐>>
1、SSAS表格模型安全性
2、Sublime Text2格式化HMTL/CSS/JS插件HTML-CSS-JS Prettify
3、java笔记 chapter3 包装类,类型转换,程序的运行流程,面向对象的三大特征
4、【laravel5.4】php artisan migrate报错:Specified key was too long; max key length is 767 bytes
5、14.序列化


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号