2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AutifyAdvent Calendar 2021

Day 7

Autifyの過去のテスト実行回数を取得するワンライナーをつくる試み

Last updated at Posted at 2021-12-07

この記事は Autify アドベントカレンダー2021 の7日目のエントリです。

本日も、前回に続きAutify APIを使用したちょっとしたTipsをご紹介します。

Autifyでは設定画面から当月のテスト実行回数を確認できますが、先月や先々月に何回テストを実行したか確認したくなるとき、ありませんか?
できれば、成功・失敗のステータス別の件数も取れたらいいな。

というわけで、今回は**テスト結果を取得するAPI(result API)**を利用して、過去のテスト実行回数を取得してみます!

実施前提

Autify APIを利用する前提として、以下の情報が手元にあること

  • プロジェクトID
  • パーソナルアクセストークン

加えて、以下のコマンドが使えるコマンドライン環境があることとします。

  • curl
  • jq
  • その他cut, sort, uniq等の標準コマンド

各コマンドについては、各公式ドキュメントをご覧ください!

ざっくり実行

手始めに、result APIを呼び出すとどんな情報が返ってくるのか、curlコマンドとjqコマンドを使って見てみましょう。
<プロジェクトID><パーソナルアクセストークン> は、ご自身のものに置き換えてみてください。

$ curl -H "Authorization: Bearer <パーソナルアクセストークン>" 'https://app.autify.com/api/v1/projects/<プロジェクトID>/results' | jq .

[
  {
    "id": ******,
    "status": "passed",
    "duration": 47295,
    "started_at": "2021-12-07T00:43:37.950Z",
    "finished_at": "2021-12-07T00:44:25.246Z",
    "created_at": "2021-12-07T00:43:28.457Z",
    "updated_at": "2021-12-07T00:44:26.675Z",
    "review_needed": false,
    "test_plan": null
  },
  {
    "id": ******,
    "status": "failed",
    "duration": 159715,
    "started_at": "2021-12-03T07:43:56.887Z",
    "finished_at": "2021-12-03T07:46:36.603Z",
    "created_at": "2021-12-03T07:43:49.740Z",
    "updated_at": "2021-12-03T07:46:40.106Z",
    "review_needed": false,
    "test_plan": null
  },
  (...中略...)
 ] 

こんな感じで、テスト結果がずらずらっと30件出てきます。
テスト結果をステータス毎に集計したり、実行日時で絞り込みをしたりしようと思ったら、statuscreated_at を使うと良さそうな予感。

では、この2つのフィールドを取り出してCSV出力してみましょう。
得られたテスト結果を jq -r '.[] | [.status, .created_at] | @csv' に渡してみます。

$ curl -H "Authorization: Bearer <パーソナルアクセストークン>" 'https://app.autify.com/api/v1/projects/<プロジェクトID>/results' | jq -r '.[] |  [.status, .created_at] | @csv'

"passed","2021-12-07T00:43:28.457Z"
"failed","2021-12-03T07:43:49.740Z"
"passed","2021-11-24T12:01:10.659Z"
"passed","2021-11-24T11:33:17.440Z"
"passed","2021-11-24T11:26:54.875Z"
"passed","2021-11-24T11:18:29.809Z"
"passed","2021-11-24T11:11:39.785Z"
"failed","2021-11-24T11:08:31.178Z"
"passed","2021-11-22T02:09:49.702Z"
"passed","2021-11-18T10:35:34.246Z"
(...以下略...)

いやはや、jq先生は便利ですね。
さらに、ここでは2021年11月分の結果のみを抽出すべく select(.created_at | startswith("2021-11")) を追加してみます。

$ curl -H "Authorization: Bearer <パーソナルアクセストークン>" 'https://app.autify.com/api/v1/projects/<プロジェクトID>/results' | jq -r '.[] | select(.created_at | startswith("2021-11")) | [.status, .created_at] | @csv'

"passed","2021-11-24T12:01:10.659Z"
"passed","2021-11-24T11:33:17.440Z"
"passed","2021-11-24T11:26:54.875Z"
"passed","2021-11-24T11:18:29.809Z"
"passed","2021-11-24T11:11:39.785Z"
"failed","2021-11-24T11:08:31.178Z"
"passed","2021-11-22T02:09:49.702Z"
"passed","2021-11-18T10:35:34.246Z"
"passed","2021-11-18T06:37:36.926Z"
"passed","2021-11-18T03:16:55.527Z"
(...以下略...)

無事、2021年11月分だけがフィルタされました!

あとはjqの出力結果に cut -f1 -d, | sort | uniq -c あたりをかませてみたらどうでしょう。

$ curl -H "Authorization: Bearer <パーソナルアクセストークン>" 'https://app.autify.com/api/v1/projects/<プロジェクトID>/results' | jq -r '.[] | select(.created_at | startswith("2021-11")) | [.status, .created_at] | @csv'

  17 "passed"
   1 "failed"

出ました! passed が17件、failed が1件。

この結果がどうやら

  • 最新のテスト30件の結果のうち
  • 2021年11月に実行された
  • テスト結果のステータス別件数

のようです。

実用に向けて

さて、APIで取得できる最初の30件に対象のテスト結果がすべて含まれていれば上記のコマンドで良いのですが、実際に使おうと思ったらpageパラメータで指定するページ数の考慮が必要です。

たとえば、ページ1から10までで返却される300件を対象にテスト結果を絞り込み、ステータス毎に数えるならこんな感じになるでしょうか。

results=`for i in {1..10}; do curl -H "Authorization: Bearer <パーソナルアクセストークン>" "https://app.autify.com/api/v1/projects/<プロジェクトID>/results?page=$i"; done`; echo $results | jq -r '.[] | select(.created_at | startswith("2021-11")) | [.status, .created_at] | @csv' | sort | cut -f1 -d, | uniq -c

うむむ、実行はできるものの、ワンライナーと呼ぶにはだいぶ長くなってしまいました。
そして、API呼出処理自体も固定回数ではなく、対象データがある限りループする、といった感じにしたいところです。

というわけで、ある程度ボリュームのある処理を伴う絞り込みや集計を行うならば、素直に分かりやすいスクリプトを書くか、CSV出力したものをスプレッドシートで取り扱った方がやりやすいかもしれません。

けれども、こういうちょっとしたワンライナーは**「ちょっとデータの様子を見たい」**時に便利だったりしますよね。
皆さんも「こんな工夫をしているよ」「こんなスクリプトを書いているよ」といったものがあったら、是非伺いたいなと思います☺️

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?