More Related Content Similar to 【STAC2017】テスト自動化システム 成長記
Similar to 【STAC2017】テスト自動化システム 成長記 (20) 【STAC2017】テスト自動化システム 成長記1. Copyright © 2017 HumanCrest Co., Ltd. All Rights Reserved.
テスト自動化システム 成長記
-継続的に運用する為に何をしてきたか?-
株式会社ヒューマンクレスト 技術推進本部
浅黄 友隆 & 山口 真央
2017/03/19
2. Copyright © 2017 HumanCrest Co., Ltd. All Rights Reserved.
アジェンダ
誕生 2013年
成長 2014年〜2016年
現在 2017年
どのような対応をしてきたのか?
どのようなアーキテクチャなのか?
どのようなテストを自動化しているのか?
2
3. Copyright © 2017 HumanCrest Co., Ltd. All Rights Reserved.
問題点
自動テストを継続していく時の障害
コスト
テストコード(スクリプト)のメンテナンス
テスト結果の分析
動かないときの分析
環境の維持
OSのアップデートへの追従
OSSのアップデートの追従
人に依存
専任者がいない
3
4. Copyright © 2017 HumanCrest Co., Ltd. All Rights Reserved.
テスト自動化サービス(Lynx)とは
自動テストを実施する上で必要な事を全て代行
テスト対象システム(SUT)の「外側」にテスト自動化システムを構築
テスト実施環境構築(ブラウザ、スマホ)
自動テストの設計
テストスクリプト作成
テストの実行
結果通知・報告
スクリプトのメンテナンス
環境の維持、運用
テスト対象
システム
(SUT)
4
5. Copyright © 2017 HumanCrest Co., Ltd. All Rights Reserved.
誕生
5
自動操作:Selenium WebDriver
スクリプト:Java → jar
自動起動:WindowsスケジューラでBatch起動
エラー通知:メールでJavaのエラーログ送信
SUT
6. Copyright © 2017 HumanCrest Co., Ltd. All Rights Reserved.
誕生
6
GUI Tests
Acceptance Tests
(API Layer)
Unit Tests
7. Copyright © 2017 HumanCrest Co., Ltd. All Rights Reserved.
誕生
2013/3
// 1. ログイン
driver.findElement(By.id("account")).sendKeys("AdminUser");
driver.findElement(By.id("pass")).sendKeys("hcpassword");
driver.findElement(By.cssSelector(".btn.login")).click();
String userActual = driver.findElement(By.cssSelector(".loginAccount")).getText();
assertThat(userActual , is("AdminUser"));
// ◯◯操作
driver.findElement(By.id("input1")).sendKeys("XXXXXXXX ");
driver.findElement(By.id("input2")).sendKeys("YYYYYYYY");
driver.findElement(By.id("btn1")).click;
// ◯◯操作2
driver.findElement(By.id("input3")).sendKeys("AAAAAAAA");
driver.findElement(By.id("input4")).sendKeys("BBBBBBBB");
driver.findElement(By.id("btn2")).click;
7
9. Copyright © 2017 HumanCrest Co., Ltd. All Rights Reserved.
誕生
9
GUI Tests
Acceptance Tests
(API Layer)
Unit Tests
10. Copyright © 2017 HumanCrest Co., Ltd. All Rights Reserved.
誕生
2013/5 毎回重複するコーディングが多い
↓
共通関数化
テンプレート化
↓
ソースが複雑になる
↓
メンテナンスは私しかできない!
10
顧客が増え
た
スクリプトが増えた
バージョンアップが頻
繁
11. Copyright © 2017 HumanCrest Co., Ltd. All Rights Reserved.
誕生
2013/8 見直し
// 1. ログイン
driver.findElement(By.id("account")).sendKeys(”AdminUser");
driver.findElement(By.id("pass")).sendKeys("hcpassword");
driver.findElement(By.cssSelector(".btn.login")).click();
String userActual = driver.findElement(By.cssSelector(".loginAccount")).getText();
assertThat(userActual , is(”AdminUser"));
// ◯◯操作
driver.findElement(By.id(”input1")).sendKeys(”XXXXXXXX ");
driver.findElement(By.id(”input2")).sendKeys(”YYYYYYYY");
driver.findElement(By.id(”btn1")).click;
// ◯◯操作2
driver.findElement(By.id(”input3")).sendKeys(”AAAAAAAA");
driver.findElement(By.id(”input4")).sendKeys(”BBBBBBBB");
driver.findElement(By.id(”btn2")).click;
毎回同じ!箇所
パターンがある
もう一度 ソースから検討してみた
11
都度違う
エクセル
自動化
エンジン
12. Copyright © 2017 HumanCrest Co., Ltd. All Rights Reserved.
誕生
seq keyword targetKind targetUniqueID inputValue Expect Capture Sleep
1 URL www.xxxxxx.jp/login
2 Sendkey id account AdminUser
3 Senkey id pass hcpassword
4 Click css .btn.login 1000
5 Check css .loginAccount AdminUser TRUE
12
項番 設定項目 必須 値
1 GridServer ○ XXX.XXX.XXX.XXX:4444
2 OS
3 Browser ○ safari
4 version 7.0
5 通知有無 ○ TRUE
6 通知用メールアドレス xxxxxxxxxxx@humancrest.co.jp
7 通知先メールアドレス xxxxxxxxx@humancrest.co.jp
8 スクリーンショット有無 ○ TRUE
9 保存場所 ○ c:tempcapture
10 タイムアウト値 0
Project
├─自動テストエンジン.jar
├─Scenario.xlsx
│ ├─ Scenario
│ └─ Config
└─Update.vbs
14. Copyright © 2017 HumanCrest Co., Ltd. All Rights Reserved.
成長
対応一覧
14
2014年 2015年 2016年
OSS Ver Up
SUT Ver Up
報告書の廃止
Dashboard
Gradle
レスポンスタイム
測定
DDT
Image
AWS環境
AWSテスト実行
Git
Grid
オフショア
Config独立
DB
Action
結果送信
再起動
Screen
15. Copyright © 2017 HumanCrest Co., Ltd. All Rights Reserved.
成長
対応一覧
15
2014年 2015年 2016年
OSS Ver Up
SUT Ver Up
報告書の廃止
Dashboard
Gradle
レスポンスタイム
測定
DDT
Image
AWS環境
AWSテスト実行
Git
Grid
オフショア
DB
Action
結果送信
再起動
Screen
Config独立
16. Copyright © 2017 HumanCrest Co., Ltd. All Rights Reserved.
Project
├─自動テストエンジン.jar
├─Scenario1.xlsx
│ ├─ Scenario
│ └─ Config
├─Scenario2.xlsx
│ ├─ Scenario
│ └─ Config
└─Update.vbs
成長
Lynx構成(改善前)
16
seq keyword targetKind targetUniqueID inputValue Expect Capture Sleep
1 URL www.humancrest.co.jp
2 Sendkey id account AdminUser
3 Senkey id pass hcpassword
4 Click css .btn.login 1000
5 Check css .loginAccount AdminUser TRUE
項番 設定項目 必須 値
1 GridServer ○ XXX.XXX.XXX.XXX:4444
2 OS
3 Browser ○ safari
4 version 7.0
5 通知有無 ○ TRUE
6 通知用メールアドレス XXXXX@humancrest.co.jp
7 通知先メールアドレス XXXXX@humancrest.co.jp
8 スクリーンショット有無 ○ TRUE
9 保存場所 ○ c:tempcapture
10 タイムアウト値 0
同じ処理を共通化したい
実行シナリオ・設定
を自由に変えたい
スクリプトは作成できるようになったけど・・・
メンテナンスする時間は変わらない
17. Copyright © 2017 HumanCrest Co., Ltd. All Rights Reserved.
成長
Lynx構成(改善後)
Project
├─Action
│ └─Action.xlsx
| ├─Actionシート
| └─Dataシート
├─Config
│ ├─Config.xlsx
│ └─Parameter.xlsx
├─Scenario
│ ├─Scenario1.xlsx
│ └─Scenario2.xlsx
└─Screen
└─Screen.xlsx
17
seq keyword Target
Kind
Target
UniqueID
inputValue Expect DataFile
Line
DataFile Count Parameter
Line
Capture Sleep
1 URL www.xxxxxx.jp/login
2 ActionUnit Login
3 Click scr ログインボタン TRUE 2000
• 共通の処理をひとつにまとめることができるようになった
• ActionをScenarioからCallできるようにした
• ページオブジェクトの導入
• IdやcssSelectorを一箇所にまとめた(Screen)
• Configが単独で指定できるようになった
• Parameterを使用できるように列を追加
18. Copyright © 2017 HumanCrest Co., Ltd. All Rights Reserved.
成長
対応一覧
18
2014年 2015年 2016年
OSS Ver Up
SUT Ver Up
報告書の廃止
Dashboard
Gradle
レスポンスタイム
測定
DDT
Image
AWS環境
AWSテスト実行
Git
Grid
オフショア
DB
Action
結果送信
再起動
Screen
Config独立
19. Copyright © 2017 HumanCrest Co., Ltd. All Rights Reserved.
成長
DDT(Data Driven Testing)への対応
19
No Data1 Data2 ・・・ DataZZ
1 X-XXX01@humancrest.co.jp test001 ・・・ 山田太郎
2 X-XXX02@humancrest.co.jp test002 ・・・ 山田次郎
: : : : :
10 X-XXXZZ@humancrest.co.jp testzzz ・・・ 山田Z郎
seq keyword Target
Kind
Target
UniqueID
inputValue Expect DataFile
Line
DataFile
Count
Parameter
Line
Captur
e
Slee
p
1 URL www.xxxxxx.jp/login
2 ActionUnit Login
10
TRUE 2000
何のデータを何回繰り返すかを
指定して使えるようにした
• DDTの自動テストへの対応
• スクリプト作成・メンテナンス工数の削減
20. Copyright © 2017 HumanCrest Co., Ltd. All Rights Reserved.
成長
対応一覧
20
2014年 2015年 2016年
OSS Ver Up
SUT Ver Up
報告書の廃止
Dashboard
Gradle
レスポンスタイム
測定
DDT
Image
AWS環境
AWSテスト実行
Git
Grid
オフショア
DB
Action
結果送信
再起動
Screen
Config独立
21. Copyright © 2017 HumanCrest Co., Ltd. All Rights Reserved.
成長
テスト結果送信(改善前)
メールでJavaのエラーログを送信
21
件
名
Lynx-XXX_XXX_ie(8)2013-10-03_175030
内
容
https://XXX.XXX.XXX/XXXX
org.openqa.selenium.ElementNotVisibleException: 操作対象(id=XXXX)が表示領域にない為、
操作できません。
Build info: version: '2.35.0', revision: 'c916b9d', time: '2013-08-12 15:42:01’
System info: os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.7.5', java.version:
'1.7.0_25’
Driver info: driver.version: unknown
at jp.co.humancrest.santacruz.otp.MainLoop.RunScn(MainLoop.java:143)
at jp.co.humancrest.santacruz.otp.AptKeyword.main(AptKeyword.java:102)
• お客様には不要な内容
• 作った人しか分からない
22. Copyright © 2017 HumanCrest Co., Ltd. All Rights Reserved.
成長
テスト結果送信(改善後)
エラーメールの送信内容
メールを見て分かる内容に修正
文章だけではなく、操作前後のスクリーンショットを添付
(スクリーンショットの有無はConfigで設定可能)
チャットツールへの結果送信
Chatwork
Slack
テスト成功通知を送信
ユーザの要望に合わせたエラーを通知
エラー通知からの結果分析精度向上
22
件
名
Lynx-XXX__XXX_ie(11)2017-02-28_085017
内
容
TestNO:1-15-
SEQ:75
処理内容:XXXボタンをクリックする
エラー原因:(err_0030)操作対象(id=XXXX)が表示領域にない為、操作できません。
発生時刻:2017/03/08 07:26:18
URL:https://XXX.XXX.XXX/XXXX
テストが成功した時も通
知が欲しい
メールではなく、チャッ
トに通知が欲しい
Before After
23. Copyright © 2017 HumanCrest Co., Ltd. All Rights Reserved.
成長
対応一覧
23
2014年 2015年 2016年
OSS Ver Up
SUT Ver Up
報告書の廃止
Dashboard
Gradle
レスポンスタイム
測定
DDT
Image
AWS環境
AWSテスト実行
Git
Grid
オフショア
DB
Action
結果送信
再起動
Screen
Config独立
24. Copyright © 2017 HumanCrest Co., Ltd. All Rights Reserved.
成長
レスポンスタイムの測定
シナリオ全体の実行時間を測定
操作時間を測定
24
特定の処理において、
日々のレスポンスタイム
が測りたい
Transaction 総処理時間(ms) 実処理時間(ms)
トップページ 16000 6900
ログイン 12800 9800
Transaction 総処理時間(ms) 実処理時間(ms)
トップページ 20000 7000
ログイン 11100 8000
:
:
csvファイルに時間を出力
毎日の結果が蓄積される 集計・報告書提出
いつサイトが遅かったかが分かるようになった
25. Copyright © 2017 HumanCrest Co., Ltd. All Rights Reserved.
成長
対応一覧
25
2014年 2015年 2016年
OSS Ver Up
SUT Ver Up
報告書の廃止
Dashboard
Gradle
レスポンスタイム
測定
DDT
Image
AWS環境
AWSテスト実行
Git
Grid
オフショア
DB
Action
結果送信
再起動
Screen
Config独立
26. Copyright © 2017 HumanCrest Co., Ltd. All Rights Reserved.
成長
報告書の廃止(廃止前)
毎月報告書を作成し、提出
1案件あたり、作成に2日程度かかる
エラーメール以外に結果を知る方法がない
26
作成時間はかかるけど、
月の最後にしか集計結果
が分からない
27. Copyright © 2017 HumanCrest Co., Ltd. All Rights Reserved.
成長
Dashboardの作成・報告書の廃止
Web上でテスト結果の確認ができるようになった
報告書作成時間を他のことに使えるようになった
(当時、1人で4案件の報告書を作成⇛月あたり、約1週間分の時間ができた!)
27
まだまだ改良中!!!
28. Copyright © 2017 HumanCrest Co., Ltd. All Rights Reserved.
成長
対応一覧
28
2014年 2015年 2016年
OSS Ver Up
SUT Ver Up
報告書の廃止
Dashboard
Gradle
レスポンスタイム
測定
DDT
Image
AWS環境
AWSテスト実行
Git
Grid
オフショア
DB
Action
結果送信
再起動
Screen
Config独立
29. Copyright © 2017 HumanCrest Co., Ltd. All Rights Reserved.
成長
オフショアの活用 ベトナム ダナン
29
• テスト結果の分析
• スクリプト作成・保守(10名)
30. Copyright © 2017 HumanCrest Co., Ltd. All Rights Reserved.
現在
対応一覧
30
2014年 2015年 2016年
OSS Ver Up
SUT Ver Up
報告書の廃止
Dashboard
Gradle
レスポンスタイム
測定
DDT
Image
AWS環境
AWSテスト実行
Git
Grid
オフショア
DB
Action
結果送信
再起動
Screen
Config独立
31. Copyright © 2017 HumanCrest Co., Ltd. All Rights Reserved.
現在
31
WorkSpaces
SeleniumGrid Node
(XXX.XXX.XXX.XXX:6666)
SeleniumGrid Hub
(XXX.XXX.XXX.XXX:4444)
EC2
• Windows Server 2008 R2 Datacenter 64bit
• Intel Xeon CPU E5-2670 v2 @ 2.50 GHz
• RAM 2.00 GB
• EIP
• PrivateIP
• Amazon Linux
• EIP: なし
• PublicIP : XXX.XXX.XXX.XXX
• PrivateIP :
XXX.XXX.XXX.XXX
Availability Zone
ap-northeast-1a
Availability Zone
ap-northeast-1c
Strage
(Lynxrun本体と
Scenario)
Volumeを
マウント
Dirを共有
Lynx本体とシ
ナリオをアップ
ロード
JenkinsのJob
やConfig等の
バックアップ
33. Copyright © 2017 HumanCrest Co., Ltd. All Rights Reserved.
現在
33
GUI Tests
Acceptance Tests
(API Layer)
Unit Tests
34. Copyright © 2017 HumanCrest Co., Ltd. All Rights Reserved.
SUT
SUT
現在(全体アーキテクチャ)
34
:
:
Lynxのソース
Excel管理
LynxDashboard
35. Copyright © 2017 HumanCrest Co., Ltd. All Rights Reserved.
現在の規模感
対応キーワード 43種類(クリック、入力、マウスオーバー、、)
テストステップ数 8万ステップ/日
エラー発生数 10件以上/日
バグ(デグレ)発見数 約1〜2件/月
35
36. Copyright © 2017 HumanCrest Co., Ltd. All Rights Reserved.
まとめ
36
要求
必須
内部 外部
オフショア
Config
Grid
AWS環境
DB
Gradle
結果送信
AWSテスト実行
Dashboard
Image
Git
再起動
Action
DDT
SUT Ver Up
時間測定
OSS Ver Up
報告書の廃止
Screen
37. Copyright © 2017 HumanCrest Co., Ltd. All Rights Reserved.
今後の課題
スマートフォンのテストをAWS上へ移行
画像処理の改善
Dashboardの改善
Lynxのオープンソース化
37
38. Copyright © 2017 HumanCrest Co., Ltd. All Rights Reserved.
ご清聴ありがとうございました。
38
Editor's Notes PCを準備することから、開放する。