SlideShare a Scribd company logo
PyAutoGUI等Pythonライブラリによる自動化支援
2016/7/24	テスト自動化研究会 事例報告
井芹 洋輝
【アウトライン】
Part.1		PyAutoGUI &	PyUnitによるGUIベースのテスト自動化
(おまけ)Part.2		PyAutoGUI &	PyUnit +色々なPythonライブラリ活用
(おまけ)Part.3		OpenCVによる現実空間のテスト自動化
宣伝
• U30テスト設計コンテスト(30歳以下のテスコン) 開催します!
• チュートリアル開催中。募集は来月予定
• 審査委員長を担当しています
• http://aster.or.jp/business/contest/rulebooku30.html
Part.1	
PyAutoGUI &	PyUnitによる
GUIベースのテスト自動化
PyAutoGUIとは
• マウス操作、キーボード操作、スクリーンショット操作を自動化するPython
向けライブラリ
• https://pyautogui.readthedocs.io/
• コンセプト
• 可能な限りシンプルかつ直感的に使える
• どんな環境(e.g.	win	or	mac	or	linux)でも同じように動く
• テスト自動化ツールというわけではないですが、お手軽に自動化ツールを
組めるため今回紹介
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操作を記述
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
デフォルトはシンプルに、必要に応じて詳細に
PyUnit
• ライブラリ名unittest。Python向け標準xUnitフレームワーク
• シンプルで汎用性が高い
• ツールチェーンも自由に構築できる
• Jenkis向けXML生成、テスト結果集計などテスト用機能を手軽に利用できる
PyAutoGUI &	PyUnit
• PyUnitでテストフレームワーク構築
実行、結果評価をPyAutoGuiで実装
• PyUnitの機能を使いながら、GUIベースのテスト自動化を実現
• 用途を絞ればSikuli程度のツールは簡単に組める
PyAutoGUIデモ:タッチパッド操作テスト自動化
• 指定のタッチバッド操作でMac	OS情報画面を表示できることを自動テスト
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)
PyAutoGuiの問題点
• GUI&キャプチャ画像操作しばり
• 画像のマッチングで誤差の許容範囲を指定できない
• 透過効果や強調処理(影、フェード処理など)に弱い
• 処理が遅い
Part.2	
PyAutoGUI &	PyUnit
+色々なPythonライブラリ活用
色々なPythonライブラリの活用
• Pythonはテスト自動化で活用できるライブラリが多数公開されてる
• GUI操作(pyautogui等)、ブラウザ操作(selenium.webdriver等)、Excel操作(openpyxl)、
画像処理(opencv等)、文字識別(tesseract等)、機械学習(TensorFlow、scikit-learn等)、
その他諸々・・
• Pythonベースでテスト自動化フレームワークを組むと、それらライブラリの
活用が可能になる
matplotlib
• MATLABを参考にしたライブラリ。
MATLABのような高機能グラフを簡単に出力できる。
• ※テスト自動化用途ではないが、MATLABでシミューレションや検証を行っ
ている人なら、自動化環境の補助チェックとしてスムーズに導入できる
matplotlibデモ
• プログレスバーのテスト自動化(PyAutoGUIで操作を自動化)
• 自動操作で得られたデータを目視確認できるようにグラフ化
プログレスバー画面
テスト対象ソフトウェア
PyUnit
PyAutoGUI
1.自動タッチパッド操作
2.	連続画面キャプチャ 3.	プログレスバーの時間
経過に対する推移
4.	時間×進捗のグラフ
matplotlib
statsmodels(+pandas,	numpy)
• 連続系のモデルやデータの分析ライブラリ
• statsmodels.formula
• Rを参考にしたAPIを使える
• モデルの式を文字列で記述できる
statsmodels.formula
• モデル式
• 「log(OutputData)	=	係数a×log(InputData)+係数b」
• Pythonでの記述(線形回帰分析)
• 「sm.ols(formula=“np.log(OutputData)	~	np.log(InputData)”,	data=datalist)」
(1)	OutputDataとInputDataを指定する
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
モデルとの合致性パラメータを複数出力
statsmodels.formulaデモ:プログレスバーの自動テスト
• PyAutoGUIで自動操作。プログレスバー進捗を連続キャプチャで取得
• プログレスバーの進捗推移を、線形回帰分析でモデル化。モデルの係数
で、プログレスバーの進捗が意図通りか自動テストする
プログレスバー機能
テスト対象ソフトウェア
PyUnitPyAutoGUI
1.自動タッチパッド操作
2.	連続画面キャプチャ
3.	プログレスバーの時間
経過に対する推移
statsmodels
4.	プログレスバー進捗の
近似モデルのパラメータ
5.	合否結果
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))
(続く)
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]
Part.3
OpenCVによる
現実空間のテスト自動化
OpenCV
• オープンソースのコンピュータビジョンのライブラリ
• 基本的な画像処理全般に対応。その他、録画・キャプチャ・カメラ制御、
キーボード操作などを扱える
• ロボットの移動制御やLED表示等、現実空間のテストの自動化を単独でサ
ポートできる
OpenCVデモ:クレーンロボットのテスト自動化
• Macbook Proのカメラで動画撮影。OpenCVでクレーン位置を解析
• テスト自動化環境の配置チェックと、クレーン制御機能テスト(クレーン位
置が指示通りである事をテスト)を自動化
クレーンロボット
1.動作指示通信
2.動画撮影
PC
PyUnit
OpenCV
3.ロボット位置情報
(クレーンの遠さと
座標位置)
4.テスト結果
通信制御
※準備が間に合わなかった
ので今回は人間で代用
OpenCV余談
• 近年のPythonでは、コンピュータビジョンやデータ分析のライブラリが充実
• 誰でも手軽にコンピュータビジョンベースの自動テストを構築できるようになった
• テストオラクルやシミュレーションのモデル作成も敷居が下がった
高精度を求めなければ機械学習のアプローチでモデルを構築できるようになった
• Pythonは組み込みエンジニアにとって重要な基礎教養
おわり

