狠狠撸
Search
Submit Search
笔测础耻迟辞骋鲍滨等笔测迟丑辞苍ライブラリによる自动化支援
?
14 likes
?
18,483 views
H Iseri
7/24 STAR定例会
Read less
Read more
1 of 26
Download now
Downloaded 22 times
More Related Content
笔测础耻迟辞骋鲍滨等笔测迟丑辞苍ライブラリによる自动化支援
1.
笔测础耻迟辞骋鲍滨等笔测迟丑辞苍ライブラリによる自动化支援 2016/7/24 テスト自動化研究会 事例報告 井芹 洋輝 【アウトライン】 Part.1 PyAutoGUI
& PyUnitによるGUIベースのテスト自動化 (おまけ)Part.2 PyAutoGUI & PyUnit +色々なPythonライブラリ活用 (おまけ)Part.3 OpenCVによる現実空間のテスト自動化
2.
宣伝 ? U30テスト設計コンテスト(30歳以下のテスコン) 開催します! ?
チュートリアル開催中。募集は来月予定 ? 審査委員長を担当しています ? http://aster.or.jp/business/contest/rulebooku30.html
3.
Part.1 PyAutoGUI & PyUnitによる GUIベースのテスト自動化
4.
PyAutoGUIとは ? マウス操作、キーボード操作、スクリーンショット操作を自動化するPython 向けライブラリ ? https://pyautogui.readthedocs.io/ ?
コンセプト ? 可能な限りシンプルかつ直感的に使える ? どんな環境(e.g. win or mac or linux)でも同じように動く ? テスト自動化ツールというわけではないですが、お手軽に自動化ツールを 組めるため今回紹介
5.
PyAutoGuiの例:APIの例 import pyautogui pyautogui.moveTo(100, 200) #座標100、200にマウスを移動させる pyautogui.click() #マウスをクリックする pyautogui.typewrite('Hello world!') #文字を打つ pyautogui.keyDown('shift') #シフトキーを押しっぱなしにする position = pyautogui.locateCenterOnScreen('target.png') #target.pngと一致 する場所の中心の座標を取得する 平易な1ステートメントでGUI操作を記述
6.
PyAutoGuiの例:詳細なパラメータ指定の例 #画面上でhoge.pngとマッチする座標を取得 pyautogui.locateOnScreen(‘hoge.png’) #グレースケールでマッチングして座標を取得 pyautogui.locateOnScreen(‘hoge.png’, grayscale=True) #指定の領域から座標を取得 pyautogui.locateOnScreen(‘hoge.png’, region=(0,0, 300, 400)) #処理実行のインターバルを変更 pyautogui.PAUSE = 0.2 デフォルトはシンプルに、必要に応じて詳細に
7.
PyUnit ? ライブラリ名unittest。Python向け標準xUnitフレームワーク ? シンプルで汎用性が高い ?
ツールチェーンも自由に構築できる ? Jenkis向けXML生成、テスト結果集計などテスト用機能を手軽に利用できる
8.
PyAutoGUI & PyUnit ? PyUnitでテストフレームワーク構築 実行、結果評価をPyAutoGuiで実装 ?
PyUnitの機能を使いながら、GUIベースのテスト自動化を実現 ? 用途を絞ればSikuli程度のツールは簡単に組める
9.
PyAutoGUIデモ:タッチパッド操作テスト自動化 ? 指定のタッチバッド操作でMac OS情報画面を表示できることを自動テスト
10.
PyAutoGUIデモ:タッチパッド操作テスト自動化 #macアイコンをクリック position = pyautogui.locateCenterOnScreen('mac_icon.png') pyautogui.click(position) #情報表示メニューをクリック position = pyautogui.locateCenterOnScreen('about.png') pyautogui.click(position) #表示を待つ time.sleep(1) #表示確認 position = pyautogui.locateOnScreen('os_info.png') self.assertNotEqual(position, None)
11.
PyAutoGuiの問題点 ? GUI&キャプチャ画像操作しばり ? 画像のマッチングで誤差の許容範囲を指定できない ?
透過効果や強調処理(影、フェード処理など)に弱い ? 処理が遅い
12.
Part.2 PyAutoGUI & PyUnit +色々なPythonライブラリ活用
13.
色々なPythonライブラリの活用 ? Pythonはテスト自動化で活用できるライブラリが多数公開されてる ? GUI操作(pyautogui等)、ブラウザ操作(selenium.webdriver等)、Excel操作(openpyxl)、 画像処理(opencv等)、文字識別(tesseract等)、機械学習(TensorFlow、scikit-learn等)、 その他諸々?? ?
Pythonベースでテスト自動化フレームワークを組むと、それらライブラリの 活用が可能になる
14.
matplotlib ? MATLABを参考にしたライブラリ。 MATLABのような高機能グラフを簡単に出力できる。 ? ※テスト自動化用途ではないが、MATLABでシミューレションや検証を行っ ている人なら、自動化環境の補助チェックとしてスムーズに導入できる
15.
matplotlibデモ ? プログレスバーのテスト自動化(PyAutoGUIで操作を自動化) ? 自動操作で得られたデータを目視確認できるようにグラフ化 プログレスバー画面 テスト対象ソフトウェア PyUnit PyAutoGUI 1.自動タッチパッド操作 2. 連続画面キャプチャ
3. プログレスバーの時間 経過に対する推移 4. 時間×進捗のグラフ matplotlib
16.
statsmodels(+pandas, numpy) ? 連続系のモデルやデータの分析ライブラリ ? statsmodels.formula ?
Rを参考にしたAPIを使える ? モデルの式を文字列で記述できる
17.
statsmodels.formula ? モデル式 ? 「log(OutputData) = 係数a×log(InputData)+係数b」 ?
Pythonでの記述(線形回帰分析) ? 「sm.ols(formula=“np.log(OutputData) ~ np.log(InputData)”, data=datalist)」 (1) OutputDataとInputDataを指定する
18.
statsmodels.formula (2)線形回帰分析でモデルの各係数や、モデルとデータの差異を分析 (略) R-squared: 0.779 (略) coef std
err t P>|t| [95.0% Conf. Int.] --------------------------------------------------------------------------- Intercept 2.4606 0.325 7.578 0.000 1.794 3.127 np.log(Ouput Data) 0.9564 0.098 9.766 0.000 0.755 1.157 log(Output Data) = 係数a×log(Input Data)+係数b モデルとの合致性パラメータを複数出力
19.
statsmodels.formulaデモ:プログレスバーの自動テスト ? PyAutoGUIで自動操作。プログレスバー進捗を連続キャプチャで取得 ? プログレスバーの進捗推移を、線形回帰分析でモデル化。モデルの係数 で、プログレスバーの進捗が意図通りか自動テストする プログレスバー機能 テスト対象ソフトウェア PyUnitPyAutoGUI 1.自動タッチパッド操作 2. 連続画面キャプチャ 3. プログレスバーの時間 経過に対する推移 statsmodels 4. プログレスバー進捗の 近似モデルのパラメータ 5. 合否結果
20.
statsmodels.formulaデモ:プログレスバーの自動テスト #プログレスバーの進捗の回帰分析結果を取得 def analysis_trend(time, data): trend_data = pd.DataFrame([time, data]).T trend_data.columns
= ["time", "progress"] result = sm.ols(formula = "progress ~ np.log(time)", data=trend_data).fit() return result.params class TestProgressBar(unittest.TestCase): def test_progress_bar(self): #処理高速化のため、GUI操作対象の領域を特定してそこだけ操作するようにする target_area = pyautogui.locateOnScreen('target_area.png') target_region = location_to_region(target_area) #プログレスバーの開始と終了の座標および長さを取得(進捗の取得のため) start_position = pyautogui.locateOnScreen('progress_start.png', grayscale=True, region=target_region) end_position = pyautogui.locateOnScreen('progress_end.png', region=target_region) length = end_position[0] - start_position[0] #プログレスバー 開始操作 position = pyautogui.locateCenterOnScreen('start_button.png', region=target_region) pyautogui.click(transform_coord(position)) (続く)
21.
statsmodels.formulaデモ:プログレスバーの自動テスト (続き) #プログレスバー進捗取得 progress_pos = [] progress_time = [] start_time
= time.time() time.sleep(1) while True: position = pyautogui.locateCenterOnScreen('progress_current.png', region=target_region) if position == None: break progress_pos.append((position[0] - start_position[0]) * 100 / length) progress_time.append(time.time() - start_time) #モデルとの合致性確認 result = analysis_trend(progress_time, progress_pos) self.assertTrue(result[0] < 20) self.assertTrue(result[1] > 50 and result[1] < 100) 今回のモデル:progress_pos= result[1]×log(progress_time)+result[0]
22.
Part.3 OpenCVによる 現実空間のテスト自動化
23.
OpenCV ? オープンソースのコンピュータビジョンのライブラリ ? 基本的な画像処理全般に対応。その他、録画?キャプチャ?カメラ制御、 キーボード操作などを扱える ?
ロボットの移動制御やLED表示等、現実空間のテストの自動化を単独でサ ポートできる
24.
OpenCVデモ:クレーンロボットのテスト自動化 ? Macbook Proのカメラで動画撮影。OpenCVでクレーン位置を解析 ?
テスト自動化環境の配置チェックと、クレーン制御機能テスト(クレーン位 置が指示通りである事をテスト)を自動化 クレーンロボット 1.動作指示通信 2.動画撮影 PC PyUnit OpenCV 3.ロボット位置情報 (クレーンの遠さと 座標位置) 4.テスト結果 通信制御 ※準備が間に合わなかった ので今回は人間で代用
25.
OpenCV余談 ? 近年のPythonでは、コンピュータビジョンやデータ分析のライブラリが充実 ? 誰でも手軽にコンピュータビジョンベースの自動テストを構築できるようになった ?
テストオラクルやシミュレーションのモデル作成も敷居が下がった 高精度を求めなければ機械学習のアプローチでモデルを構築できるようになった ? Pythonは組み込みエンジニアにとって重要な基礎教養
26.
おわり
Download