みなさん,こんにちは。
シンノユウキ(shinno1993)です。
この記事はPyAutoGUIでユーザーフォームのGUIテストを自動化する連載の第8回です.今回が連載の最後となります.
最終回である今回は,GUIテストを他の端末でも楽に行えるように,PyInstallerを利用して,関連ファイルをEXE化してみたいと思います.
では行きましょう!
前回のまとめ
前回の記事はこちらです:
前回はPandasを使用して,Excelファイルからテストデータを取得する方法を紹介しました.そして,そのデータを利用して複数のテストを行えるようにしました.
全体のコードは以下のようになりました:
import pyautogui as pg
import pyperclip
import pandas as pd
class UserForm:
def uncheck(self):
try:
for pos in pg.locateAllOnScreen('checkbox.png', grayscale=True):
locate = pg.center(pos)
pg.click(locate)
except :
return
class Control:
def __init__(self, x, y):
self.x = x
self.y = y
def click(self, cliks=1, interval=0, button='left', pause=1):
pg.click(self.x, self.y, clicks=cliks, interval=interval, button=button, pause=pause)
class TextBox(Control):
def set_text(self, string_):
self.click()
pyperclip.copy(string_)
pg.hotkey('ctrl', 'v')
def clear_text(self):
self.click()
pg.hotkey('ctrl', 'a')
pg.press('delete')
class ComboBox(Control):
def clear_box(self):
self.click()
pg.press('backspace')
def select_box(self, index):
for i in range(index):
pg.press('down')
class OptionButton(Control):
pass
class CheckBox(Control):
pass
class CommandButton(Control):
pass
if __name__ == "__main__":
# Excelファイルからデータを読み取る
df = pd.read_excel('userform.xlsm', sheet_name='test')
# 左上をクリックしてウインドウをアクティブに
pg.click(1, 1, pause=2.0)
btn_show_form = Control(674, 265)
btn_show_form.click()
form = UserForm()
for index, row in df.iterrows():
form.uncheck()
txt_name = TextBox(947,391)
txt_name.set_text(row['名前'])
opt_men = OptionButton(915, 446)
opt_women = OptionButton(915, 492)
ctg_sex = [opt_men, opt_women]
ctg_sex[row['性別']].click()
cmb_age = ComboBox(915, 547)
cmb_age.clear_box()
cmb_age.select_box(row['年齢'])
if row['最終確認1'] == True:
chk_1 = CheckBox(844, 600)
chk_1.click()
if row['最終確認2'] == True:
chk_2 = CheckBox(844, 630)
chk_2.click()
btn_ok = CommandButton(1040,677)
btn_ok.click()
# フォームの初期化
txt_name.clear_text()
form.uncheck()
pg.alert('終了しました')
今回はその続きです.
テストは複数の端末で行わなければならない
前回の連載までで,PyAutoGUIを活用したVBAのユーザーフォームのGUIテストの方法について紹介してきました.
ただ,Pythonを使用した自動化であるがゆえ,テストを行う端末の全てにPythonや関連のライブラリをインストールしたりといった手間が生じてしまいます.テストは複数の端末で,しかもOSなどを変えながら実行しなくてはならないからです.
なので,それを解消する必要があります.PythonのインストールされていないPCでも,今回作成したスクリプトを実行できる必要があります.そこで利用するのがPyInstallerです.
PyInstallerは,関連ファイルをEXE化し,Pythonのインストールされていない他のPCでも利用できるようにするものです.以下でその詳しい使い方を見ていきましょう.
PyInstallerについて
PyInstallerとは?
先ほども少し紹介しましたが,PyInstallerというのは,Pythonファイルを他のPythonがインストールされていないPCでも利用できるようにパッケージ化するためのライブラリです.
Pythonファイルを実行するためには,それを実行するPCにPythonがインストールされていなければなりません.複数の端末でPythonを動かしてみたいような場合,それだと不便です.なので,それを解決するためにPyInstallerを利用します.
PyInstallerの使い方
PyInstallerの使い方は簡単です.まず,以下のコードでPyInstaller自体をインストールします:
pip install pyinstaller
そして,目的のPythonファイルのあるディレクトリに移動し,以下を実行します:
pyinstaller sample.py
このコマンドをそのまま実行しても目的物を得ることができるのですが,いくつかのoptionを指定することで,もっと便利になります.以下のoptionを指定すると良いでしょう:
--onefile:生成されるものを1つのファイルにまとめることができます.--clean:EXEファイルをビルド後,関連するキャッシュを削除してくれます.--noconsole:EXEファイルを実行する際にコンソールの表示をしないようにしてくれます.
これらのoptionを指定すると,以下のようになります:
pyinstaller sample.py --onefile --noconsole --clean
これを実行することで,以下のようなファイルを得ることができます:

目的のファイルは,distの中に入っています:

これを関連ファイルと同じ階層において実行することで,スクリプトを実行することができます.注意しなければならないのは,関連ファイルと同じ階層に置かなければならないという点です.
今回のスクリプトでは,同じ階層にあるExcelファイルからデータを読み取ったり,画像ファイルを参照したりしています.なので,それらのファイルを参照できるように,階層は揃えてあげる必要があります.この点には注意しなければなりません.
まとめ
今回は,GUIテストを他の端末でも楽に行えるように,PyInstallerを利用して,関連ファイルをEXE化してみました.これで本連載も終了です.自分用メモとしてはいい線いってると思っています!
連載目次
- PyAutoGuiでVBAのユーザーフォームのGUIテストを自動化する!
- PyAutoGUIを始める第一歩と基本的な使い方を紹介します
- PyAutoGUIでユーザーフォームの 簡単なGUIテストをやってみる
- PyAutoGUIでユーザーフォームのテキストボックスを操作する方法
- PyAutoGUIでユーザーフォームのコンボボックスを操作する方法
- PyAutoGUIでユーザーフォームのチェックボックスのチェックを全て外す方法|画像認識の活用
- PyAutoGUIでユーザーフォームのテストデータをExcelファイルから読み取る方法
- PythonファイルをEXEファイル化する「Pyinstaller」の使い方を紹介します現在のページ
