T-DASHでDB登録確認までテスト自動化してみた

# この記事関して
テスト自動化ツールT-DASHでデータ入力からDBへの登録確認までのやり方を記載しています。


# テスト対象
こちらの記事の掲示板アプリを利用させて頂きました。
https://qiita.com/tomson784/items/a5ad6e47643449dffd18
https://github.com/tomson784/bbs
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742767/edd779c8-e3a8-ac73-5b1c-44efa375d7f0.png)

# 自動化するシナリオ
1.掲示板アプリで投稿内容と名前を入力して送信
　(データドリブン機能で入力データを変えて反復テストをする)

2.入力されたデータがDBに登録されているか検証する
　(カスタム動作機能でキーワードを独自に作成する)

![シナリオ.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742767/b5a9bcc1-7d1c-3ac2-8601-e99d6a67b8fa.gif)

# 1.掲示板アプリで投稿内容と名前を入力して送信を行う手順を作成

`1.T-DASHで投稿内容と名前を送信するまでのシナリオ作成する`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742767/042c9cda-7c87-a313-6c97-9c255ba27d07.png)

「Setup操作」と「掲示板画面で送信した情報がDB登録されていること」でテストケースを分けているのは
「掲示板画面で送信した情報がDB登録されていること」のテストケースで反復テストをしたいため。

`2.投稿と名前の入力値をデータドリブン設定する`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742767/5c3cef0a-7625-7b82-fad8-207b0465b358.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742767/5148812c-7c25-ab96-58ea-b450d3c063a9.png)
外部ファイル(xlsx,csv)からもデータドリブン入力値の設定も可能
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742767/32496bc7-4711-3030-9ace-32594c812a37.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742767/323d8c6b-402d-b4a5-a635-be4ce835e9bd.png)


# 2.入力されたデータがDBに登録されているか検証を行う手順を作成

`1.DBへSelectクエリするPythonコードを作成する`
今回はローカルのDB(sqlite3)へのアクセスにしています。
PythonでのDBへの接続方法に関しては調べてみてください。

```dbconnect.py
import sqlite3
from robot.libraries.BuiltIn import BuiltIn

def validateNameColData(name):
    dbFilePath = "C:/build/flasksample/sample-DBApp/bbs/test.db"
    try:
        conn = sqlite3.connect(dbFilePath)
        cur = conn.cursor()
        cur.execute('SELECT * from article WHERE name=?',(name,))
        # 入力した名前がDBのarticleテーブルのname列にあるかチェック
        # 無ければNGとしてFalseを返す
        if len(cur.fetchall()) == 0:
            return False
        return True
        
    except Exception as e:
        print(e)
        return False
    finally:    
        cur.close()
        conn.close()
        
def validateColArticleData(article):
    dbFilePath = "C:/build/flasksample/sample-DBApp/bbs/test.db"
    try:
        conn = sqlite3.connect(dbFilePath)
        cur = conn.cursor()
        cur.execute('SELECT * from article WHERE article=?',(article,))
        # 入力した投稿がDBのarticleテーブルのarticle列にあるかチェック
        # 無ければNGとしてFalseを返す
        if len(cur.fetchall()) == 0:
            return False
        return True
    except Exception as e:
        print(e)
    finally:    
        cur.close()
        conn.close()
```

`2.カスタム動作画面でDB登録を検証するキーワードを作成する`
**動作名：**「ARTICLEテーブルへの登録を検証する(NAME)」
**フォーマット：**「設定値」の値でARTICLEテーブルのNAME列に登録されていることを検証する

**動作名：**「ARTICLEテーブルへの登録を検証する(ARTICLE)」
**フォーマット：**「設定値」の値でARTICLEテーブルのARTICLE列に登録されていることを検証する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742767/22ebffbc-cc1c-abc3-ef0f-1335c2fbb06f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742767/b1ca8a82-1d5d-cfba-1259-0653c062c2ee.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742767/f87bb41a-c39b-ec0a-ce9d-8f55219978f3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742767/445d2827-f60d-2b48-85ed-91ecf239bd91.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742767/3f1284c1-6e54-2cae-1221-0438203a6437.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742767/e499fbc4-f20e-bac1-506a-4377188595c3.png)

```${isValidate}=	validateNameColData	${value}```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742767/53760234-50a5-154d-bd9a-22867b445895.png)
https://robotframework.org/robotframework/latest/libraries/BuiltIn.html
```Run Keyword If	'${isValidate}' == 'False'	Fail	TESTFAIL```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742767/050d91b9-847d-a510-80f2-4dd780accd9e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742767/28323ca5-d4b3-6917-c7ed-177d4de5bf77.png)


`3.作成したDB登録を検証するキーワード手順を追加する`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742767/80632b45-6ab4-452b-1f4f-1255268a9b93.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742767/30a74b3f-2f68-adb6-aa50-a87d6ffd3d23.png)


# 3.テスト実行して結果を確認する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742767/0d45c0af-3298-3b44-b1e2-9afb23d58dd5.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742767/01f99d3b-ed90-561e-4228-6d6eee732c62.png)



# 最後に
DBを初期化する処理も最後にあった方がいいかも。
より良いやり方があればまた追記します。

RobotframeworkのDatabaseLibraryを使用した方が楽かもです。
https://franz-see.github.io/Robotframework-Database-Library/api/0.5/DatabaseLibrary.html
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2742767/dfae545d-2baa-b0dc-e5ca-ee2e5d8cd877.png)