Upload
nozomi-ito
View
1.030
Download
2
Embed Size (px)
Citation preview
機械学習自動テストツール「MagicPod」体験チュートリアル
システムテスト自動化カンファレンス 2017-22017.12.10
TRIDENT伊藤望
About Mep伊藤望
p株式会社TRIDENT代表取締役n MagicPodの開発・運営 &テスト自動化支援
p コミュニティ運営
n 日本Seleniumユーザーコミュニティ
p執筆
チュートリアルの目標
p MagicPodの利用環境を整える
p実際のアプリを使った自動テストの作成・実行を体験してみる
事前準備
http://www.trident-qa.com/magic-pod-handson-setup/
アジェンダ
1. MagicPodの概要2. 入門課題 [チュートリアル]
3. 実践課題 [チュートリアル]
1.MagicPodの概要
MagicPodp機械学習を活用した自動テストWebサービス
n ディープラーニングなどの技術を活用
n 現在はモバイルアプリ向けのみ
p読みやすい自動テストが簡単に作成できる
利用プラン
p 20テストケースまでは無料p それ以上は 10テストケースあたり 1000円 /月p テスト実行回数や、1社あたりの利用ユーザー数は無制限
構成
CIツール
クラウド環境
Webサーバー
スクリプトDB
ユーザー環境
Magic Pod Desktop
端末
①開始②スクリプト取得
③実行
2.入門課題 [チュートリアル]
p MagicPodの利用環境を整えますp Androidの「APIデモ」アプリを題材に、基本的なコマンドの使い方を覚えます
入門課題
p ユーザー登録を行う
n https://magic-pod.com/homeにアクセスn 「新規登録」からユーザー登録
ユーザーの登録
p会社ごとに1つの「組織」を作成p管理者となるユーザーが「組織」を作成
組織の登録
p 「組織」の下にプロジェクトを作成する
n プロジェクトはアプリごとに作成するのがオススメ
n 「APIDemoApp」のプロジェクトを作成しましょう
プロジェクトの登録
入門課題その1テストを作ってみよう
入門課題その1
「APIデモアプリ」の「Accessibility」のリスト行をタップするだけの、簡単なテストを作成してください
p プロジェクトにテスト「入門課題その1」を作成しますp作成したら編集画面を開きます
入門課題その1テストの作成
p APKファイルのパスを取得1. ファイル「ApiDemos-debug.apk」を右クリック2. メニューが開いた状態で、 「Option」キーを押す3. 「パス名をコピー」
入門課題その1APKファイルの指定
p ターゲットOSは「Android」p APKファイルのパスを指定
入門課題その1APKファイルの指定
p 「新バージョンのテスト実行エンジンを使う」をチェック
n より安定した「UiAutomator2」を使います
p 「テスト実行前にアプリの状態をクリアする」もチェック
n 毎回アプリの初期状態からテストが始まります
入門課題その1各種設定をチェック
入門課題その1画面キャプチャの取得
p Android端末をUSBケーブルで接続しますp APKファイルを指定した状態で、「接続ボタン」()を押します
入門課題その1画面キャプチャの取得
p MagicPodDesktopが起動するので、先ほど登録したメールアドレスとパスワードを入力します
入門課題その1端末との接続
p しばらく待つと、端末との接続とアプリのインストールが完了します
p完了後、接続ボタンのステータスが青色になります
入門課題その1画面キャプチャの取得
p 「デスクトップアプリでUIをキャプチャ」を押すと、アプリの現在の画面がアップロードされます
入門課題その1テストスクリプトの作成
p領域「Accessibility」を押すテスト手順を作成しますn 端末によっては、「リストの1行目」という名前になっていることもあります
p画面キャプチャエリアから、テストスクリプトエリアに、項目をドラッグ&ドロップ
入門課題その1テストの実行
p ボタンを押すと、テストが実行されます
p テストが成功すれば、課題は完了です
p テスト実行結果の番号を押すと、テスト結果の詳細を確認できます。
入門課題その1解答例
実践課題その1Tips「詳しい要素情報の確認」p Chromeの右クリック >「検証」の機能で、Appiumの要素情報を調べられます
入門課題その1Tips「要素名の変更」p MagicPodDesktopで取得した要素をクリックすると、名前を自由に変更できます
※Web上に画像をドラッグ&ドロップした場合は修正不可
入門課題その1Tips「テストコードの実体」p /Users/<ユーザ名>/Desktop/magicPod/test以下
テスト手順 (…/test以下) UIマップ (…/test/base/ui以下)
画面情報を修正するとこの日本語が書き換わる
入門課題その2複数画面のテストを作ってみよう
入門課題その2
「APIデモアプリ」の以下のテストを作成してください
1 「Accessibility」のリスト行をタップ
2 「Accessibility NodeProvider」のリスト行をタップ
p プロジェクトにテスト「入門課題その2」を作成します
入門課題その2複数画面のテストを作ってみよう
p アプリの指定等は、現状テストごとに必要です
入門課題その2各種設定をチェック
入門課題その2複数画面のアップロード
p画面キャプチャは何枚でもアップロードできます
p スキャンが始まれば、次のUIをアップロード可能です
UI切り替えボタン
UI追加ボタン
入門課題その2解答例
入門課題その2Tips「画面キャプチャが増えてきたら」p画面名を変更し、目的の画面を見つけやすくしましょう
p画面の順番はドラッグ&ドロップで変更できます
入門課題その3スクロールしてみよう
入門課題その3(10分)
「APIデモアプリ」の以下のテストを作成してください
1 「Graphics」のリスト行をタップ
2 「Surface Window」のリスト行をタップ
入門課題その3ヒント「スクロールしてみよう」
p スクロールの範囲外の要素をタップするには
1. タップしたい要素が写っている画面をキャプチャします
2. 「表示されるまでスワイプ」を使い、要素を表示します
3. 要素をタップします
スワイプの方向に注意!!
入門課題その3解答例
入門課題その3Tips「テストを強制終了したい」p以下の2つを実施すればOKです
1. MagicPodDesktopを×ボタンで閉じる2. ブラウザ上でページを読み込み直す
入門課題その4テキスト入力と値のチェック
入門課題その4 (10分)
「APIデモアプリ」の以下のテストを作成してください
1 App>Activity>Custom Titleに移動
2 「Left isbest」入力エリアに「テスト」と入力
3 「ChangeLeft」ボタンをタップ
4 画面上部タイトルの「Leftisbest」が「テスト」に変わったのをチェック
ボタン
タイトル
入力エリア
入門課題その4ヒント「テキスト入力と値のチェック」
p テキスト入力は、「テキスト入力」のコマンドを使います
p値のチェック(アサート)は、「一致するかチェック」のコマンドを使います
入門課題その4解答例
※要素名は、一部わかりやすい名前に変更しています
入門課題その4Tips「エラー時の画面を見たい」p テスト結果画面のエラー行にマウスを当てると、エラー時の画面キャプチャが表示されます
p それ以外の行のキャプチャは、実行時のものではないので注意!
入門課題その4Tips「エラー原因を詳しく調べたい」p テスト結果画面の「エラー時のUIツリーを表示」でUI情報を詳しく調査できます
p入門課題は以上です!
入門課題
3.実践課題 [チュートリアル]
p Instagramで、より実践的なテストを作ってみましょう1. ログイン/ログアウトが成功すること2. 画像のアップロードが成功すること (チャレンジ課題)
実践課題
p 初に、Instagramにテスト用ダミーアカウントを作成してください
n ユーザー名/パスワードは、ともに他人に見られてもよいものn メールアドレスは、 [email protected]のように+以降を加えることで、既存メールアドレスを使い回せます(gmailの場合)
p Q:ユーザー登録のテストも自動化しないんですか?n A:自動で何回も作っているとInstagramに弾かれるようになったので、やめましょう
実践課題ダミーアカウントの作成
p 「Instagram」のダミーアカウントで、ログインしてログアウトするテストを自動化してみます
実践課題その1ログイン・ログアウトをしてみよう
p 「Instagram」のプロジェクトを新たに作成しましょうn プロジェクトはアプリごとに作成するのでした
実践課題その1新しいプロジェクトの登録
p 「Instagram」プロジェクトにテスト「ログインとログアウトが成功すること」を作成します
実践課題その1テストの作成
1. 端末とMagicPodを接続します(アプリ名は空でOK)2. 2つのチェックボックスをONにします3. 「ターゲットタイプ」を「パッケージ/アクティビティ」にします
実践課題その1Instagramアプリの指定方法
3. 端末上でInstagramを起動します4. ブラウザ上で「アプリ情報を取得」を押します
5. 現在起動しているアプリの「パッケージ/アクティビティ」情報が取得できます
実践課題その1Instagramアプリの指定方法
実践課題その1ログイン・ログアウトをしてみよう
実践課題その1(60分)
別紙「実践課題テストケース」の「実践課題その1」のテストケースを自動化してください
実践課題その1ヒント「要注意ポイント」
p 初の1回しか表示されない初回画面
p表示されたりされなかったりするダイアログ
実践課題その1ヒント「テスト実行せずにアプリ状態をクリア」
p Instagramの先頭画面が出てこない!などの場合p端末の[設定]>[アプリ]>[Instagram]>[ストレージ]にて、[データ]と[キャッシュ]を消去n (端末によって異なります)
実践課題その1ヒント「時々出るダイアログの処理」
p ダイアログが表示された時に限りボタンを押したい
p 「条件分岐」を使うと、特定の場合のみ処理が可能
p 「条件分岐終わり」コマンドを忘れずに
実践課題その1ヒント「端末の文字入力ができなくなった!」
p キーボードが自動テスト用のものになっています
p端末の[設定]>[詳細設定]>[言語と文字入力]>[デフォルトのキーボード]を変更してくださいn (端末によって異なります)
実践課題その1ヒント「謎のStateElementReference」p画面が不安定なタイミングで操作しようとした場合に発生します
p 「待機」コマンドを使って解決できます
n 例:「一致するまで待つ」コマンドなら、エラーが出ても一定時間リトライします
実践課題その1解答例
実践課題その1解答例
実践課題その2写真を撮影・投稿してみよう
実践課題その2
別紙「実践課題テストケース」の「実践課題その2」のテストケースを自動化してください
p早く終わった方はチャレンジ!
実践課題その2ヒント「共有ステップ」
p ログインの処理を毎回書きたくない
n メンテナンス性も悪そう
p 「共有ステップ」の機能で、よく使う処理を部品にして繰り返し使える
実践課題その2ヒント「共有ステップ」
1. 使いまわしたい処理のあるテストの画面で、「共有ステップを新規作成」
2. 共有ステップ化する範囲を選択
実践課題その2ヒント「共有ステップ」
3. 名前を指定して、共有ステップを作成
4. プロジェクト内の各テストから利用可能になります
実践課題その2解答例
実践課題その2解答例
p実践課題は以上です!
実践課題
今日やったことのまとめ
p MagicPodの利用環境を整えました
p MagicPodの基本的なコマンドの使い方を学びました
p実際のアプリを使って実践的なテストを作成しました
pみなさんのアプリのテスト自動化に、MagicPodをぜひ活用してみてください!
p チャットルームも、ご登録ください!
お疲れさまでした!
付録
チャレンジ課題
チャレンジ課題早く終わった方はチャレンジ
チャレンジ課題
• 「実践課題その2」の投稿Captionチェックでは、前回のテストの投稿をチェックしてしまう可能性があります
• 投稿Captionに毎回違う値を利用して、この問題を解決してください
チャレンジ課題ヒント「ユニークな値の生成」
p 「現在時刻を元に生成したユニークな値を保存」のコマンドを使うと、変数(パラメータ)に毎回違う値をセットできます
p変数は${変数名}で他のステップから参照できます
チャレンジ課題解答例
チャレンジ課題テストのコマンドライン実行
チャレンジ課題
プロジェクト「Instagram」の2つのテストを、コマンドラインから一括で実行してください
チャレンジ課題テストのコマンドライン実行
p MagicPodDesktopをいったん終了
p /Users/<ユーザー名>/ライブラリ/ApplicationSupport/magic_pod_desktopにある「magic_pod_config.json」を、デスクトップなどにコピー
チャレンジ課題テストのコマンドライン実行
p json設定ファイルを編集n projectはInstagramのプロジェクトにn 全テストを実行したいので、testNumberは空白に
n あとはそのままでOK
p詳しい設定ファイルの記法は http://www.trident-qa.com/magic-pod-batch-test-runに記載
チャレンジ課題テストのコマンドライン実行
p Macのターミナルを開く
p MagicPodDesktopのあるディレクトリに移動
チャレンジ課題テストのコマンドライン実行
p以下のコマンドを実行
p プロジェクトの全テストが実行されます
"Magic Pod Desktop.app/Contents/MacOS/Magic Pod Desktop" run --magic_pod_config=<magic_pod_config.jsonのフルパス>
チャレンジ課題テストのコマンドライン実行
p テスト結果は「バッチテスト実行」のページで確認できます。
p このページからでもテストの一括実行が可能です
実際の運用
p各テストケースに依存関係を持たせない
n 「1テストだけ選んで実行」ができないと、バグ調査やテストケース修正に非常に時間がかかる
良いGUIテストスクリプトの条件
p主要なテストケースに絞る
n 数が多いと、実行時間がかかる &メンテナンス困難になる
pバグ出しや細かい動作チェックは手動テストを併用
n 修正箇所以外に予期せぬ影響がないかを自動テストでチェック
p毎日実行して(=CI)、開発効率向上につなげる
良いGUIテスト自動化の運用
CIによる開発効率の向上CIがない場合
CIがある場合
主要テストケースをCIするメリット
• 一人のバグで多くの開発者が影響を受けるのを防ぐ• 開発した直後に不具合を検出できるので、修正が簡単に
開発効率の向上
基本的な動作を担保した状態でテストを開始できる
手動テスト戻りの軽減
• サーバ構成変更時の動作チェック• 本番環境でトラブルが起きていないかの定期的な確認
様々な用途への流用
MagicPodで始める賢いテスト自動化
2. 「重要シナリオ」「各画面の基本動作」等のテストに絞って自動化
1. まずはCI
• ソース修正箇所のテストは手動、修正箇所以外の動作確認を自動化
• 毎日実行し、問題をすぐに検出
3. テストの完全自動化
アプリのビルドなどをCIツールで自動化
ユニットテストをメインで自動化
高度なトラブルシューティング
高度なトラブルシューティング
p MagicPodDesktopの「AppiumConsole」にAppiumサーバのログが出ています
n デスクトップ/magicPod/appium_gui.logにも同様の内容が残ります
p MagicPodDesktop画面下にある「Debug」チェックをONにするとより詳細なログが出ます
n ウィンドウサイズを拡大する必要があります
p前回の画面キャプチャ取得時の画像とXMLn デスクトップ/magicPod/capture_temp.***
p テスト失敗時の画面キャプチャの画像とXMLn デスクトップ/magicPod/test_end_screen_shot.***