在JMeter中实现数据驱动测试

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

内容简介: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中实现数据驱动测试


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

查看所有标签

猜你喜欢:

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

XForms Essentials

XForms Essentials

Micah Dubinko / O'Reilly Media, Inc. / 2003-08-27 / USD 29.95

The use of forms on the Web is so commonplace that most user interactions involve some type of form. XForms - a combination of XML and forms - offers a powerful alternative to HTML-based forms. By pro......一起来看看 《XForms Essentials》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具