T-DASHをREST APIのテストで使ってみた（パート２）

# 1.はじめに

前回に引き続き **テスト自動化ツールの『T-DASH』** を使ってREST APIの自動テストを作ってみたいと思います。

前回はPythonを使って自動化しましたが、今回はRobotframeworkを使ってAPIテストの実装に挑戦してみます。

Robotframeworkについては、「[Robot Framework クイックスタートガイド](https://robotframework-ja.readthedocs.io/ja/latest/quickstart/QuickStart.html)」にまとまっていますのでこちらを参照してください。

https://qiita.com/troilus1112/items/60bf74a6096f530b742d

# 2.T-DASHとは

T-DASHの公式サイトでは以下のような特徴があるようです。

* 誰でもカンタンにテスト自動化ができる時代
  * 日本語で書いたテストケースがスクリプトになる
  * すぐに使えて操作が簡単
  * 月額3,960円で開発スピードを高速化

誰でもカンタンにテスト自動化ができるというのは非常に魅力的に見えます。日本語で書いたテストケースがというのがキーになっているようなので、実際にどうなるか試してみます。

# 3.準備

公式サイトにある『[カスタム動作を作成しよう / RobotFrameworkで作成](https://service.valtes.co.jp/t-dash/function/tutorial/custombehavior_vol_002)』をみると、T-DASHで標準搭載していない機能は自分で作るようです。

> 例:　Webアプリ操作、ファイル操作、スマホアプリ操作、DB操作、API操作などなど


T-DASHの対向になるAPIは、実際にテストで使ったサイトAPIをここに公開するわけにはいかないので、前回と同様にテスト用のサイト [httpbin.org](https://httpbin.org/) を使います。

# 4.テスト実行用のPythonファイルの準備

今回はPythonコードは作成しません。

# 5.T-DASHのカスタム動作の作成

## ①プロジェクトを作る
「T-DASH」を起動すると「プロジェクト一覧」が表示されます。

カスタム動作を作るには、①の「＋プロジェクトを作成」をクリックします。今回は以下の値を設定しました。


![①-1プロジェクトの作成[1].png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624354/19e578e6-ba65-63ac-186a-df617fd20674.png)


* キー： API02
* プロジェクト名： RESTAPIのテスト（RobotFrameworkのみ）

上記値を入力して「作成」をクリックすると、プロジェクト一覧に追加されます。


## ②カスタム動作を作る

カスタム動作は、「動作定義」にある「カスタム動作」タブから作成します。

![②-1カスタム動作の作成[1].png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624354/0a4b474a-099a-6662-d6eb-e25aa19ee65d.png)


「＋新規カテゴリ作成」をクリックし、作成する動作のグループを作成します。


![②-2カスタム動作の作成[1].png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624354/715aea96-b24b-641b-ad97-989e470cbaeb.png)


今回は以下の値を設定しました。（色やアイコンも変更できるようです）

![②-3カスタム動作の作成[1].png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624354/dc47cb97-5d65-d82a-4206-3919c02d7bb0.png)


* キー： API2
* 動作カテゴリ： REST2

上記値を入力して「作成」をクリックすると、カスタム動作の一覧に追加されます。


:::note info
T-DASHのテストケース作成するときに使う以下の動作のグループを作っています。
今回はこのグループに「REST2」を追加しようとしています。
:::


### カスタム動作で使用するライブラリの追加

「＋カスタム動作を追加」をクリックして、以前の記事で作成した `APITest.py` と同じ動作を作成します。

今回はこの関数のうち、**上の２つ**（GET送信する、ステータスコードをチェックする）を作成します。

| `APITest.py` | カスタム動作 |
|:-------------|:------------|
| def send_request_get(url): | GET送信する |
| def check_rest_status_code(status_code): | ステータスコードをチェックする |
| ~~def get_response_value(key_list):~~ | 応答のJSONの値を取得する |
| ~~def check_response_value(expected_str):~~ | 取得した値の一致を確認する |



![②-5カスタム動作の作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624354/02eb92d4-2211-a146-5ec3-1c554450bb84.png)


「＋ライブラリを追加する」をクリックし、カスタム動作で使うためのライブラリを追加します。

![②-6カスタム動作の作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624354/3498e850-6430-68b8-771a-76f616625b75.png)


テストライブラリの「RESTinstance」を使用するので、pip installのテキストボックスに「RESTinstance」を入力し、「＋」まをクリックします。

![②-7カスタム動作の作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624354/dbdf790b-1cb2-b610-69ee-f14cde3589bf.png)

少し待ちます。

![②-8カスタム動作の作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624354/ab41c4c6-1eeb-64f8-4d6a-b1d1df68c7f1.png)

pipのアップデートのメッセージが出力されますが、無視して進めます。

![②-9カスタム動作の作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624354/11be77c1-52ee-768b-ec37-f3444b58d5cf.png)

Libraryの横にあるテキストボックスに「REST」を入力し「＋」ボタンをクリックします。


![②-11カスタム動作の作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624354/8636e6c9-017a-77b0-fc79-865f60b29235.png)

「閉じる」をクリックします

![②-12カスタム動作の作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624354/769d486e-75ed-83ed-ca2e-6ad1be945b74.png)


これで、カスタム動作を作るためのライブラリの準備が完了しました。「動作関数作成」画面の「＋ライブラリを追加する」の横に `REST` が表示されていれば成功です。

![②-13カスタム動作の作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624354/957dc022-b8b6-d323-2861-edbbde988fb5.png)


### カスタム動作の作成

動作名などの必要な情報の入力と、RobotFrameworkによるプログラミングを行います。

![②-14カスタム動作の作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624354/6eaf4b63-ad39-1a7f-e1e1-87c7a4e68f31.png)


| フィールド | 値 | 説明 |
|:-------------|:------------|:------------|
| 動作名 | GET送信する | 動作の名前を設定します。 |
| 利用変数 | 画面定義を使用を選択 | 「通常の変数として使用」を選択すると、後述するデータドリブンの設定が使えないようでしたので、「画面定義を使用」を選択します |
| 利用変数 | 設定値 | 利用する変数を選択します。設定値のみデータドリブンで設定できるようです。 |
| フォーマット | URL「設定値」にGETでREST送信（RF）する | 利用変数で選択すると`「設定値」`がテキストボックスに設定されるので、それを利用して文章を作ります。※埋め込み変数として使うようです。 |
| 動作種類 | 操作 | 何に使うかわかりませんでしたが、動作の分類っぽいので操作を選択します |


RESTInstanceの [キーワードドキュメント](https://asyrjasalo.github.io/RESTinstance/) を参照しながら作成します。以下はGETの使い方です。

![②-16_0カスタム動作の作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624354/d6de4ebb-aadd-ccb7-e343-f1e2498e58c6.png)

RobotFrameworkのコードを以下のように作成します。

${value}（valueにURLが設定されるのを想定）の変数に入力した値が格納されますので、それを利用したコードにします。

![②-16カスタム動作の作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624354/9d050973-3c77-7acf-2e77-59c42db15326.png)

「保存する」をクリックします。

![②-17カスタム動作の作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624354/acf041fb-68c5-6daf-531e-196f13485f77.png)


残りも同様に作成します。

#### ステータスコードをチェックする

![②-18カスタム動作の作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624354/ba1893a4-ef67-2df6-619f-61e4db0b20bd.png)


# 6.T-DASHのテストケースの作成

作成したカスタム動作を使うT-DASHのテストケースを作成します。

## 6-1.ステータスコードを確認するテストを作る

左のメニューにある「テストスイート」から「テストスイートを作成する」をクリックします。

![③-1T-DASHケース.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624354/d27665d5-0c61-9c49-3161-b099e7a7f0e5.png)

テストスイート名を入力して「作成」をクリックします。今回は「APIのテスト（RobotFramework）」と入力しました。


![③-2T-DASHケース.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624354/e6ecf0a1-8650-6825-a5fa-b57a9d36c2e1.png)


「テストケースを作成する」をクリックします。

![③-4T-DASHケース.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624354/df27e649-15bf-5974-211f-625611bfbf33.png)



テストケース名を入力して「作成」をクリックします。今回は「GETステータスコードのチェックテスト」と入力しました。

![③-5T-DASHケース.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624354/b09492d8-70f7-4506-9923-ab82ee316a24.png)


作成したテストケースをクリックします。

![③-6T-DASHケース.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624354/289d9c6f-ee42-1052-b175-800e1f0ee10b.png)


先ほど作成したカスタム動作「`REST`」が動作カテゴリにあるので、それをクリックします。

※作成した2つの動作もあります。

![③-7T-DASHケース.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624354/7bf818b8-8e29-884a-c098-f64ad7082f10.png)


:::note
再掲：
T-DASHの対向になるAPIは、実際にテストで使ったサイトAPIをここに公開するわけにはいかないので、テスト用のサイト [httpbin.org](https://httpbin.org/) を使います。
:::

このテストでは以下のREST APIを使用します。最後の200の数字がステータスコードで使用されます。
[https://httpbin.org/status/200](https://httpbin.org/status/200) 

動作にある「GET送信する」をクリックします。「設定値（設定値３）」が入力できるようになるので、そのセルに「`https://httpbin.org/status/200`」を入力します。

![③-8T-DASHケース.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624354/b2088dea-5a97-4ab6-6f38-bef8efd97995.png)


2行目を選択します（どのセルでも良いので動作を作成する行をクリックします）
動作にある「ステータスコードをチェックする」をクリックします。「設定値（設定値３）」が入力できるようになるので、そのセルに「`200`」を入力します。「保存する」をクリックします。


![③-8-2T-DASHケース.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624354/67331014-dd26-d03f-258e-3d2a14299190.png)




## 6-2.テストを実行する

6-1までで作ったテストケースを実行します。

「選択したテストを実行する」をクリックします。

![④-1テスト実行.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624354/bb518f50-4f49-fdab-9c37-acc658dc4c6c.png)

![④-2テスト実行.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624354/49a482dc-d73d-80cd-b0c7-40ef003b77d8.png)

テストが完了したら「テストレポート」を開くをクリックします。

![④-3テスト実行.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624354/0379ef99-3763-47ad-749f-9de4a8517851.png)

レポートが表示されます。

最低限の情報だけのシンプルなレポートです。必要な情報は揃っているので十分だと思います。

![④-4テスト実行.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624354/b667dd02-b01f-3901-ebca-54ea9884db71.png)


# 7.データドリブンの設定

今回はデータドリブンは割愛します。前回の記事と同じやり方で簡単に設定してバリエーションのテストが可能でした。

# 8.T-DASHの良い点、悪い点

## 8-1.T-DASHの良い点

* RobotFrameworkで簡単に動作が増やせる
  * RobotFrameworkにはSSHLibraryやSOAPLibrayなど多くのテスト用ライブラリが準備されている
* 開発できるエンジニアが動作を増やして、スキルのないテスターの人たちに配布して自動テストを布教できる
  * 標準の動作だけでは、テストできない場合も、誰かが動作を作って配布するだけで、自動テストを作れる人を増やせる点は非常に良いと思う。
  * 配布も作ったカスタム動作をエクスポートできるので簡単そうな印象です。

## 8-2.T-DASHの悪い点

悪いというわけではありませんが、躓いた点や使いにくいと感じた点について書きます。

* SetupやTeardownを設定できない？
  * 前回も書きましたが、やはりこれができないのは、Setupのテストケース、Teardownのテストケースを作らねばならず、かならず実行される保証がないので使いにくい
* カスタム動作の確認をカスタム動作をつくりながら実行できない
  * 前回も書きましたが、今回もカスタム動作の確認が面倒だと感じました。

# 9.さいごに

有料のツールははじめてではありませんが、これだけ使えて3,960円はかなりオトクだと思います。開発できるスキルがあれば、自動化の可能性は無限大だというのが、個人的に面白いと思います。

コンセプトを維持しつつ、ユーザーの声を反映している良いツールだと思うので、今後のアップデートにも期待大です。

前回と同じコメントになりますが、本当に使いやすい、広めやすいツールだと感じます。