测试用例接口开发实战
前言
在上一集,我们也大概完成了对Jmeter的二次开发的Demo版本的了解,我们接下来就要基于这个Demo来将Jmeter压测进行平台化。
那么这一集,我们讲一讲测试用例接口开发实战。
StressCaseController
我们的Controller其实也就那些增删改查的操作加上一个执行测试用例的API。
但是我们一开始先不讲执行测试用例的API,先放一放,先把增删改查的API完成。
find
@RequestMapping("/find")
public JsonData findById(@RequestParam("projectId")Long projectId,@RequestParam("id")Long caseId){
return JsonData.buildSuccess(stressCaseService.findById(projectId,caseId));
}
del
@PostMapping("/del")
public JsonData del(@RequestBody StressCaseDelReq req){
return JsonData.buildSuccess(stressCaseService.delete(req.getId(),req.getProjectId()));
}
save
@PostMapping("/save")
public JsonData save(@RequestBody StressCaseSaveReq req){
return JsonData.buildSuccess(stressCaseService.save(req));
}
update
@PostMapping("/update")
public JsonData update(@RequestBody StressCaseUpdateReq req){
return JsonData.buildSuccess(stressCaseService.update(req));
}
完整代码
@RestController
@RequestMapping("/api/v1/stress_case")
public class StressCaseController {
@Resource
private StressCaseService stressCaseService;
@RequestMapping("/find")
public JsonData findById(@RequestParam("projectId")Long projectId,@RequestParam("id")Long caseId){
return JsonData.buildSuccess(stressCaseService.findById(projectId,caseId));
}
@PostMapping("/del")
public JsonData del(@RequestBody StressCaseDelReq req){
return JsonData.buildSuccess(stressCaseService.delete(req.getId(),req.getProjectId()));
}
@PostMapping("/save")
public JsonData save(@RequestBody StressCaseSaveReq req){
return JsonData.buildSuccess(stressCaseService.save(req));
}
@PostMapping("/update")
public JsonData update(@RequestBody StressCaseUpdateReq req){
return JsonData.buildSuccess(stressCaseService.update(req));
}
@GetMapping("/execute")
public JsonData execute(@RequestParam("projectId")Long projectId,@RequestParam("id")Long caseId){
return JsonData.buildSuccess(stressCaseService.execute(projectId,caseId));
}
}
不用多说,自定义请求体类如下
StressCaseSaveReq
@Data
public class StressCaseSaveReq {
private Long projectId;
private Long moduleId;
private Long environmentId;
private String name;
private String description;
private String assertion;
private String relation;
private String stressSourceType;
private String threadGroupConfig;
private String jmxUrl;
private String path;
private String method;
private String query;
private String header;
private String body;
private String bodyType;
}
StressCaseDelReq
@Data
public class StressCaseDelReq {
private Long id;
private Long projectId;
}
StressCaseUpdateReq
@Data
public class StressCaseUpdateReq {
private Long id;
private Long projectId;
private Long moduleId;
private Long environmentId;
private String name;
private String description;
private String assertion;
private String relation;
private String stressSourceType;
private String threadGroupConfig;
private String jmxUrl;
private String path;
private String method;
private String query;
private String header;
private String body;
private String bodyType;
}
可以看到,这就是测试用例的自定义请求体类了。
接下来就要完成Service和它的Impl即可。
StressCaseService
public interface StressCaseService {
StressCaseDTO findById(Long projectId, Long caseId);
int delete(Long id, Long projectId);
int save(StressCaseSaveReq req);
int update(StressCaseUpdateReq req);
}
StressCaseServiceImpl
findById
public StressCaseDTO findById(Long projectId, Long caseId) {
LambdaQueryWrapper<StressCaseDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(StressCaseDO::getProjectId, projectId);
queryWrapper.eq(StressCaseDO::getId, caseId);
StressCaseDO stressCaseDO = stressCaseMapper.selectOne(queryWrapper);
return SpringBeanUtil.copyProperties(stressCaseDO, StressCaseDTO.class);
}
delete
public int delete(Long id, Long projectId) {
LambdaQueryWrapper<StressCaseDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(StressCaseDO::getProjectId, projectId);
queryWrapper.eq(StressCaseDO::getId, id);
return stressCaseMapper.delete(queryWrapper);
}
save
public int save(StressCaseSaveReq req) {
StressCaseDO stressCaseDO = SpringBeanUtil.copyProperties(req, StressCaseDO.class);
return stressCaseMapper.insert(stressCaseDO);
}
update
public int update(StressCaseUpdateReq req) {
StressCaseDO stressCaseDO = SpringBeanUtil.copyProperties(req, StressCaseDO.class);
LambdaQueryWrapper<StressCaseDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(StressCaseDO::getProjectId, req.getProjectId());
queryWrapper.eq(StressCaseDO::getId, req.getId());
return stressCaseMapper.update(stressCaseDO, queryWrapper);
}
完整代码
@Service
public class StressCaseServiceImpl implements StressCaseService {
@Resource
private StressCaseMapper stressCaseMapper;
@Override
public StressCaseDTO findById(Long projectId, Long caseId) {
LambdaQueryWrapper<StressCaseDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(StressCaseDO::getProjectId, projectId);
queryWrapper.eq(StressCaseDO::getId, caseId);
StressCaseDO stressCaseDO = stressCaseMapper.selectOne(queryWrapper);
return SpringBeanUtil.copyProperties(stressCaseDO, StressCaseDTO.class);
}
@Override
public int delete(Long id, Long projectId) {
LambdaQueryWrapper<StressCaseDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(StressCaseDO::getProjectId, projectId);
queryWrapper.eq(StressCaseDO::getId, id);
return stressCaseMapper.delete(queryWrapper);
}
@Override
public int save(StressCaseSaveReq req) {
StressCaseDO stressCaseDO = SpringBeanUtil.copyProperties(req, StressCaseDO.class);
return stressCaseMapper.insert(stressCaseDO);
}
@Override
public int update(StressCaseUpdateReq req) {
StressCaseDO stressCaseDO = SpringBeanUtil.copyProperties(req, StressCaseDO.class);
LambdaQueryWrapper<StressCaseDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(StressCaseDO::getProjectId, req.getProjectId());
queryWrapper.eq(StressCaseDO::getId, req.getId());
return stressCaseMapper.update(stressCaseDO, queryWrapper);
}
}
StressCaseDTO
@Data
public class StressCaseDTO implements Serializable {
private Long id;
private Long projectId;
private Long moduleId;
private Long environmentId;
private String name;
private String description;
private String assertion;
private String relation;
private String stressSourceType;
private String threadGroupConfig;
private String jmxUrl;
private String path;
private String method;
private String query;
private String header;
private String body;
private String bodyType;
private Date gmtCreate;
private Date gmtModified;
}