More Related Content

What's hot

NTTデータはどうやってCCPMを導入したのか?
NTTデータはどうやってCCPMを導入したのか?NTTデータはどうやってCCPMを導入したのか?
NTTデータはどうやってCCPMを導入したのか?
shibao800
 
早わかり匠Method
早わかり匠Method早わかり匠Method
早わかり匠Method
Hagimoto Junzo
 
しょぼいプレゼンをパワポのせいにするな! by @jessedee
しょぼいプレゼンをパワポのせいにするな! by @jessedeeしょぼいプレゼンをパワポのせいにするな! by @jessedee
しょぼいプレゼンをパワポのせいにするな! by @jessedee
「MakeLeaps」請求書の作成、管理、郵送
 
やはり俺のスタートアップの意思決定はまちがっている。
やはり俺のスタートアップの意思決定はまちがっている。やはり俺のスタートアップの意思決定はまちがっている。
やはり俺のスタートアップの意思決定はまちがっている。
Takaaki Umada
 
アジャイルな見積りと計画づくり2
アジャイルな見積りと計画づくり2アジャイルな見積りと計画づくり2
アジャイルな見積りと計画づくり2
Arata Fujimura
 
CSPO、CSM研修に参加して
CSPO、CSM研修に参加してCSPO、CSM研修に参加して
CSPO、CSM研修に参加して
Arata Fujimura
 
素敵なプレゼン資料を作るためのKnow-Howてんこ盛りセッション:プレゼン道場 Ver 2.2
素敵なプレゼン資料を作るためのKnow-Howてんこ盛りセッション:プレゼン道場 Ver 2.2素敵なプレゼン資料を作るためのKnow-Howてんこ盛りセッション:プレゼン道場 Ver 2.2
素敵なプレゼン資料を作るためのKnow-Howてんこ盛りセッション:プレゼン道場 Ver 2.2
Shoe-g Ueyama
 
逆説のスタートアップ思考
逆説のスタートアップ思考逆説のスタートアップ思考
逆説のスタートアップ思考
Takaaki Umada
 
色で失敗しない為に 〜理論に基づく配色フロー〜
色で失敗しない為に 〜理論に基づく配色フロー〜色で失敗しない為に 〜理論に基づく配色フロー〜
色で失敗しない為に 〜理論に基づく配色フロー〜
Yuudai Tachibana
 
Basic of Basics of Agile Development Returns
Basic of Basics of Agile Development ReturnsBasic of Basics of Agile Development Returns
Basic of Basics of Agile Development Returns
Naoto Nishimura
 
