在JMeter中实现数据驱动测试

栏目: 编程工具 · 发布时间: 6年前

内容简介:Data Driven Testing (DDT)即数据驱动测试,是一种用于创建自动化测试的方法,或者换句话说,是一种架构。这种方法的本质是,测试输入的数据和用这些数据获得的结果,与测试本身分开存储。存储输入数据和结果的是Excel文件。写入Excel文件的结果是我们成功通过测试的预期结果。DDT的一个优点是测试人员不必为每一个输入数据创建一个单独的测试。测试在一个实例中创建,并且输入数据和用于与实际结果进行比较的预期结果从文件中获取。为了使用DDT创建一个测试,假设我们有一个接受用户的LOGIN和PASS
编辑推荐:

本文来自于简书,本文章主要详细介绍了如何通过存储输入数据和结果的是Excel文件,在JMeter中实现数据驱动测试,希望对您的学习有帮助。

Data Driven Testing (DDT)即数据驱动测试,是一种用于创建自动化测试的方法,或者换句话说,是一种架构。这种方法的本质是,测试输入的数据和用这些数据获得的结果,与测试本身分开存储。存储输入数据和结果的是Excel文件。写入Excel文件的结果是我们成功通过测试的预期结果。

DDT的一个优点是测试人员不必为每一个输入数据创建一个单独的测试。测试在一个实例中创建,并且输入数据和用于与实际结果进行比较的预期结果从文件中获取。

为了使用DDT创建一个测试,假设我们有一个接受用户的LOGIN和PASSWORD作为传入值的API。

对于API,存在以下要求:用户登录名只能包含英文字符。否则,请在API响应中返回以下错误消息:“用户登录输入错误”。

一、下载jar包

在Jmeter中创建测试之前,我们首先需要下载如下jar包,并将其拷贝到jmeter的lib目录中:

1.Apache POI 3.17

2.Apache POI-OOXML 3.17

3.Apache Commons IO 2.6

4.OOXML Schemas 1.3

5.Apache Commons Collections 4.1

6.XmlBeans 2.6

二、创建一个如下图所示的Excel文件:

在JMeter中实现数据驱动测试

在这个文件中,从第二行开始的每一行都是我们的测试用例。 填写以下字段:

1.测试用例描述 - 手动填写

2.登录 - “登录”参数的值,用于形成对API的请求

3.密码 - “密码”参数的值,用于生成对API的请求

4.请求 - 在此列中,JMeter将向API写入请求

5.实际结果 - 在此列中,JMeter将写入API的响应

6.预期结果是我们期望从API获得的结果。 手动填写

7.状态 - 在此列中,JMeter将记录测试用例通过或未通过的状态

基于上述Excel文件,我们将执行7个测试用例。 对于每个测试用例,我们都希望API有以下响应:“{" message ":" User login is not entered correctly "}”,因为根据我们的要求,登录不能包含英文字符。

创建的Excel文件可以保存在任何目录中。

三、Jmeter配置

1.Right Click -> Add -> Threads(Users) -> Thread Group

2.Thread Group -> Right Click -> Add -> Config Element -> User Defined Variables

创建一个名为“pathToFile”的变量,变量的值为我们上面存储Excel文件的路径:

在JMeter中实现数据驱动测试

3.根据excel文件创建一个Workbook对象

Thread Group -> Right Click -> Add -> Sampler ->JSR223 Sampler

在JMeter中实现数据驱动测试

添加如下代码示例:

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

}

4.添加一个While Controller

While Controller将用于向API发送请求的次数与我们的Excel文件包含的传入数据的行数相同。 在我们的用例中,是七次。

Thread Group -> Right Click -> Add -> Logic Controller -> While Controller*

添加如下代码:

${__javaScript("${stopWhile}" != "OK")} #此代码用于停止While Controller

在JMeter中实现数据驱动测试

5.添加一个Counter

While Controller -> Add -> Config Element -> Counter

在JMeter中实现数据驱动测试

1.Start = “1” is the initial value that is assigned to the variable "counter" before sending the first request to the API.

2.Increment = “1” is the value that is added to the value of the variable "counter" before sending the second request to the API.

3.Reference Name = "counter" is the name of the variable

6.While Controller -> Right Click -> Add -> Sampler -> JSR223 Sampler

在JMeter中实现数据驱动测试

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

添加如下代码:

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 login = row.getCell(1).toString();

vars.put("login",login);

String password = row.getCell(2).toString();

vars.put("password",password);

String expectedResult = row.getCell(5).toString();

vars.put("expectedResult",expectedResult);

7.While Controller -> Add -> Sampler ->jp@gc-Dummy Sampler

此步骤的目的是模拟测试的服务。

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

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

在JMeter中实现数据驱动测试

8.Dummy Sampler -> Right Click -> Add -> Assertions -> BeanShell Assertion

此步骤比较API的实际响应和预期响应,并在工作簿对象中记录请求,响应和状态。

添加如下代码:

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 requestToApi = SampleResult.getSamplerData();

String responseFromApi = SampleResult.getResponseDataAsString();

String status = null;

if (vars.get("expectedResult").equals(responseFromApi)) {

status = "Passed";

} else {

status = "Failed";

}

vars.getObject("row").createCell(3).setCellValue(requestToApi);

vars.getObject("row").createCell(4).setCellValue(responseFromApi);

vars.getObject("row").createCell(6).setCellValue(status);

String stopWhile = null;

int i = Integer.parseInt(vars.get("counter"));

if (i >= vars.getObject("book").getSheetAt(0).getLastRowNum()) {

stopWhile = "OK";

vars.put("stopWhile",stopWhile);

}

在JMeter中实现数据驱动测试

9.Thread Group -> Right Click -> Add -> Sampler ->JSR223 Sampler

此步骤将结果复制到实际的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() + "!!!!!!!!!!!!!!!");

}

在JMeter中实现数据驱动测试

以上就是全部的jmeter配置,整体的目录结构如下图所示:

在JMeter中实现数据驱动测试

运行测试,将所有测试用例结果写入Excel文件后,您的文件将如下所示:

在JMeter中实现数据驱动测试


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

认知盈余

认知盈余

[美] 克莱·舍基 / 胡泳、哈丽丝 / 中国人民大学出版社 / 2011-12 / 49.80元

“互联网革命最伟大的思考者”克莱•舍基 继《未来是湿的》之后最新力作 看自由时间如何变革世界的未来 如果说《未来是湿的》揭示的是“无组织的组织力量”, 那么《认知盈余》揭示的就是 “无组织的时间力量”。 腾讯董事会主席兼首席执行官马化腾首度亲笔作序倾情推荐 克莱•舍基说,美国人一年花在看电视上的时间大约2 000亿个小时,而这几乎是2 000个维基百科项目一年所需要的......一起来看看 《认知盈余》 这本书的介绍吧!

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具