はじめに
業務で行っている総合テストの一部を自動化したい!
と、チーム目標として取り組みを行い、
問題となった点・良かった点をお伝えしたいと思います。
使用したもの
・Windows10 Chrome
・Googleスプレッドシート
・Google Apps Script(GAS)
・Python
・Selenium(WebDriver)
テストの概要
データ変換アプリの総合テスト
入稿データをもとにデータ変換アプリを実行し、
WEBサイトに期待値通りの値が表示できているかを検証します。
テスト手順
・テスト設計
・テストデータ作成
・テスト実行
⎿データ変換アプリ実行
⎿WEBサイト画面目視確認 ※ココを自動化
⎿WEBサイト画面キャプチャ(エビデンス)取得 ※ココを自動化
予め設定した期待値とWEBサイトに表示された値を自動比較
・確認したい値をスプレッドシートに記載
・Selenium(WebDriver)、gspreadライブラリを使用しスプレッドシートに記載した値の抽出とWEBサイトに表示されている値を抽出して比較
・比較した結果をログ出力
※下記、値比較一部抜粋
#==========エビデンスチェック関数(**)==========#
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
・画面キャプチャ(エビデンス)取得
※下記、エビデンス取得一部抜粋
#-----------------エビデンス取得処理-----------------#
#開始ログ出力
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 != "取得済み":
問題となった点
・テストメンバーは日々開発業務を行っておらずブラックボックスメイン
⎿開発担当者の協力でテストツールを作成
・今までなかったテストツール用のデータ作成が必要となった
⎿データ変換アプリ用のデータ作成にプラスしてテストツール用データ作成が必要となり誰も使わなくなった
問題点をチーム力で解決
効率化の為のテスト自動化なのに、新たなデータ作成時間が増えることはナンセンスなので
テスト設計書から自動でテストツール用データ作成が行えるようにGASを使い改善。
・GASの調査、Script作成
・テスト設計書のフォーマット改善
・メンバーでそれぞれ役割を別け分担する
・日々1~2時間の取り組み時間を設けて進捗
・オンラインMTGで顔出しと積極的参加によりチーム力向上
おわりに
無事運用に乗せる目途が立ってめでたしなのですが、
良かった点はチーム一丸となって目標を達成できたことです。
通常のプロジェクト完了にはない、チーム目標達成の感動がありました。
デモンストレーションの際に鳥肌が立ち、メンバー全員の笑顔が印象的でした!
今後の目標としてはデータ変換アプリ用のデータ作成もテスト設計書から自動で行えるよう取り組む予定です。
チーム一丸となって達成した際の感動を再び味わいたいと思います!