Java自动化测试(回写与断言 17)
时间:2022-07-23
本文章向大家介绍Java自动化测试(回写与断言 17),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
回写
将测试结果写回到Excel中
定义回写数据对象
package com.zhongxin.pojo;
public class WriteBackData {
private int sheetIndex;
private int rowNum;
private int cellNum;
private String content;
public WriteBackData(int sheetIndex, int rowNum, int cellNum, String content) {
this.sheetIndex = sheetIndex;
this.rowNum = rowNum;
this.cellNum = cellNum;
this.content = content;
}
public WriteBackData() {
}
@Override
public String toString() {
return "WriteBackData{" +
"sheetIndex=" + sheetIndex +
", rowNum=" + rowNum +
", cellNum=" + cellNum +
", content='" + content + ''' +
'}';
}
public int getSheetIndex() {
return sheetIndex;
}
public void setSheetIndex(int sheetIndex) {
this.sheetIndex = sheetIndex;
}
public int getRowNum() {
return rowNum;
}
public void setRowNum(int rowNum) {
this.rowNum = rowNum;
}
public int getCellNum() {
return cellNum;
}
public void setCellNum(int cellNum) {
this.cellNum = cellNum;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
批量回写操作代码
使用到类似之前Excel到写入操作代码:
public static void batchWrite() throws Exception {
//回写的逻辑:遍历wdbList集合,取出sheetIndex,rowNum,cellNum,content
FileInputStream fis = new FileInputStream("src/test/resources/cases_v3.xlsx");
Workbook sheets = WorkbookFactory.create(fis);
for (WriteBackData wdb : wdbList) {
int sheetIndex = wdb.getSheetIndex();
int rowNum = wdb.getRowNum();
int cellNum = wdb.getCellNum();
String content = wdb.getContent();
Sheet sheet = sheets.getSheetAt(sheetIndex);
Row row = sheet.getRow(rowNum);
Cell cell = row.getCell(cellNum, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
cell.setCellValue(content);
}
FileOutputStream fos = new FileOutputStream("src/test/resources/cases_v3.xlsx");
sheets.write(fos);
fis.close();
fos.close();
}
com.zhongxin.utils.ExcelUtils
中需要增加一个wdbList
,用于存储运行测试时候每次产生的结果
public static List<WriteBackData> wdbList = new ArrayList<>();
case中新增写入测试结果
每个case执行的最后阶段增加
WriteBackData wdb = new WriteBackData(sheetIndex, caseInfo.getId(), 8, responseBody);
ExcelUtils.wdbList.add(wdb);
全部测试完成后批量写入结果
使用注解AfterSuite
在全部测试结束后将结果写入Excel
@AfterSuite
public void finish() throws Exception {
ExcelUtils.batchWrite();
}
提取父类
将共性代码放到父类BaseCase
中
package com.zhongxin.cases;
import com.zhongxin.pojo.WriteBackData;
import com.zhongxin.utils.ExcelUtils;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Parameters;
public class BaseCase {
public int sheetIndex;
@BeforeClass
@Parameters({"sheetIndex"})
public void beforeClass(int sheetIndex) {
this.sheetIndex = sheetIndex;
}
/**
* 添加回写对象到回写集合中
*/
public void addWriteBackData(int sheetIndex, int rowNum, int cellNum, String content) {
WriteBackData wdb = new WriteBackData(sheetIndex, rowNum, cellNum, content);
ExcelUtils.wdbList.add(wdb);
}
@AfterSuite
public void finish() throws Exception {
ExcelUtils.batchWrite();
}
}
提取responseBody参数到UserData中的封装
/**
* 从responseBody 通过Jsonpath取出对应参数,存到UserData中
*/
public void getParams(String responseBody, String jsonPathExpression, String userDataKey) {
Object token = JSONPath.read(responseBody, jsonPathExpression);
if (token != null) {
UserData.VARS.put(userDataKey, token);
}
}
提取返回鉴权头
public HashMap<String, String> getAuthorizationHeader() {
Object token = UserData.VARS.get("${token}");
HashMap<String, String> headers = new HashMap<>();
headers.put("Authorization", "Bearer " + token);
headers.putAll(UserData.DEFAULT_HEADERS);
return headers;
}
断言
/**
* 接口响应断言
* @param expectedResult 断言的期望值
* @param responseBody 接口响应内容
* @return 接口响应断言结果
*/
public boolean responseAssert(String expectedResult, String responseBody) {
Map<String, Object> map = JSONObject.parseObject(expectedResult, Map.class);
Set<String> keySet = map.keySet();
boolean reponseAssertFlag = true;
for (String actualExpression : keySet) {
Object expectedValue = map.get(actualExpression);
Object actualValue = JSONPath.read(responseBody, actualExpression);
if (!expectedValue.equals(actualValue)) {
reponseAssertFlag = false;
break;
}
}
System.out.println("断言结果:" + reponseAssertFlag);
return reponseAssertFlag;
}
- 揭开ps的神秘面纱——初步认识photoshop
- 地理坐标系与投影坐标系的区别
- ExtJs学习笔记(6)_可分页的GridPanel
- PowerDesinger联系的定义及使用
- Gis链接
- TortoiseSVN文件夹及文件图标不显示解决方法 TortoiseSVN文件夹及文件图标不显示解决方法
- 地图坐标
- PowerDesigner15连接Oracle失败的解决办法
- 地图校正方法心得
- 工作流参考模型点评
- 按图索骥:SQL中数据倾斜问题的处理思路与方法
- [方法“Boolean Contains(System.Guid)”不支持转换为 SQL]的解决办法
- DataBind的一些试验
- 继承HibernateDaoSupport时遇到的问题 使用注解为HibernateDaoSupport注入sessionFa
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Vue&uni-app在微信浏览器隐藏titleNView的一个方法
- 使用OData服务将SAP C4C自定义BO的TextCollection暴露给外部消费者
- 如何在SAP C4C AdvancedListPane上批量执行若干BO实例的action
- SAP ABAP Webdynpro ALV的link to action的实现方法
- SAP CRM和C4C表格列宽度调整的工作原理
- SAP C4C里如何创建两个具有依赖关系的下拉菜单
- 温故知新——Spring AOP
- tf.random_shuffle 函数
- IndexError: dimension specified as 0 but tensor has no dimensions
- 死磕YOLO系列,YOLOv2的自我修养
- three.js 几何体(二)
- three.js 几何体(三)
- three.js 几何体-组合网格
- three.js 曲线
- three.js 着色器材质之变量(一)