T-DASHをREST APIのテストで使ってみた（カスタム動作の可能性）

# 1.はじめに

**T-DASHをREST APIのテストで使ってみた** で２つの記事を投稿しました。このプロセスを通じて、T-DASHの使いやすさについて深く理解することができました。 **カスタム動作** の作成について、備忘録を兼ねて使い方についてのまとめ記事を書こうと思います。

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

https://qiita.com/troilus1112/items/a273eb31abd8f4246882


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

# 2.T-DASHとは

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

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


# 3.カスタム動作とは

公式サイトの [機能ページ](https://service.valtes.co.jp/t-dash/function) の「カスタム動作の開発」には以下の記載があります。

> あらかじめ設定された動作以外にも、ユーザー自身でオリジナルの動作をPython、RobotFrameworkを使用して定義・設定できる機能です。この機能を使用することでDB、API、モバイルアプリ、WindowsアプリなどPythonベースでできるものは全てテスト自動化が可能となります。

Python、RobotFrameworkで実現できるテストはT-DASHで実行できることになります。


:::note info
今回２つの記事の投稿を通じて「T-DASH」に関する深い洞察を得ることができました。もともと「T-DASH」はUIテストの自動化ツールの印象でしたが、実はそれ以上の可能性を秘めていることがわかりました。
この発見はT-DASHのテスト自動化の分野における応用範囲を大きくひろめるものではないかと思います。
:::



# 4.カスタム動作の作り方

公式サイトのチュートリアルの [カスタム動作を作成しよう / Robot Frameworkで作成](https://service.valtes.co.jp/t-dash/function/tutorial/custombehavior_vol_002) が非常にわかりやすく説明されているのでこれで十分かと思います。

今回記事を書くために、学習した内容や役に立ちそうな情報を書きます。

## 4.1.RobotFrameworkの書き方

[Robot Framework クイックスタートガイド](https://robotframework-ja.readthedocs.io/ja/latest/quickstart/QuickStart.html) を見るとだいたいわかります。その中から、おそらく高い頻度で使う可能性があるコードの書き方について紹介します。


### 変数の種類

変数には３種類あるようです。

| 種類 | 書き方 | 補足 |
|---|---|---|
| スカラ変数 | ${変数名} |  |
| リスト変数 | @{リスト名} | 個別アクセスは `@{リスト名}[0]`,`@{リスト名}[1]` |
| 辞書変数 | &{辞書名} | 個別アクセスは `&{辞書名}[name]`、または`${辞書名.name}` |
| 環境変数 | %{環境変数} | `%{JAVA_HOME}` |


### 条件文の書き方

RobotFrameworkでは比較演算子を使って条件文を作れます。
and や or も使用でき、プログラム開発できるかたは特に違和感がないと思います。and や orの場合は区切りはスペース1つで、下の表では２の列にまとめて入力しなければならないところに注意します。

|1|2|3|4|
|---|---|---|---|
|IF|${country}=="Japan"|||
||Log to console|日本||
|ELSE IF|${country}=="Koria"|||
||Log to console|韓国||
|ELSE||||
||Log to console|その他||
|END||||


### ループの書き方

繰り返しの書き方です。

|1|2|3|4|
|---|---|---|---|
|FOR|${index}|IN RANGE|10|
||Log to console|${index}||
|END||||

配列の要素を先頭から最後まで順番に取り出す書き方です。

|1|2|3|4|
|---|---|---|---|
|FOR|${item}|IN |@{ITEMS}|
||Log to console|${items}||
|END||||


## 4.2.RobotFrameworkの標準ライブラリ

### BuiltIn

[キーワードドキュメント](https://robotframework.org/robotframework/latest/libraries/BuiltIn.html) はこちらを参照してください。

|キーワード|用途|
|---|---|
|Set Variable|変数への値の代入、`=`での代入はできないようなので注意|
|Set Suite Variable|テストケースを跨いで変数を活用する|
|Set Global Variable|テスト全体で変数を活用する|
|Skip If|条件を満たしたときにテストをスキップする|
|Create List|リスト配列を作る|
|Create Dictionary|辞書を作る|
|Evaluate|Pythonならサクッとかけるのにってそう|

BuiltInは上記以外にもたくさん使いそうです。

### String

[キーワードドキュメント](https://robotframework.org/robotframework/latest/libraries/String.html) はこちらを参照してください。


|キーワード|用途|
|---|---|
|Split String|文字列をリストに変換する|
|Replace String|文字列を置換する|
|Get Substring|文字列の一部を切り出す|
|Get Regexp Matches|正規表現でマッチしたものを抜き出す。（Regexp系はたくさん使うかな）|

BuiltInのEvaluateを使いそうですが、一通りのキーワードは準備されています。

### Colleaction

[キーワードドキュメント](https://robotframework.org/robotframework/2.1.2/libraries/Collections.html) はこちらを参照してください。

|キーワード|用途|
|---|---|
|Get Slice From List|リストを切り出す|
|List Should Contain Value| リストに値が含まれるか |
|Combine Lists| リストを連結する |

リスト、辞書操作に必要なキーワードは準備されています。

## 4.3.RobotFrameworkのテストライブラリ

### UIを使うWebアプリケーションのテストライブラリ

|キーワード|用途|
|---|---|
|[SeleniumLibrary](https://robotframework.org/SeleniumLibrary/SeleniumLibrary.html)|Selenium WeDriverモジュールを使ってWebブラウザを制御|
|[Browser](https://marketsquare.github.io/robotframework-browser/Browser.html)| PlayWrightでのWebテスト |

### 通信のテストライブラリ

|キーワード|用途|
|---|---|
|[REST](https://asyrjasalo.github.io/RESTinstance/)|REST APIのテスト|
|[SOAPLibrary](https://raw.githack.com/Altran-PT-GDC/Robot-Framework-SOAP-Library/master/Doc/SoapLibrary.html)|SOAP APIのテスト|

### その他のテストライブラリ

|キーワード|用途|
|---|---|
|[SSHLibrary](http://robotframework.org/SSHLibrary/SSHLibrary.html)|SSH、SFTPを使うライブラリ|
|[DatabaseLibrary](https://marketsquare.github.io/Robotframework-Database-Library/)|データベースのテストライブラリ|
|[CaptchaLibrary](https://joshuariveramnltech.github.io/captchalibrary/)|CAPTCHA突破ライブラリ、QRデコード|
|[OCRLibrary](https://bendurston.github.io/OCRLibrary.html)|OpenCVを使ったOCRライブラリ|


少し探してみただけで、テストで使えそうなライブラリがたくさん出てきます。テストで本当に使えるかは、試してみないとわかりません。


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

T-DASHのカスタム動作はスプレッドシートに入力して作成できます。
RobotFrameworkを使ってのキーワード作成に親和性はとても高いと思います。





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

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

* RobotFrameworkで簡単に動作が増やせる
  * RobotFrameworkにはSSHLibraryやSOAPLibrayなど多くのテスト用ライブラリが準備されている
  * Pythonも併用すると自動化できないものは少ないのでは？と思います。
* 自動テストを構築する人を増やせる
  * 開発できるエンジニアが動作を増やして、スキルのないテスターの人たちに配布して自動テストを構築できる
  * 自動テストを作れる人を増やせる点は非常に良いと思う。
* 価格がオープンになっている
  * [T-DASH料金表](https://service.valtes.co.jp/t-dash/pricing)
* 学習コストが低い
  * なんとなく触ってみたら自動化できた！が体験できたツールでした。
  * 細かいところはまだまだわからない部分も多いですが、インストールして使用できるまで、2時間程度あれば十分かと思います。
  * 公式サイトにチュートリアルがあるので、それをみれば使えるようになると思います。
* 自動テストを推進するのに、価格・機能面でも有力候補になるツール
  * RobotFrameworkが強力なのは知っていたのですが、複数人で使用するとなったときに、みな好き勝手に拡張していくので推進できませんでした。このツールなら拡張したものも、エクスポートとインポートで統一したものにできるので、とても良いと感じます。

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

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

3回連続ですが、この2つに付きます。

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

# 9.さいごに

カスタム動作の作成を中心に記事を書きましたが、T-DASHの潜在能力を体験できました。まずは個人で使ってみようかと思います。

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

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