テスト自動化ツール『T-DASH』をよく見てみよう！

# 0.はじめに

先日、[「テスト自動化ツール『T-DASH』で量子回路の実行に挑戦」](https://qiita.com/ksj555/private/2f9a093e378383afc620)という記事を書きました。
私の力不足でうまくいかない部分もあったのですが、思い返してみると動作メニューの内容など、よくわかっていないところや理解せずに使っていたところがいくつかありました。

機能をもっとよく理解できれば、より便利に使えるだろうと思いましたので、今回はT-DASHの機能について、もう少し突っ込んで見ていきたいと思います。終盤では正式版としてアナウンスされている機能についても簡単に確認してみます。

## 0-1.T-DASHとは

T-DASHは、[公式サイト](https://www.t-dash.io/)で次のように説明されています。

> T-DASHは、「T-DASHはWebアプリケーションの動作確認・検証を**コードを書かずカンタンに作成・実行できるテスト自動化ツール**です。

また、主な特徴として４つの点があげられています。

1. 見やすい**ダッシュボード**
1. テストの回数**無制限**
1. **無料**でも利用可能 ※機能制限や広告あり
1. **プロジェクト別**で管理

2021年12月現在はOPENβ版として無料トライアルができるようになっています。
その後は正式版の無料トライアル期間を経て、有償または無料プランで継続利用ができるそうです。

# 1.T-DASHのプロジェクト構造

最初に、前回は十分に確認できていなかったプロジェクト構造を整理してみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494282/8f0a9e7b-1aa4-c993-d8f1-40e9ad5f70dc.png)

|項目|概要|
|---|---|
|プロジェクト|**管理の最大単位**となっています。<BR>実際の案件単位をそのまま当てはめてもよいですが、テストシナリオの数が多すぎると管理がややこしくなりそうなので、**サブシステムやそれ以下の適切な単位で管理**できるとよさそうです。|
|テストシナリオ|**プロジェクト配下に複数のテストシナリオを保持**できます。<BR>ユースケース単位で管理できるとよさそうです。|
|テストケース|**テストシナリオごとに複数のテストケースを保持**できます。<br>テストケースの中では「テスト手順」として実際の動作を細かく設定していきます。ユースケース内でテストしたい**細かな操作ごとに作成**するとよさそうです。|
|画面定義|テストケース（テスト手順）の作成で動作を指定する際にはテスト対象の画面と要素（入力フィールドなど）を指定する必要があります。<BR>この機能では、テストケースの作成時に指定する**画面や要素を事前に定義することができます**。|
|動作定義|デフォルトで登録されている「**動作**」および任意作成できる「**動作セット**」の定義です。<br>動作セットは、テストケースにおける複数のテスト手順をひとつの「動作セット」としてまとめることができます。<br>例えばログインの一連処理を動作セットにまとめておくことにより、**複数のテストケースで同じ手順を何度も使うことができます**。（テストケースごとに同じ処理を組まずに済む）|

全体的にシンプルで分かりやすい構造になっていました。
機能が複雑になると実現したいことが増えてきますが、一方で学習コストや管理コストがあがってしまうこともありますので、できるだけシンプルなままでいてほしいなと思います。

# 2.テストケースの動作

次に、テストケース（テスト手順）で指定できるデフォルトの「動作」を見ていきたいと思います。これらを使いこなせればWebアプリのテスト自動化がバリバリ組めるようになるはずなので、何ができるのかしっかり理解しておきたいところです。

テストケース画面の選択リストは下図のようになっています。順番に見ていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494282/8fac7593-7a05-9719-d978-fec3b592f16f.png)

注：OPENβ版で確認しています。今後変わっていく可能性があります。

## 2-1.ブラウザ制御

ブラウザを開く、閉じるといった標準的な動作です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494282/92c7686e-fc28-71fa-e455-d7cbfe0eb245.png)

