打造全方位接口自动化测试平台:对接禅道缺陷功能实现

目前正在着手开发一款功能全面的接口自动化测试平台,该平台将涵盖登录、用户管理、权限控制、项目管理、用例管理、测试数据管理、测试报告生成、任务调度、缺陷跟踪以及系统配置等多个核心模块。测试完成后,可以将测试失败的结果,同步到禅道上,方便记录缺陷。也可以从禅道上同步缺陷到测试平台。更新缺陷的状态,方便跟踪缺陷。

在这里插入图片描述

技术选型

  • 后端:采用Java作为主要开发语言。
  • 前端:使用VUE框架进行界面展示。
  • 缺陷同步: 通过调用禅道的RESTful接口,同步缺陷。

缺陷同步功能设计

调用禅道接口在实现缺陷添加和状态同步,需要先调用token接口。将平台测试不通过的接口的请求数据和接口返回以缺陷步骤的方式,调用禅道创建bug接口,来完成将测试不通过的接口同步到禅道。然后写一个定时任务,通过调用禅道的查询bug详情接口,来跟踪缺陷状态,同步到测试平台。

获取token

@Value("${zentao.api.url}")
private String zentaoUrl;

public String getZentaoToken(String account, String password) throws IOException {
    OkHttpClient okHttpClient = new OkHttpClient().newBuilder().build();
    MediaType mediaType = MediaType.parse("applicaton/json;charset=utf-8");
    Map<String, String> raw = new HashMap<>();
    raw.put("account", account);
    raw.put("password", password);
    RequestBody body = RequestBody.create(mediaType, JSONObject.toJSONString(raw));
    Request request = new Request.Builder().url(zentaoUrl + "/tokens").method("POST", body).addHeader("Content-Type", "application/json").build();
    try {
        Response response = okHttpClient.newCall(request).execute();
        String strResponse = response.body().string();
        JSONObject jsonResponse = JSON.parseObject(strResponse);
        String token = jsonResponse.getString("token");
        if (!token.isEmpty()) {
            log.info("获取禅道token成功:{}", token);
            return token;
        }else {
            return "";
        }
    }catch (Exception ignored){
        log.error("获取禅道token失败: {}", ignored.getMessage());
        return "";
    }
}

创建bug

@Value("${zentao.api.url}")
private String zentaoUrl;

@Value("${zentao.products.id }")
private String productsId;

public int addBug(BugDTO bugDTO, String account, String password) throws IOException {
    String token = getZentaoToken(account, password);
    String url = String.format("%s/%s/%s", zentaoUrl, productsId, "bugs");
    OkHttpClient okHttpClient = new OkHttpClient().newBuilder().build();
    MediaType mediaType = MediaType.parse("applicaton/json;charset=utf-8");
    Map<String, Object> raw = new HashMap<>();
    raw.put("title", bugDTO.getTitle());
    raw.put("severity", bugDTO.getSeverity());
    raw.put("pri", bugDTO.getPri());
    raw.put("type", bugDTO.getType());
    raw.put("steps", bugDTO.getSteps());
    RequestBody body = RequestBody.create(mediaType, JSONObject.toJSONString(raw));
    Request request = new Request.Builder().url(url).method("POST", body).addHeader("token", token).addHeader("Content-Type", "application/json").build();
    try {
        Response response = okHttpClient.newCall(request).execute();
        String strResponse = response.body().string();
        JSONObject jsonResponse = JSON.parseObject(strResponse);
        int id = (int) jsonResponse.get("id");
        return id;
    }catch (Exception ignored){
        log.error("获取禅道token失败: {}", ignored.getMessage());
        return 0;
    }
}

同步bug

@Value("${zentao.api.url}")
private String zentaoUrl;

public boolean syncBug(String account, String password, String bugId) throws IOException {
    String token = getZentaoToken(account, password);
    String url = String.format("%s/%s/%s", zentaoUrl, "bugs", bugId);
    OkHttpClient okHttpClient = new OkHttpClient().newBuilder().build();
    MediaType mediaType = MediaType.parse("applicaton/json;charset=utf-8");
    RequestBody body = RequestBody.create(mediaType, "");
    Request request = new Request.Builder().url(url).method("GET", body).addHeader("token", token).addHeader("Content-Type", "application/json").build();
    try {
        Response response = okHttpClient.newCall(request).execute();
        String strResponse = response.body().string();
        JSONObject jsonResponse = JSON.parseObject(strResponse);
        if (response.code() == 200) {
            BugDTO bugDTO = new BugDTO();
            bugDTO.setAssignedTo(jsonResponse.getJSONObject("assignedTo").getString("realname"));
            bugDTO.setStatus(jsonResponse.getString("status"));
            bugDTO.setBug_id(Integer.valueOf(bugId));
            bugService.updateBug(bugDTO);
            log.info("同步bug成功");
            return true;
        }else {
            log.error("同步bug失败");
            return false;
        }
    }catch (Exception exception) {
        log.error("同步bug失败:{}", exception.getMessage());
        return false;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值