<返回更多

怎样让脚本发现问题自动在jira记录bug

2022-06-14    翩翩见龙
加入收藏

前提:bug记录为JIRA

自动化脚本跑完后,如果发现问题,再用手工把问题录入jira,这样是不是觉得自动化做得还不够彻底?下面讲的是如何联通jira。


首先测试用例中需要带有开发名称和测试人员名称(对应jira内的名称)。

测试结果数据和人员名称聚合。

如果有重试机制,重试完成最后再统一录入jira。

 

jira有开放的api,分两种:

  1. JAVA rest api --- 以java依赖包的方式调用 点击查看:https://developer.atlassian.com/server/jira/platform/java-apis/,api doc: https://docs.atlassian.com/software/jira/docs/api/8.22.3/。pom添加如下
<dependency>
    <groupId>com.atlassian.jira</groupId>
    <artifactId>jira-api</artifactId>
    <version>${atlassian.product.version}</version>
    <scope>provided</scope>
</dependency>

2 . rest api --- 通过网络调用,地址:
https://developer.atlassian.com/cloud/jira/platform/rest/v2/api-group-issues/#api-group-issues

 

调用jira前需要获取token

使用 java包时需要先调用auth 获取token

使用api时,首先要获取authentication,它支持 OAuth2.0 这里可以用简单的basic auth 通过鉴权,这种方式可以直接调用所需的接口,不需要再次获取token,如果jira配置不支持这种鉴权方式,就需要在jira中配置token 官网地址:。
https://support.atlassian.com/atlassian-account/docs/manage-api-tokens-for-your-atlassian-account/#Tokens-de-API

basic auth 使用:

curl -D- 
   -X GET 
   -H "Authorization: Basic ZnJlZDpmcmVk" 
   -H "Content-Type: Application/json" 
   "https://your-domain.atlassian.NET/rest/api/2/issue/QA-31"

第三行 basic 后的字符串是,用户名:密码的base64字符。

有的网络使用统一的登录授权方式,对于这种,使用java包的话需要重写 authentication的头信息,把获取的token代入进去。而调用rest api的方式同样要在请求头加入统一系统的token。

 

说下新建bug

jira新建bug,也就是 issue的 接口地址:POST /rest/api/2/issue

请求格式:



{
  "update": {
    "worklog": [
      {
        "add": {
          "timeSpent": "60m",
          "started": "2019-07-05T11:05:00.000+0000"
        }
      }
    ]
  },
  "fields": {
    "summary": "Main order flow broken",
    "parent": {
      "key": "PROJ-123"
    },
    "issuetype": {
      "id": "10000"
    },
    "components": [
      {
        "id": "10000"
      }
    ],
    "customfield_20000": "06/Jul/19 3:25 PM",
    "customfield_40000": "Occurs on all orders",
    "customfield_70000": [
      "jira-administrators",
      "jira-software-users"
    ],
    "project": {
      "id": "10000"
    },
    "description": "Order entry fails when selecting supplier.",
    "reporter": {
      "id": "5b10a2844c20165700ede21g"
    },
    "fixVersions": [
      {
        "id": "10001"
      }
    ],
    "customfield_10000": "09/Jun/19",
    "priority": {
      "id": "20000"
    },
    "labels": [
      "bugfix",
      "blitz_test"
    ],
    "timetracking": {
      "remainingEstimate": "5",
      "originalEstimate": "10"
    },
    "customfield_30000": [
      "10000",
      "10002"
    ],
    "customfield_80000": {
      "value": "red"
    },
    "security": {
      "id": "10000"
    },
    "environment": "UAT",
    "versions": [
      {
        "id": "10000"
      }
    ],
    "duedate": "2019-03-11",
    "customfield_60000": "jira-software-users",
    "customfield_50000": "Could impact day-to-day work.",
    "assignee": {
      "id": "5b109f2e9729b51b54dc274d"
    }
  }
}
// 涉及到的id 可以在脚本中做个名称和id的字典方便匹配
//reporter 是报告人,一般对应测试人员的id
//assignee 是之给谁,一般是开发人员
//customfield_xxxx 字段是jira设置的自定义字段

//建立后回应如下:
{
  "id": "10000",
  "key": "ED-24",
  "self": "https://your-domain.atlassian.net/rest/api/2/issue/10000",
  "transition": {
    "status": 200,
    "errorCollection": {
      "errorMessages": [],
      "errors": {}
    }
  }
}

把相应的 id 收集后,自动发送邮件,邮件中用 上方selft的地址把id逐个拼起来就是bug的浏览地址,方便人员点击查看。

bug的修改,删除请求用法见地址:
https://developer.atlassian.com/cloud/jira/platform/rest/v2/api-group-issues/#api-group-issues

 

jira大部分查询用的Jql 语法,使用方法:

例如


var bodyData = `{
  "queries": [
    "summary ~ test AND (labels in (urgent, blocker) OR lastCommentedBy = currentUser()) AND status CHANGED AFTER startOfMonth(-1M) ORDER BY updated DESC",
    "invalid query",
    "summary = test",
    "summary in test",
    "project = INVALID",
    "universe = 42"
  ]
}`;

const response = await api.asApp().requestJira(route`/rest/api/2/jql/parse`, {
  method: 'POST',
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
  },
  body: bodyData
});

console.log(`Response: ${response.status} ${response.statusText}`);
console.log(await response.json());

//“AND (labels in (urgent, blocker) OR lastCommentedBy = currentUser()) AND status CHANGED AFTER startOfMonth(-1M) ORDER BY updated DESC ” 
//上一行这部分条件可以在jira网页地址中调试成功再写入代码。

 


除了上面这些,还能做些什么?

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>