在JMeter中实现数据驱动测试
上一篇 / 下一篇 2019-01-28 09:56:56 / 个人分类:软件测试
Data Driven Testing (DDT)即数据驱动测试,是一种用于创建自动化测试的方法,或者换句话说,是一种架构。这种方法的本质是,测试输入的数据和用这些数据获得的结果,与测试本身分开存储。存储输入数据和结果的是Excel文件。写入Excel文件的结果是我们成功通过测试的预期结果。
DDT的一个优点是测试人员不必为每一个输入数据创建一个单独的测试。测试在一个实例中创建,并且输入数据和用于与实际结果进行比较的预期结果从文件中获取。
为了使用DDT创建一个测试,假设我们有一个接受用户的LOGIN和PASSWORD作为传入值的API。
对于API,存在以下要求:用户登录名只能包含英文字符。否则,请在API响应中返回以下错误消息:“用户登录输入错误”。
一、下载jar包
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文件:
1.测试用例描述 - 手动填写
2.登录 - “登录”参数的值,用于形成对API的请求
3.密码 - “密码”参数的值,用于生成对API的请求
4.请求 - 在此列中,JMeter将向API写入请求
5.实际结果 - 在此列中,JMeter将写入API的响应
6.预期结果是我们期望从API获得的结果。 手动填写
基于上述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文件的路径:
3.根据excel文件创建一个Workbook对象
Thread Group -> Right Click -> Add -> Sampler ->JSR223 Sampler
添加如下代码示例:
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFRow; 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 |
5.添加一个Counter
While Controller -> Add -> Config Element -> Counter
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
在这一步中,我们从对象,单元格值的行中获取字符串,并将这些值存储在变量中。
添加如下代码:
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"} |
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); } |
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 ut = new FileOutputStream(new File("${pathToFile}")); vars.getObject("book").write(out); vars.getObject("book").close(); > } catch (Exception e) { log.info("!!!!!!!!" + e.getMessage() + "!!!!!!!!!!!!!!!"); } 以上就是全部的jmeter配置,整体的目录结构如下图所示: |
以上就是全部的jmeter配置,整体的目录结构如下图所示:
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8052),我们将立即处理。
TAG: