5
Help us understand the problem. What are the problem?

テスト自動化取組により得られた感動

はじめに

業務で行っている総合テストの一部を自動化したい!
と、チーム目標として取り組みを行い、
問題となった点・良かった点をお伝えしたいと思います。

使用したもの

python.pngスプレッドシート.pngselenium.pngGAS.png
・Windows10 Chrome
・Googleスプレッドシート
・Google Apps Script(GAS)
・Python
・Selenium(WebDriver)

テストの概要

データ変換アプリの総合テスト
入稿データをもとにデータ変換アプリを実行し、
WEBサイトに期待値通りの値が表示できているかを検証します。
convert.png

テスト手順

・テスト設計
・テストデータ作成
・テスト実行
⎿データ変換アプリ実行
⎿WEBサイト画面目視確認 ※ココを自動化
⎿WEBサイト画面キャプチャ(エビデンス)取得 ※ココを自動化

値自動比較&エビデンス自動取得ツールの作成!
hikaku.png  and.png  kamera.png

予め設定した期待値とWEBサイトに表示された値を自動比較

・確認したい値をスプレッドシートに記載
・Selenium(WebDriver)、gspreadライブラリを使用しスプレッドシートに記載した値の抽出とWEBサイトに表示されている値を抽出して比較
・比較した結果をログ出力
※下記、値比較一部抜粋

sample.py
#==========エビデンスチェック関数(**)==========#
def CheckMethod(driver,intStockNum,strNo,lstCheckData,intMaxStockRow,intCheckStartRow,lstHtmlFirstCol,lstHtml):
    """
    エビデンスチェック関数 \n
    引数1:セレニウムドライバー
    引数2:**の番号[i]
    引数3:**番号
    引数3:**情報のリスト
    引数4:**情報のリストの最大行
    引数5:チェック開始行
    引数6:**の最初の行のリスト
    引数7:**_HTMLのリスト
    """    #ログ出力
    OutPutTextShowTime("**番号「" + strNo + "」の**チェック処理を開始します。")

    i = intStockNum
    blSkipCheckOption = False
    blOptionCheckList = False
    imageComment = False
    PhotoCnt = 0
    Oldx = 1
    DBCoonection = False
    ArrowCheck = False

    for intCheckRow in range(intCheckStartRow,intMaxStockRow):
        #チェックする値の取得
        strCheckData = lstCheckData[intCheckRow][i]
        #チェックする項目名の取得
        strItem = lstCheckData[intCheckRow][0]        
        #チェック項目が装備確認の場合
        if strItem == "**_装備確認":
            #行う以外の場合はスキップ
            if strCheckData != "行う":
                blSkipCheckOption = True
            blOptionCheckList = True

            continue

・画面キャプチャ(エビデンス)取得
※下記、エビデンス取得一部抜粋

sample.py
#-----------------エビデンス取得処理-----------------#
#開始ログ出力
OutPutTextShowTime("エビデンス取得処理を開始します。")
#ヘッドレス用オプション
options = Options()
options.add_argument('--fe-scrollbars')
options.add_argument('--disable-gpu')
options.add_argument('--ignore-certificate-errors')
options.add_argument('--ignore-ssl-errors')
options.add_argument('--hide-scrollbars')
options.add_argument('--log-level=3') #追加

#デバッグ:クロームドライバーのパスを表示
if strDebugMode == "True":
    OutPutTextShowTime("DebugInfo:[ドライバーパス]:" + strWebDriverPath)

#ドライバーのパス設定
if strCheckShowChrome == "True":
    #表示ありの場合、ヘッドレスオプション設定を読み込みしない
    # driver = webdriver.Chrome(executable_path=strWebDriverPath,options=options)
    driver = webdriver.Chrome(ChromeDriverManager().install(),options=options)
    OutPutTextShowTime("ヘッドレス=あり 起動")
else:
    options.add_argument('--headless')
    # driver = webdriver.Chrome(executable_path=strWebDriverPath,options=options)
    driver = webdriver.Chrome(ChromeDriverManager().install(),options=options)
    OutPutTextShowTime("ヘッドレス=なし 起動")

#カレントウインドウを最大化する
driver.maximize_window()

strOldClientId = "NotLogin"

#デバッグ:**のURLを表示
if strDebugMode == "True":
    OutPutTextShowTime("DebugInfo:[** URL]:" + str**Url)

for i in range(1,intColCount):

    #エラーが発生した場合、次の**へ移る用のフラグ
    blErrCountinue = False
    #**IDの取得を行う
    strClientId = cell_list[intClientIdRow][i]
    #エビデンス番号用の値を取得
    strEviNo = cell_list[intEvidenceNo][i]
    #エビデンス取得処理
    strGetEvidence = cell_list[intGetEvidenceRow][i]
    #データチェック処理
    strCheckEvidence = cell_list[intCheckEvidemceRow][i]
    strEvicenceAcquisitionStatus = ""
    #エビデンス取得状態
    if intEvicenceAcquisitionStatus != -1:
        strEvicenceAcquisitionStatus = cell_list[intEvicenceAcquisitionStatus][i]

    #エビデンスの取得が「行う」の場合以下処理を実施 取得済みは再度取得を行わない用に
    if strGetEvidence == "行う" and strEvicenceAcquisitionStatus != "取得済み":

問題となった点

・テストメンバーは日々開発業務を行っておらずブラックボックスメイン
⎿開発担当者の協力でテストツールを作成
・今までなかったテストツール用のデータ作成が必要となった
⎿データ変換アプリ用のデータ作成にプラスしてテストツール用データ作成が必要となり誰も使わなくなった:cry:

問題点をチーム力で解決

効率化の為のテスト自動化なのに、新たなデータ作成時間が増えることはナンセンスなので
テスト設計書から自動でテストツール用データ作成が行えるようにGASを使い改善。

・GASの調査、Script作成
・テスト設計書のフォーマット改善
・メンバーでそれぞれ役割を別け分担する
・日々1~2時間の取り組み時間を設けて進捗
・オンラインMTGで顔出しと積極的参加によりチーム力向上

おわりに

無事運用に乗せる目途が立ってめでたしなのですが、
良かった点はチーム一丸となって目標を達成できたことです。
通常のプロジェクト完了にはない、チーム目標達成の感動がありました。
デモンストレーションの際に鳥肌が立ち、メンバー全員の笑顔が印象的でした!
今後の目標としてはデータ変換アプリ用のデータ作成もテスト設計書から自動で行えるよう取り組む予定です。
チーム一丸となって達成した際の感動を再び味わいたいと思います!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
5
Help us understand the problem. What are the problem?