目前正在着手开发一款功能全面的接口自动化测试平台,该平台将涵盖登录、用户管理、权限控制、项目管理、用例管理、测试数据管理、测试报告生成、任务调度、缺陷跟踪以及系统配置等多个核心模块。为了快速高效的编写测试用例,实现自动化测试,需要将一些固定逻辑以自动化的方式实现,来完成自动生成接口测试用例。如:正用例、headers必填项反用例、参数必填项反用例、参数长度反用例
技术选型
- 后端:采用Java作为主要开发语言。
- 前端:使用VUE框架进行界面展示。
- 用例生成: 根据自动获取的请求头、参数信息,来自动生成对应的正反用例。
用例生成功能介绍
首先、生成用例前,需要删除之前自动生成的用例,然后再创建新用例,为了防止参数变化,导致旧用例不可用。
@Override
public ResponseEntity<Map<String, Object>> generateCase(CaseDTO caseDTO) throws CloneNotSupportedException {
if (null != caseDTO.getApi_id()){
if (deleteCaseByGenerate(caseDTO.getApi_id())) {
//生成用例
createCase(caseDTO.getApi_id());
return RespBean.ok("生成用例成功");
}else {
return RespBean.error("清除旧用例失败");
}
}else {
log.error("接口id缺失");
return RespBean.error("接口id缺失");
}
}
用例生成代码:
private void createCase(Integer api_id) throws CloneNotSupportedException {
ApiVO apiVo = apiMapper.findApiById(api_id);
List<DataVO> dataVoList = dataMapper.findDataByApiId(api_id);
List<HeaderVO> headerVoList = headerMapper.findHeaderByApiId(api_id);
if (createAllCase(api_id,apiVo, dataVoList,headerVoList)) {
log.info("生成全参数测试用例成功");
ApiDTO apiDto = new ApiDTO();
apiDto.setGenerate_type(1);
apiDto.setId(api_id);
apiMapper.update(apiDto);
}else {
log.error("生成全参数测试用例失败");
}
if (createHeaderCase(api_id,apiVo, dataVoList,headerVoList)) {
log.info("生成请求头反测试用例成功");
}else {
log.error("生成请求头反测试用例失败");
}
if (createDataCase(api_id,apiVo, dataVoList,headerVoList)) {
log.info("生成参数反测试用例成功");
}else {
log.error("生成参数反测试用例失败");
}
if (createLenCase(api_id,apiVo, dataVoList,headerVoList)) {
log.info("生成参数长度反测试用例成功");
}else {
log.error("生成参数长度反测试用例失败");
}
}
针对长度用例,我们需要根据获取的字段长度,来生成超出长度的参数。将长度+1
后传个下面方法:
/**
* 根据长度随机生成整型
*/
public Long generateRandomInteger(int length) {
String CHARACTERS = "0123456789";
StringBuilder sb = new StringBuilder(length);
Random random = new Random();
for (int i = 0; i < length; i++) {
sb.append(CHARACTERS.charAt(random.nextInt(CHARACTERS.length())));
}
return Long.valueOf(sb.toString());
}
/**
* 根据长度随机生成整型
*/
public String generateRandomString(int length) {
String CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
StringBuilder sb = new StringBuilder(length);
Random random = new Random();
for (int i = 0; i < length; i++) {
sb.append(CHARACTERS.charAt(random.nextInt(CHARACTERS.length())));
}
return sb.toString();
}
本篇文章举例说明了3种生成规则,还可以根据自己项目实际情况,开发自己的用例生成规则。