Google Apps Scriptを使ってQualityForward APIのテスト集計結果をWeb API化する


QualityForwardはテスト管理のクラウドサービスを提供しています。Web APIも提供しているのですが、各モデルの一覧を返すAPIのみとなっています。検索したり、並び替えるなどの機能がないので、操作が不便に感じる人もいるかも知れません。

そこでGoogle Apps Scriptを間に挟んでQualityForwardの集計結果を返すWeb APIを実現してみます。

QualityForward用Google Apps Script SDKを使う

Google Apps ScriptでのプロジェクトIDは 1ppRPLjuClG0MhtnXYbskdZ8uYGbyCFHv7MFhr0GYa-3IAKEh8B7lmTMb になります。これを取り込んでください。以下はデフォルトの QualityForward として取り込んだ場合の書き方です。

初期化

初期化はAPIキーを適用して行います。

var apiKey = 'aaa';
var qf = new QualityForward.Client(apiKey);

セットアップ

GET処理でデータを取得するので、doGet関数を使います。そしてAPIキーはパラメータとして与えられるようにします。

function doGet(e) {
  var out = ContentService.createTextOutput();
  if (!e.parameter.apiKey) {
    return out;
  }
  var qf = new QualityForward.Client(e.parameter.apiKey);
  // :
}

日々の作業件数を取得する

今回は日々の作業件数を、その結果毎に集計していきます。すべてのテスト結果を得るためには、すべてのテストフェーズ → テストアサインメント → テストサイクル → テスト結果とドリルダウンしながらデータを取得します。それらのデータについて日ごとに集計していきます。

var ary = {};
var testPhases = qf.getTestPhases();
for (var i in testPhases) {
  for (var j in testPhases[i].test_suite_assignments) {
    var testSuiteAssignment = testPhases[i].test_suite_assignments[j];
    var testCycles = testSuiteAssignment.getTestCycles();
    for (var k in testCycles) {
      var testCycle = testCycles[k];
      var results = testCycle.getTestResults();
      for (var l in results) {
        var testResult = results[l];
        var d = testResult.executed_at;
        var date = d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate();
        if (!ary[date]) {
          ary[date] = {
            pass: 0, fail: 0, skip: 0,
            cut: 0, block: 0, na: 0,
            qa: 0
          }
        }
        ary[date][testResult.result]++;
      }
    }
  }
}

後はこの結果をJSONで返すだけです。

//JSONテキストをセットする
out.setContent(JSON.stringify(ary));
return out;

ウェブアプリケーションとして公開する

スクリプトができあがったら、公開メニューから「ウェブアプリケーションとして導入する」を選択します。

実行してみる

では実行してみます。APIキーは皆さんが使っているものに置き換えてください。また、Google Apps ScriptのURLも皆さんのものに変更してください。

$ curl -L https://script.google.com/macros/s/AKf...5Xg/exec?apiKey=0aa...340 | jq
{
  "2019-8-16": {
    "pass": 2,
    "fail": 1,
    "skip": 0,
    "cut": 0,
    "block": 0,
    "na": 0,
    "qa": 0
  },
  "2019-11-26": {
    "pass": 4,
    "fail": 1,
    "skip": 1,
    "cut": 1,
    "block": 1,
    "na": 0,
    "qa": 1
  },

このように結果が返ってくれば問題ありません。

まとめ

後はこの結果をCSVとして保存しておいたり、メールしたりできるでしょう。皆さんのテスト管理に役立ててください!

QualityForward