|No|項目|概要|
|---|---|---|
|1|画面のURLをブラウザで開く|「画面定義」で定義されている画面のURLを基にブラウザを開きます。<br>**定義ありきの動作**ということになります。|
|2|URLをブラウザで開く|No.1 に似ていますが、こちらは**テスト手順内でURLを直接指定**しブラウザで開きます。|
|3|現在のブラウザでURLにアクセスする|既に開いているブラウザで指定したURLを開きます。<br>**前提処理としてNo.1 または No.2 が必要**です。|
|4|ブラウザを閉じる|ブラウザを閉じます。<br>当然ですが、事前にブラウザを開いていることが前提です。|
|5|全てのブラウザを閉じる|開いているすべてのブラウザを閉じます。|
|6|ブラウザバックする|ブラウザバック（前の画面に戻る）を行います。<br>事前に画面遷移があることが前提となります。|
|7|ウィンドウを選択する|アクティブになっているブラウザに複数のタブがある場合、設定値で指定するタブを開きます。<br>**ブラウザが開いていること、複数のタブがあること、が前提**となります。|
|8|最新のウィンドウに切り替える|最後に開いたウィンドウをアクティブにします。<br>最新のウィンドウから何かしらの確認（検証）のため任意のウィンドウ選択（No.7）を行った後、最新ウィンドウに戻るようなケースで使えそうです。|
|9|ページをリロードする|現在のページをリロードします。<br>**リロードしないと表示情報が更新されない場合**などに使えそうです。|

## 2-2.入力操作

入力操作の基本的な機能となっています。一部入力できない文字があるので注意が必要です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494282/cad2430a-56f7-65a8-669c-355e9bfc6475.png)

|No|項目|概要|
|---|---|---|
|10|テキストを入力する|指定した要素に任意のテキストを入力できます。<br>但し、**設定値に「改行、$、{、}」は入力できません。**|
|11|キーを入力する|指定した要素に対してキー入力ができます。<br>但し、設定値に**「$、{、}」は入力できません。**|
|12|テキストを取得する|指定した画面要素のテキスト情報を取得します。<br>取得したテキストの使い道（使い方）はわかりませんでした。|

## 2-3.マウス操作

クリックだけでなくドラッグ＆ドロップがあるのは今時の機能らしいです。
ドラッグ＆ドロップはドロップ先の要素がうまく指定できないと使えないので、利用の際には注意が必要です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494282/e87212f9-ece4-3c8f-da89-4919621ca8b6.png)

|No|項目|概要|
|---|---|---|
|13|要素をクリックする|指定の画面要素をクリックします。**シンプルな操作**です。|
|14|要素が表示されていたらクリックする|指定の画面要素をクリックする点はNo.13と同じですが、**「要素が表示されていたら」という前提条件**が付きます。|
|15|送信ボタンをクリックする|指定の画面要素をクリックする点はNo.13と同じです。<br>違いはテスト手順の表示に「送信ボタンを」という文言が追加されることです。適切な動作を指定することで、**より分かりやすい（可読性の高い）テスト手順を作成することができます**。|
|16|遷移リンクをクリックする|指定の画面要素をクリックする点はNo.13と同じです。<br>No.15同様にテスト手順の表示が異なります。|
|17|ダブルクリックする|指定の画面要素をダブルクリックします。|
|18|マウスオーバーする|指定の画面要素にマウスオーバーします。<br>**マウスオーバーで表示が変わるようなケースで「スクリーンショットをを保存する」と組み合わせることで、後検証がしやすくなる**ものと思われます。|
|19|ドラッグする|指定の画面要素をドラッグします。<br>**後の処理で必ず No.20「ドロップする」を指定**します。|
|20|ドロップする|指定の画面要素にドラッグしたアイテムをドロップします。<BR>**No.19「ドラッグする」が前提処理**になります。||

## 2-4.選択操作

画面要素の選択操作です。チェックボックスとリストに対する操作になります。
ラジオボタンについては、画面要素のクリック機能で代替可能でした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494282/c0f119ef-a75a-5253-b8d2-c5420b804963.png)

### ■ チェックボックス関連

|No|項目|概要|
|---|---|---|
|21|チェックボックスを選択にする|指定の画面要素（チェックボックス）にチェックを入れます。|
|22|チェックボックスを未選択にする|指定の画面要素（チェックボックス）のチェックを外します。|

### ■ リスト関連

|No|項目|概要|
|---|---|---|
|23|ラベルを指定してリストを選択にする|指定の画面要素（選択リスト）で、ラベルを指定して選択します。<br>前提として**選択リストには画面表示される「ラベル」と内部処理で利用される「値」がある**ことを知っておく必要があります。|
|24|ラベルを指定してリストを未選択にする|指定の画面要素（選択リスト）で、ラベルを指定して選択を外します。|
|25|値を指定してリストを選択にする|指定の画面要素（選択リスト）で、値を指定して選択します。|
|26|値を指定してリストを未選択にする|指定の画面要素（選択リスト）で、値を指定して選択を外します。|
|27|全てのリストを選択にする|指定の画面要素（選択リスト）で、すべてを選択状態にします。|
|28|全てのリストを未選択にする|指定の画面要素（選択リスト）で、すべてを未選択状態にします。|

