问题一:没有时间搞自动化测试?

下面将从敏捷项目迭代特点和自动化测试时间规划这两个方面,介绍我们是如何确认自动化测试目标、安排自动化测试时间的。

1>分析敏捷项目迭代特点,确认自动化测试目标

下图展示了在敏捷开发模式中,随着项目迭代进行,新功能特性与已有功能特性的数量变化。每个迭代新特性的测试工作量变化不大,但是已有特性的回归测试任务量却是累计增加的。

jmeter事务控制器_jmeter监控服务器性能_jmeter服务器性能监控

因此我们自动化接口测试的目标是针对已有特性做自动化回归测试,提升回归测试效率。而对当前迭代的新特性以手工测试为主jmeter事务控制器,自动化测试为辅。

针对上一个迭代已有特性,采用自动化回归测试。原因分析:

2>为自动化测试腾出时间

方法:

问题二:为什么要用做自动化接口测试?

用做接口测试工具有以下优势:

问题三:多人协同测试,自动化脚本结构如何设计?

元件组合是非常灵活的,为了提升用例维护效率、方便多人协作,我们参考相关资料及项目实践经验,总结了如下图脚本结构:

jmeter事务控制器_jmeter服务器性能监控_jmeter监控服务器性能

以下为主要脚本结构及对应元件说明:

全局参数配置:

当前脚本通用模块库:存放所有测试相关采样器,由用例模块通过模块控制器调用

历史组件/模块设计参考

接口测试模板

用例模块:存放接口测试用例,通过模块控制器调用当前脚本通用模块库

测试结果展示

问题四:复杂场景如何设计用例?

复杂场景用例设计之前,先分享下从功能角度出发jmeter事务控制器,我们是如何设计用例的。如下图所示:

jmeter事务控制器_jmeter服务器性能监控_jmeter监控服务器性能

除此之外,结合项目实际情况,还需要考虑其他非功能场景:

下面以实际项目中的两个场景为例,来分享我们是如何应对复杂测试场景的。

1、多接口实例:流水线执行场景测试,涉及6个接口

方法:

用例执行

后置处理

步骤2、测试数据梳理:

运行时动态生成的数据,包含:

步骤3、梳理测试用例,编写相关脚本,脚本图示如下:

jmeter服务器性能监控_jmeter事务控制器_jmeter监控服务器性能

2、异步实例:流水线配置定时任务后,验证定时任务是否按照配置时间成功触发

难点分析:流水线配置定时任务不会立即执行,定时任务触发需要等待推送消息

方法:

Calendar calendar = Calendar.getInstance();//获取当前时间calendar.set(Calendar.MINUTE,calendar.get(Calendar.MINUTE)+1);

jmeter事务控制器_jmeter服务器性能监控_jmeter监控服务器性能

问题五:接口测试用例如何断言?

对于接口的正确性验证,只验证被测接口返回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+"不一致"; }

jmeter事务控制器_jmeter监控服务器性能_jmeter服务器性能监控

// JDBC Request 采样器 获取返回结果  -> triggers_countSELECTcount(*)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 就可以触发测试执行。代码库配置如下图:

jmeter监控服务器性能_jmeter服务器性能监控_jmeter事务控制器

工具依赖

工具

简介

备注

开源性能测试、接口测试工具。

支持脚本录制、多平台部署、集成等,提供丰富的组件及第三方插件库。

-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报告,报告示例如下:

jmeter监控服务器性能_jmeter服务器性能监控_jmeter事务控制器

2、使用统计接口测试代码级覆盖率报告

接口测试用例成功率即使达到100%,仍然会存在漏测。因此使用来统计代码覆盖率,分析接口测试未覆盖的代码,进行测试用例补充完善。

关键步骤说明:

步骤2:调用脚本执行测试

步骤3:dump覆盖率报告

步骤4:生成覆盖率报告

报告展示如下图 :

jmeter服务器性能监控_jmeter事务控制器_jmeter监控服务器性能

问题八:如何提升用例执行稳定性和效率?

当测试case数量持续增加时,需要考虑执行稳定性和效率。

总结如下:

隔离

配置优化

防御式编程

不足之处,欢迎指正。

jmeter事务控制器_jmeter服务器性能监控_jmeter监控服务器性能

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注