问题一:没有时间搞自动化测试?
下面将从敏捷项目迭代特点和自动化测试时间规划这两个方面,介绍我们是如何确认自动化测试目标、安排自动化测试时间的。
1>分析敏捷项目迭代特点,确认自动化测试目标
下图展示了在敏捷开发模式中,随着项目迭代进行,新功能特性与已有功能特性的数量变化。每个迭代新特性的测试工作量变化不大,但是已有特性的回归测试任务量却是累计增加的。
因此我们自动化接口测试的目标是针对已有特性做自动化回归测试,提升回归测试效率。而对当前迭代的新特性以手工测试为主jmeter事务控制器,自动化测试为辅。
针对上一个迭代已有特性,采用自动化回归测试。原因分析:
2>为自动化测试腾出时间
方法:
问题二:为什么要用做自动化接口测试?
用做接口测试工具有以下优势:
问题三:多人协同测试,自动化脚本结构如何设计?
元件组合是非常灵活的,为了提升用例维护效率、方便多人协作,我们参考相关资料及项目实践经验,总结了如下图脚本结构:
以下为主要脚本结构及对应元件说明:
全局参数配置:
当前脚本通用模块库:存放所有测试相关采样器,由用例模块通过模块控制器调用
历史组件/模块设计参考
接口测试模板
用例模块:存放接口测试用例,通过模块控制器调用当前脚本通用模块库
测试结果展示
问题四:复杂场景如何设计用例?
复杂场景用例设计之前,先分享下从功能角度出发jmeter事务控制器,我们是如何设计用例的。如下图所示:
除此之外,结合项目实际情况,还需要考虑其他非功能场景:
下面以实际项目中的两个场景为例,来分享我们是如何应对复杂测试场景的。
1、多接口实例:流水线执行场景测试,涉及6个接口
方法:
用例执行
后置处理
步骤2、测试数据梳理:
运行时动态生成的数据,包含:
步骤3、梳理测试用例,编写相关脚本,脚本图示如下:
2、异步实例:流水线配置定时任务后,验证定时任务是否按照配置时间成功触发
难点分析:流水线配置定时任务不会立即执行,定时任务触发需要等待推送消息
方法:
Calendar calendar = Calendar.getInstance();//获取当前时间
calendar.set(Calendar.MINUTE,calendar.get(Calendar.MINUTE)+1);
问题五:接口测试用例如何断言?
对于接口的正确性验证,只验证被测接口返回body很明显是不够的,这里总结了如下断言方法:
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
//获取接口返回body--实际结果
String json_response = prev.getResponseDataAsString();
ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = mapper.readTree(json_response);
JsonNode dataNode = rootNode.path("data");
JsonNode totalNode = dataNode.path("total");
String actual = totalNode.toString();
//接口返回的总条数--期望结果
String except = vars.getObject("program_source_data").size().toString();
if(actual.toString().equals(except)){
Failure = false;
}else{
Failure = true;
FailureMessage = "期待数量:"+except+" VS 实际数量:"+actual+"不一致";
}
// JDBC Request 采样器 获取返回结果 -> triggers_count
SELECT
count(*)
FROM
qrtz_triggers a
WHERE
a.JOB_NAME LIKE '%${search_key}%' ORDER BY JOB_NAME desc;
// BeanShell断言
String except = vars.get("except_count");//期望结果
String actual = vars.get("triggers_count_1");//数据库查询到的总条数
if(actual.equals(except)){
Failure = false;
}else{
Failure = true;
FailureMessage = "期待数量:"+except+" VS 实际数量:"+actual+"不一致";
}
问题六:+ant+如何改进?
+ant+是一种常用的流水线集成方法,但在集成过程中存在环境配置繁琐的问题,比如:
针对以上问题,我们采用的替代方案是 -maven- + mvnw ,运行环境只需要安装jdk就可以了,将maven、版本以及第三方jar包管理,都托管到一个代码库中进行集中管理。
进行接口测试只需要git clone代码,然后执行 mvnw clean 就可以触发测试执行。代码库配置如下图:
工具依赖
工具
简介
备注
开源性能测试、接口测试工具。
支持脚本录制、多平台部署、集成等,提供丰富的组件及第三方插件库。
-maven-:3.4.0
开源Maven插件,可以在项目中运行,可以指定版本/库;选择测试文件(指定一个/多个/正则匹配jmx文件);生成报告;支持修改属性;使用其他扩展库等。
Maven >= 3.5.2
JDK 8~11
:0.8.7
开源Java覆盖率统计工具。可以嵌入到Ant、Maven、中;可以作为IDE插件;也可以使用技术监控Java程序等。
使用其、CLI,统计接口测试覆盖率。
Java库文件,可以为测试创建美观、详细的测试报告。
支持自定义添加事件、屏幕截图、标签等。
CLI运行方式产生的测试报告统计信息偏向性能指标,无法满足接口测试需求。
因此使用-java提供的api,解析测试结果jtl文件,生成测试报告。
TDS平台
被测系统,泰康云自测软件,使用流水线模板实现集成。
编写。
问题七:如何度量接口自动化结果?
1、原生报告优化
CLI运行方式产生的测试报告统计信息偏向性能指标,无法满足接口测试需求。因此使用dom4j解析生成的xml结果文件,使用生成html报告,报告示例如下:
2、使用统计接口测试代码级覆盖率报告
接口测试用例成功率即使达到100%,仍然会存在漏测。因此使用来统计代码覆盖率,分析接口测试未覆盖的代码,进行测试用例补充完善。
关键步骤说明:
步骤2:调用脚本执行测试
步骤3:dump覆盖率报告
步骤4:生成覆盖率报告
报告展示如下图 :
问题八:如何提升用例执行稳定性和效率?
当测试case数量持续增加时,需要考虑执行稳定性和效率。
总结如下:
隔离
配置优化
防御式编程
不足之处,欢迎指正。