Test Automator の美徳
TechLive 6
技術開発部太田健一郎
2
オムロンの創業理念 機械にできることは機械に任せ、人間はより創造的な分野で活
動を楽しむべきである 自動化プログラム自体を考えて作るのは「創造的」 ちなみに、これに感動して昔受けましたが、コミュ力不足で 1
次面接で落ちましたw
Test Automator の心得
Test Automatorは赤魔道士
Methodology ( 技法、手法 ) 白魔法 テストプロセス改善
TMMi, TPI NEXT テスト分析
FMEA、ゆもつよメソッド テスト設計
HAYST法、原因結果グラフ
Technology (技術 ) 黒魔法 自動機能テスト
xUnit, Selenium, Geb, Appium, Calabash CI
Jenkins, Travis CI, CircleCI
個々の領域では専門職に及ばないが、両者をバランス良く実践修得しているTest Automatorは希少かつ貴重で市場価値が高い
極めるとテスト設計の改善と自動化という「連続魔」を唱えられる
ジョブ : Test Automator
4
怠惰
短気
傲慢
プログラマの三大美徳
5
10 秒であらゆる刺身タンポポ作業に飽きる
6
これが作られる前に
7
デフォルト入力を自動で→
ないみたいなので作る
8
仕様 ログインして土日に休みを入れる 日付指定機能はなし
月の初めに起動する ユーザー名、パスワードも直埋め込み
YAGNI (You ain't gonna need it) いきなり完成版を目指さず、ちょっとでも楽なようにする
バージョン 1
9
仕様変更 ユーザー、パスワードを設定ファイル化
他の人でも設定ファイルの変更だけで使えるように
バージョン 2
Properties userInformation = getUserInformation() $("form").with { login_id = userInformation.get("login_id") password = userInformation.get("password") $("button").click() }
private Properties getUserInformation() { Properties properties = new Properties() new BufferedReader(new FileReader("data" + File.separator + "user_information.properties")).withCloseable { properties.load(it) } properties }
10
仕様変更 日付を設定ファイルで指定できるように
来月以降の勤務予定を入力できるように
バージョン 3
and: " 勤務表を開く " String timeArguments = getTimeArguments() go "https://shift-portal.softwaretest.jp/sns/sns_kinmu_yotei.cgi" + timeArguments
private String getTimeArguments() { String timePath = "data" + File.separator + "time.properties" String timeArguments = "" if (new File(timePath).exists()) { Properties time = new Properties() new BufferedReader(new FileReader(timePath)).withCloseable { time.load(it) } timeArguments = "?year=" + time.get("year") + "&month=" + time.get("month") } timeArguments }
11
仕様変更? 任意の数の月を設定ファイルに書けると年間予定とか入力でき
るが
YAGNI 結局有休など手直しがあるので、直近 1 ヶ月とか指定できれば
十分 いらん複雑性は持ち込まないような割り切りが必要
バージョン 3.5
12
仕様変更 遂に日本の祝日対応
一から実装するの面倒 [ 怠惰 ] なのでライブラリ使う
バージョン 4
int day = Integer.parseInt(monthAndDay.text().split(" / ")[1]) Calendar calendar = Calendar.getInstance() calendar.set(year, month - 1, day) boolean isHoliday = isHoliday(calendar) if (isHoliday) { def statusSelect = status.find("select") statusSelect.value(" 休み ")
private boolean isHoliday(Calendar calendar) { OffProvider offProvider = new OffProvider(true, Week.SATURDAY, Week.SUNDAY) AJD ajd = new AJD(calendar) OffProvider.Off off = offProvider.getOff(ajd) boolean isHoliday if (off != null && (off instanceof Holiday || off instanceof Week)) { isHoliday = true } else { isHoliday = false } isHoliday }
13
すみません、作るのに合計 6 時間かかりました><
実務でやってはダメです。実務ではすべてのタスクに ROI を考慮する必要があります