Y Combinator 創業者 Paul Graham からのスタートアップへのアドバイス(スタートアップが迷った時に読む Paul Graham から...
Y Combinator 創業者 Paul Graham からのスタートアップへのアドバイス(スタートアップが迷った時に読む Paul Graham から...Y Combinator 創業者 Paul Graham からのスタートアップへのアドバイス(スタートアップが迷った時に読む Paul Graham から...
Y Combinator 創業者 Paul Graham からのスタートアップへのアドバイス(スタートアップが迷った時に読む Paul Graham から...
Takaaki Umada
 
Design Sprint 概要 / デザインスプリント概要
Design Sprint 概要 / デザインスプリント概要Design Sprint 概要 / デザインスプリント概要
Design Sprint 概要 / デザインスプリント概要
Takaaki Umada
 
人間と話す: Lean Customer Development (Lean Startup Update 2015)
人間と話す: Lean Customer Development (Lean Startup Update 2015)人間と話す: Lean Customer Development (Lean Startup Update 2015)
人間と話す: Lean Customer Development (Lean Startup Update 2015)
Takaaki Umada
 
資金調達の極意①
資金調達の極意①資金調達の極意①
資金調達の極意①
Masa Tadokoro
 
ISO/IEC/IEEE 29119 Software testing 勉強会 第2回 Part 2 Test Processes
ISO/IEC/IEEE 29119 Software testing 勉強会 第2回 Part 2 Test ProcessesISO/IEC/IEEE 29119 Software testing 勉強会 第2回 Part 2 Test Processes
ISO/IEC/IEEE 29119 Software testing 勉強会 第2回 Part 2 Test Processes
崇 山﨑
 
ピッチの極意
ピッチの極意ピッチの極意
ピッチの極意
Masa Tadokoro
 
見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版
MOCKS | Yuta Morishige
 
JaSST'19 Hokkaido 「テスト設計技法、その前に ~フェイスアップ、次にビルドアップ、その先にマインドアップ~」
JaSST'19 Hokkaido 「テスト設計技法、その前に ~フェイスアップ、次にビルドアップ、その先にマインドアップ~」 JaSST'19 Hokkaido 「テスト設計技法、その前に ~フェイスアップ、次にビルドアップ、その先にマインドアップ~」
JaSST'19 Hokkaido 「テスト設計技法、その前に ~フェイスアップ、次にビルドアップ、その先にマインドアップ~」
Akira Ikeda
 
スタートアップを始める前に
スタートアップを始める前にスタートアップを始める前に
スタートアップを始める前に
Takaaki Umada
 
君にグロースハックはいらない
君にグロースハックはいらない君にグロースハックはいらない
君にグロースハックはいらない
Takaaki Umada
 

What's hot (20)

NTTデータはどうやってCCPMを導入したのか?
NTTデータはどうやってCCPMを導入したのか?NTTデータはどうやってCCPMを導入したのか?
NTTデータはどうやってCCPMを導入したのか?
 
早わかり匠Method
早わかり匠Method早わかり匠Method
早わかり匠Method
 
しょぼいプレゼンをパワポのせいにするな! by @jessedee
しょぼいプレゼンをパワポのせいにするな! by @jessedeeしょぼいプレゼンをパワポのせいにするな! by @jessedee
しょぼいプレゼンをパワポのせいにするな! by @jessedee
 
やはり俺のスタートアップの意思決定はまちがっている。
やはり俺のスタートアップの意思決定はまちがっている。やはり俺のスタートアップの意思決定はまちがっている。
やはり俺のスタートアップの意思決定はまちがっている。
 
アジャイルな見積りと計画づくり2
アジャイルな見積りと計画づくり2アジャイルな見積りと計画づくり2
アジャイルな見積りと計画づくり2
 
CSPO、CSM研修に参加して
CSPO、CSM研修に参加してCSPO、CSM研修に参加して
CSPO、CSM研修に参加して
 
素敵なプレゼン資料を作るためのKnow-Howてんこ盛りセッション:プレゼン道場 Ver 2.2
素敵なプレゼン資料を作るためのKnow-Howてんこ盛りセッション:プレゼン道場 Ver 2.2素敵なプレゼン資料を作るためのKnow-Howてんこ盛りセッション:プレゼン道場 Ver 2.2
素敵なプレゼン資料を作るためのKnow-Howてんこ盛りセッション:プレゼン道場 Ver 2.2
 
逆説のスタートアップ思考
逆説のスタートアップ思考逆説のスタートアップ思考
逆説のスタートアップ思考
 
色で失敗しない為に 〜理論に基づく配色フロー〜
色で失敗しない為に 〜理論に基づく配色フロー〜色で失敗しない為に 〜理論に基づく配色フロー〜
色で失敗しない為に 〜理論に基づく配色フロー〜
 
Basic of Basics of Agile Development Returns
Basic of Basics of Agile Development ReturnsBasic of Basics of Agile Development Returns
Basic of Basics of Agile Development Returns
 
Y Combinator 創業者 Paul Graham からのスタートアップへのアドバイス(スタートアップが迷った時に読む Paul Graham から...
Y Combinator 創業者 Paul Graham からのスタートアップへのアドバイス(スタートアップが迷った時に読む Paul Graham から...Y Combinator 創業者 Paul Graham からのスタートアップへのアドバイス(スタートアップが迷った時に読む Paul Graham から...
Y Combinator 創業者 Paul Graham からのスタートアップへのアドバイス(スタートアップが迷った時に読む Paul Graham から...
 
Design Sprint 概要 / デザインスプリント概要
Design Sprint 概要 / デザインスプリント概要Design Sprint 概要 / デザインスプリント概要
Design Sprint 概要 / デザインスプリント概要
 
人間と話す: Lean Customer Development (Lean Startup Update 2015)
人間と話す: Lean Customer Development (Lean Startup Update 2015)人間と話す: Lean Customer Development (Lean Startup Update 2015)
人間と話す: Lean Customer Development (Lean Startup Update 2015)
 
資金調達の極意①
資金調達の極意①資金調達の極意①
資金調達の極意①
 
ISO/IEC/IEEE 29119 Software testing 勉強会 第2回 Part 2 Test Processes
ISO/IEC/IEEE 29119 Software testing 勉強会 第2回 Part 2 Test ProcessesISO/IEC/IEEE 29119 Software testing 勉強会 第2回 Part 2 Test Processes
ISO/IEC/IEEE 29119 Software testing 勉強会 第2回 Part 2 Test Processes
 
ピッチの極意
ピッチの極意ピッチの極意
ピッチの極意
 
見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版
 
JaSST'19 Hokkaido 「テスト設計技法、その前に ~フェイスアップ、次にビルドアップ、その先にマインドアップ~」
JaSST'19 Hokkaido 「テスト設計技法、その前に ~フェイスアップ、次にビルドアップ、その先にマインドアップ~」 JaSST'19 Hokkaido 「テスト設計技法、その前に ~フェイスアップ、次にビルドアップ、その先にマインドアップ~」
JaSST'19 Hokkaido 「テスト設計技法、その前に ~フェイスアップ、次にビルドアップ、その先にマインドアップ~」
 
スタートアップを始める前に
スタートアップを始める前にスタートアップを始める前に
スタートアップを始める前に
 
君にグロースハックはいらない
君にグロースハックはいらない君にグロースハックはいらない
君にグロースハックはいらない
 

More from H Iseri

フィーチャモデルの描き方
フィーチャモデルの描き方フィーチャモデルの描き方
フィーチャモデルの描き方
H Iseri
 
クラシフィケーション・ツリー法入門
クラシフィケーション・ツリー法入門クラシフィケーション・ツリー法入門
クラシフィケーション・ツリー法入門
H Iseri
 
レガシーコードとの付き合い方とテストでの話
レガシーコードとの付き合い方とテストでの話レガシーコードとの付き合い方とテストでの話
レガシーコードとの付き合い方とテストでの話
H Iseri
 
探索的テスト入門
探索的テスト入門探索的テスト入門
探索的テスト入門
H Iseri
 
組み込み開発でのシステムテスト自動化の一つの考え方(STAC)
組み込み開発でのシステムテスト自動化の一つの考え方(STAC)組み込み開発でのシステムテスト自動化の一つの考え方(STAC)
組み込み開発でのシステムテスト自動化の一つの考え方(STAC)
H Iseri
 
ユニットテストの保守性を作りこむ, xpjugkansai2011
ユニットテストの保守性を作りこむ, xpjugkansai2011ユニットテストの保守性を作りこむ, xpjugkansai2011
ユニットテストの保守性を作りこむ, xpjugkansai2011
H Iseri
 

More from H Iseri (6)

フィーチャモデルの描き方
フィーチャモデルの描き方フィーチャモデルの描き方
フィーチャモデルの描き方
 
クラシフィケーション・ツリー法入門
クラシフィケーション・ツリー法入門クラシフィケーション・ツリー法入門
クラシフィケーション・ツリー法入門
 
レガシーコードとの付き合い方とテストでの話
レガシーコードとの付き合い方とテストでの話レガシーコードとの付き合い方とテストでの話
レガシーコードとの付き合い方とテストでの話
 
探索的テスト入門
探索的テスト入門探索的テスト入門
探索的テスト入門
 
組み込み開発でのシステムテスト自動化の一つの考え方(STAC)
組み込み開発でのシステムテスト自動化の一つの考え方(STAC)組み込み開発でのシステムテスト自動化の一つの考え方(STAC)
組み込み開発でのシステムテスト自動化の一つの考え方(STAC)
 
ユニットテストの保守性を作りこむ, xpjugkansai2011
ユニットテストの保守性を作りこむ, xpjugkansai2011ユニットテストの保守性を作りこむ, xpjugkansai2011
ユニットテストの保守性を作りこむ, xpjugkansai2011
 

PyAutoGUI等Pythonライブラリによる自動化支援