[T-DASH] テスト自動化でデータベースから情報を取得して検証する

# Outline

テスト自動化で、検証に使いたいテストデータの情報をデータベースから取得するケースを考える。
例えば、ログイン情報等をDBに入れて、そこから参照する。もしくは、ログイン情報を更新した時に、UIだけではなく、DBに正しく値が反映されたかを更新したい場合、などである。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/1e081ae6-8858-c5f4-3344-501833b298c2.png)

今回、テスト自動化ツール T-DASHでデータベースに接続し、値を取得する方法に関して記述する

※ T-DASH version 4.2.001 を用いて構築したものである。

https://service.valtes.co.jp/t-dash/?qiita

# 技術的な情報

T-DASHのカスタム動作を作成し、データベースに接続をする
そのカスタム動作を定義するにあたり、robot frameworkのlibrary Database-Libraryを用いた。

https://marketsquare.github.io/Robotframework-Database-Library/


また、接続可能なデータベースは以下のページを参照のこと。
データベースに合わせてライブラリをインストールする必要がある

例
| DataBase | Library |
|:-----------|:------------|
| MySQL       | pymysql        | 
| PostgreSQL       | psycopg2         | 
| Oracle       | cx_Oracle        | 

https://wiki.python.org/moin/DatabaseInterfaces

本記事ではMySQLを使ったものになっている。


# 前提条件

今回のデータベースは以下の構成となっている


DB setting
| 項目 | 値 |
|:-----------|:------------|
| DB Name       | tdash        | 
| DB User       | tdash        | 
| DB Password       | tdash        | 
| DB Host       | tdash        | 
| DB Port       | 3306        | 

Schema : quintee_user_tbl
| 項目 | 定義 | 意味 |
|:-----------|:------------|:------------|
| id       | INT NOT NULL        | ユーザーの連番 |
| name       | VARCHAR(64)       | ユーザー名 |
| email       | VARCHAR(128)   Primary Key    | Email Address |
| password       | VARCHAR(128)       | Password |

# T-DASHの手順

## カスタム動作

以下設定内容を DB.yamlのファイル名で保存する
```
ACT-CAT-CUSTOM-350ce588-6e5f-466b-a8b6-d65302624b45:
  action_category_name: DB
  icon: ''
  color: '#b6d83b'
  custom_data:
    file_name: DB
    pip_list:
    - robotframework-databaselibrary
    - PyMySQL
    - cryptography
    library_list:
    - DatabaseLibrary
  actions:
    ACT-CUSTOM-6d171599-6ba8-420a-b19f-e51f2be75ef7:
      action_name: MySQLからユーザーのパスワードを取得する
      action_type: operation
      action_format: ユーザーのemail「設定値1」のパスワードを変数share_passwordに入れる
      action_note: ''
      action_args:
      - value1
      action_def:
      - - '${DBName} = '
        - Set Variable
        - tdash
      - - '${DBUser} = '
        - Set Variable
        - tdash
      - - '${DBPass} = '
        - Set Variable
        - tdash
      - - '${DBHost} = '
        - Set Variable
        - localhost
      - - '${DBPort} = '
        - Set Variable
        - '3306'
      - - Connect To Database
        - pymysql
        - ${DBName}
        - ${DBUser}
        - ${DBPass}
        - ${DBHost}
        - ${DBPort}
      - - ${output} =
        - Query
        - SELECT * FROM quintee_user_tbl WHERE email = '${value1}';
        - \
        - 'True'
      - - Log
        - ${output}
      - - '${password} = '
        - Set Variable
        - ${output[0]}[password]
      - - Set Suite Variable
        - ${share_password}
        - ${password}
      - - Disconnect From Database
```

次に、作成されたDB.yamlをT-DASHの動作定義 -> カスタム動作 -> カスタム動作をインポート にてインポートする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/6afd79ad-a83b-c2b1-0507-5f149dd11085.png)

実際にインポートされた設定内容を開く

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/fa0b575f-8384-e86a-89f1-4e7c2f68cfbe.png)


ライブラリを追加をクリックし、ライブラリの情報を確認する。
今回、MySQLを使うため、"pip install PyMySQL" となっています。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/66ac1114-fa06-5492-8f10-e79253e8f271.png)

もし、他のデータベース、例えばPostgreSQL  (library = psycopg2)を使いたい場合
以下のように、必要なライブラリを pip installする必要がある。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/f043aade-5222-d147-a71d-001de1c21b0a.png)

robot frameworkのシナリオの意味
利用者によってカスタマイズする場所は、9～13行目にあたる。
SQLのQueryを利用者に合わせて変更し、取得した値を変数に渡し、T-DASHのテストケースで利用する。
今回の例では、quintee_user_tblのテーブルから、emailがカスタム関数の引数にあたる${value1}と一致するデータを取得する
```
SELECT * FROM quintee_user_tbl WHERE email = '${value1}'
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/70ffdd72-ecde-db82-f55d-e5fa5d924e1b.png)

## スクリプト

シナリオは以下の通り
1. ログインページを開く
2. メールアドレスを入力する
3. カスタム動作「DBからパスワードを取得する」で、引数にユーザーのemail addressを渡す。結果は変数${share_password}に格納される
4. パスワードに${share_password}を入力する
5. ログインをクリックする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/4a078a15-d51f-0192-8050-343800f537d6.png)

## 参考

今回はDBから情報を取得（SELECT)の例でした。
そのため、<B>Query</B>のkeywordを用いました。
データ更新(Update)や削除(Delete)を行いたい場合、 <B>Execute SQL String</B>を用います
option sansTran はトランザクションのコミット必要とするか否かを定義します

以下がDELETE SQLを用いた例になります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/09b77af7-68da-7cfa-c7b1-1d5d99e72851.png)


参考

https://marketsquare.github.io/Robotframework-Database-Library/