## 2-5.特殊操作

基本的なブラウザ操作以外の動作がまとめられています。
スクリーンショットの機能はテスト機能として重要です。アラートについては閉じる機能しかなく、選択ダイアログの場合の動作が気になるところです。（ＰＣ不調になり、試し切れず）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494282/552cbce1-e0c4-45dd-ddc3-c8f3129f4cdb.png)

|No|項目|概要|
|---|---|---|
|29|スクリーンショットを保存する|テスト手順の途中でスクリーンショットを取得し保存します。<br>**エビデンスの取得を自動化できる**ので便利です。<br>**画像はテストログの画面で表示・確認することができます**。画像ファイルはプロジェクトフォルダ内に入っています。|
|30|秒待機する|指定した秒数、テスト手順を一時停止します。<br>バック処理に時間がかかるような場合に使えそうです。（ex.DBへの反映を待たないと一覧表示を更新しても表示されない）|
|31|現在のアラートを閉じる|画面のアラート表示を閉じます。|
|32|画面の要素が表示されるまで待つ|指定の画面要素が表示されるまで待機します。<BR>非表示の画面要素があることが前提となります。|
|33|画面に要素が表示されなくなるまで待つ|指定の画面要素が非表示になるまで待機します。|

## 2-6.テキスト検証

ここから検証系に入ります。
「一致」または「部分一致」の確認が基本ですが、正規表現での検証動作がひとつあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494282/7912b3d0-a1a7-65a5-a830-e6421a20bf6b.png)

### ■ テキスト関連

|No|項目|概要|
|---|---|---|
|34|要素のテキストが一致するか検証する|指定する画面要素の**テキストが設定値と完全一致するかを確認**します。<BR>但し、テキスト関連の設定値に**「改行、$、{、}」は入力できません。**|
|35|要素のテキストが一致しないか検証する|指定する画面要素の**テキストが設定値と完全一致しないことを確認**します。|
|36|要素のテキストが値を含んでいるかを検証する|指定する画面要素の**テキストに設定値の値が含まれることを確認**します。|
|37|要素のテキストが値を含んでいないかを検証する|指定する画面要素の**テキストに設定値の値が含まれていないことを確認**します。|

### ■ テキストエリア関連

|No|項目|概要|
|---|---|---|
|38|テキストエリアの値が一致するか検証する|指定する画面要素（テキストエリア）の**テキストが設定値と完全一致することを確認**します。<BR>テキストエリアは改行を含む入力項目となります。<br>テキストエリア関連の設定値に**「$、{、}」は入力できません。**|
|39|テキストエリアの値が一致しないか検証する|指定する画面要素（テキストエリア）の**テキストが設定値と完全一致しないことを確認**します。|
|40|テキストエリアに値が含まれているか検証する|指定する画面要素（テキストエリア）の**テキストに設定値が含まれていることを確認**します。|
|41|テキストエリアに値が含まれていないか検証する|指定する画面要素（テキストエリア）の**テキストに設定値が含まれていないことを確認**します。|

### ■ テキストフィールド関連

|No|項目|概要|
|---|---|---|
|42|テキストフィールドの値が一致するか検証する|指定する画面要素（テキストフィールド）の**テキストが設定値と完全一致することを確認**します。<BR>テキストフィールドは改行を含まない入力項目となります。<br>テキストフィールド関連の設定値に**「改行、$、{、}」は入力できません。**|
|43|テキストフィールドの値が一致しないか検証する|指定する画面要素（テキストフィールド）の**テキストが設定値と完全一致しないことを確認**します。|
|44|テキストフィールドに値が含まれるか検証する|指定する画面要素（テキストフィールド）の**テキストに設定値の値が含まれることを確認**します。|
|45|テキストフィールドに値が含まれていないか検証する|指定する画面要素（テキストフィールド）の**テキストに設定値の値が含まれないことを確認**します。|

### ■ その他

|No|項目|概要|
|---|---|---|
|46|ページタイトルが一致するか検証する|ブラウザ表示している画面のページタイトルが、設定値と完全一致することを確認します。|
|47|テキストの値が正規表現にマッチするか検証する|ブラウザ表示している画面のページタイトルが、設定値の正規表現と一致することを確認します。|

## 2-7.表示・非表示検証

画面要素の表示／非表示に関する検証動作です。
特定のアクションによって画面要素が動的に変わる場合の検証に使えそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494282/51fcf495-f612-4156-c557-fc3902c7cfe1.png)

|No|項目|概要|
|---|---|---|
|48|要素が表示されているか検証する|指定する画面要素が表示されていることを確認します。|
|49|要素が表示されていないか検証する|指定する画面要素が表示されていない（非表示）ことを確認します。|

## 2-8.選択状態検証

画面要素の選択状態を検証する動作です。
特定のアクションをトリガーに、他の項目の選択状態が変わるような場合を想定しての機能かと思われます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494282/02fd999c-cd52-83a6-356b-8da6ef802c06.png)

### ■ チェックボックス関連

|No|項目|概要|
|---|---|---|
|50|チェックボックスが選択状態か検証する|指定する画面要素（チェックボックス）が選択状態であることを確認します。|
|51|チェックボックスが未選択状態か検証する|指定する画面要素（チェックボックス）が未選択状態であることを確認します。|

### ■ リスト関連

|No|項目|概要|
|---|---|---|
|52|リスト要素が選択されているか検証する|指定する画面要素（リスト）が（一つ以上）選択されていることを確認します。|
|53|リスト要素が一つも選択されていないか検証する|指定する画面要素（リスト）がひとつも選択されていないことを確認します。|

### ■ ラジオボタン関連

|No|項目|概要|
|---|---|---|
|54|ラジオボタンが選択されているか検証する|指定する画面要素（ラジオボタン）が選択されていることを確認します。|
|55|ラジオボタンが一つも選択されていないか検証する|指定する画面要素（ラジオボタン）がひとつも選択されていないことを確認します。|

## 2-9.URL検証

ブラウザURLの検証動作です。
画面遷移を伴う場合、最初に検証しておくとよさそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494282/1e69c791-319f-79af-905b-c7022e99ea4c.png)

|No|項目|概要|
|---|---|---|
|56|URLが一致するか検証する|設定値で指定するURLとブラウザのURLが**完全一致することを確認**します。|
|57|URLが部分一致するか検証する|設定値で指定するURLとブラウザのURLが**部分一致することを確認**します。<BR>**URLの一部がセッション等によって動的に変わる場合に有効**です。|

# 3.正式版について

正式版のアナウンスについては、[2021年12月15日にプレスリリース](https://www.valtes.co.jp/news/2021/202112153314)が出ていました。画像を引用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494282/f0a24c81-5013-f65b-9d81-4a3853ccd743.png)

追加機能は５つです。

1. プロジェクト共有
2. カスタム動作の開発
3. 画面項目のまとめて取得機能
4. データドリブン機能
5. 英語対応

最初の「**1.プロジェクト共有**」はGitHubを介してプロジェクトを共有するというものです。今時の開発には必須ですね。
「**2.カスタム動作の開発**」「**3.画面項目のまとめて取得機能**」では機能強化、ユーザービリティの向上が図られています。
「**4.データドリブン機能**」はバリエーションテストの機能です。[前回の記事](https://qiita.com/ksj555/private/2f9a093e378383afc620)で私も「あったらいいな」と思っていたものでしたが、早くも機能追加です。
「**5.英語対応**」はT-DASHのキャッチフレーズになっている「日本語でつくるテスト自動化」に反する気もしますが、英語対応によってターゲット市場は格段に大きくなります。日本企業での利用においては、オフショアや海外拠点の利用も含めたツールの統一がしやすくなるので、今時のツールとしてはこれもマストなのでしょう。

プランについては３つです。

1. フリープラン
1. スタンダードプラン
1. エンタープライズプラン

まず、**フリープラン**があるのはありがたい。**スタンダードプラン**でもリーズナブルな月額性のため、スモールスタートには良さそうです。とても戦略的な設定だと感じました。

# 4.おわりに

今回はT-DASHの全体像をはじめ、機能についていくつか見てきました。

T-DASHを使い始めて2日目ですが、機能は概ね把握できたように思います。前回の記事（[「テスト自動化ツール『T-DASH』で量子回路の実行に挑戦」](https://qiita.com/ksj555/private/2f9a093e378383afc620)）でも書きましたが、**全体的に簡単で使いやすく、学習コストが低い点は評価すべきポイント**だと改めて感じました。また、随所に販売戦略も垣間見えますので、**時間が経過していく中でさらに成熟していく**のだろうと思います。

フリープランもあることですし、また機会があれば触ってみたいと思います。
いろいろと見られて面白かったです ＼( 'ω')／