KINTO Tech Blog
AutomationTesting

テスト仕様書に基づいてAppium 自動化ソースコードを作成する方法

Cover Image for テスト仕様書に基づいてAppium 自動化ソースコードを作成する方法

初めに

KINTOテクノロジーズのQAグループに所属しているパンヌウェイ(PannNuWai)です。QAグループでアプリチームのテスト自動化担当としてKINTOかんたん申し込みアプリのテスト自動化環境の構築と整備をしていたり、テスト仕様書とテストスクリプトを書いています。

前回は、Appiumを利用したDarkMode自動化テストに関する技術ブログを記載しました。

Appiumによる自動化テストに携わったのは3年になり、自分のチームでは自動化テストソースコード前にテスト仕様書作成の順番で行なっております。
だからAppiumのJavaソースコード書く時とても役に立ているテスト仕様書作成方法についてお話ししたいと思います。

テスト仕様書作成前になぜこの仕様書作成方法が必須ですかの質問について回答させて頂きます。

テスト仕様書作成のメリット

  • 自動化テストソースコード書く場合時間削減できる
  • 自動化テスト者以外の方にも分かり安い
  • 画面ごと、ソースコードクラスと操作機能によって分別してるので読みやすい

本記事ではKINTOかんたん申し込みアプリのログインシナリオ仕様書をサンプルテスト仕様書として説明します。

ログインステップ

こちらにKINTOかんたん申し込みアプリログインの各ステップについて教えます。

ステップ 1

MainPage

ステップ 2

MyPagingPage

ステップ 3

LoginPage

ログインに関するテストデータを収集する

ログインテスト仕様書作成の初期ステップとして、テスト環境、テストアカウント、パスワード、テスト実行後に自動出力されているレポート名、テスト実行ファイルなどのテストデータを収集する必要があります。それでは、iOSのログインシナリオ仕様書から始めましょう。

データ名 データ情報
環境 Stg4
テストアカウント ******@gmail.com
パスワード ********
レポート名 iOS用
iOS.poc.login
android用
android.poc.login
実行ソースファイル iOS用
iOS.poc.login.xml
android用
android.poc.login.xml

iOS用のログインシナリオ仕様書

確認機能 画面 操作 確認ポイント 実行ファイル(xml) ソースファイル メソッド
ログインする メイン画面 マイページロゴを押下する ログインボタンが押下できる iOS.poc.login.xml iOS.MainPage clickMyPagingLogo
マイページ画面 『お申し込み内容』を押下する
『ログインはこちら!』を押下する
iOS.MyPagingPage clickApplyTab
clickLoginHereButton
ログイン画面 『メールアドレス(KINTO ID)』に上記のテストアカウントを記入する
『ログインパスワード』に上記のパスワードを記入する
『My KINTOへログイン』を押下する
iOS.LoginPage fillMailAddress
fillPassword
clickToMyKintoLoginButton

これからシナリオ仕様書の各画面によってJavaのクラスを作成しましょう。まずは、メイン画面(MainPage.java)のマイページロゴを押下します。

MainPage.java

public class MainPage extends Base {
    public static final String MY_PAGING_LOGO = 
        "//XCUIElementTypeButton[@name=\"マイページ\"]";
    
    /**
     * メイン画面の『マイページ』ロゴのクリックするテストメソッド
     *
     * このメソッドはXPathを使用してメインページ上の"マイページ"ロゴを特定し、
     * クリックアクションを実行する
     * 
     */
    @Test(groups = "MainPage")
    public void clickMyPagingLogo() {
        driver.findElementByXPath(MY_PAGING_LOGO).click();
    }
}

ステップ 2 としてマイページ画面の『お申し込み内容』を押下した後『ログインはこちら』をクリックします。

MyPagingPage.java

public class MyPagingPage extends Base {
    public static final String APPLY_TAB = 
        "//XCUIElementTypeButton[@name=\"お申し込み内容\"]";
    public static final String LOGIN_HERE_BUTTON = 
        "//XCUIElementTypeButton[@name="My KINTOへログイン\"]";

    /**
     * マイページ画面の『お申し込み内容』をクリックするテストメソッド
     *
     * このメソッドはXPathを使用してマイページ画面の『お申し込み内容』を特定し、
     * クリックアクションを実行する
     * 
     */
    @Test(groups = "MyPagingPage", dependsOnGroups = "MainPage")
    public void clickApplyTab() {
        driver.findElementByXPath(APPLY_TAB).click();
    }

    /**
    * マイページ画面の『ログインはこちら』をクリックするテストメソッド
    *
    * このメソッドはXPathを使用してマイページ画面の『ログインはこちら』を特定し、
    * クリックアクションを実行する
    * 
    */
    @Test(groups = "MyPagingPage", dependsOnMethods = "clickApplyTab")
    public void clickLoginHereButton() {
        driver.findElementByXPath(LOGIN_HERE_BUTTON).click();
    }
}

次は ステップ 3 として『ログイン画面』にメールアドレスとパスワードを記入しながらログインボタンを押下します。

LoginPage.java

public class LoginPage extends Base {
    public static final String EMAIL_TEXT_FIELD = 
        "//XCUIElementTypeApplication[@name=\"KINTO かんたん申し込み \"]/XCUIElementTypeOther[2]/XCUIElementTypeTextField";
    public static final String PASSWORD_TEXT_FIELD = 
        "//XCUIElementTypeApplication[@name=\"KINTO かんたん申し込み \"]/XCUIElementTypeOther[3]/XCUIElementTypeSecureTextField";
    public static final String ENTER_KEY = 
        "//XCUIElementTypeButton[@name=\"Return\"]";
    public static final String TO_MY_KINTO_LOGIN_BUTTON = 
        "//XCUIElementTypeButton[@name=\"My KINTOへログイン\"]";

    /**
    * ログイン画面の『メールアドレス(KINTO ID)』にテストアカウントを記入するテストメソッド
    *
    * このメソッドはXPathを使用してログイン画面の『メールアドレス』で
    * xmlファイルのテストアカウント(Parameter)を記入する
    * 
    */
    @Parameters("email")
    @Test(groups= "LoginPage", dependsOnGroups = "MyPagingPage")
    public void fillMailAddress(String email) {
        driver.findElementByXPath(EMAIL_TEXT_FIELD).click();
        driver.getKeyboard().sendKeys(email);
    }

  /**
    * ログイン画面の『ログインパスワード』にパスワードを記入するテストメソッド
    *
    * このメソッドはXPathを使用してログイン画面の『ログインパスワード』で
    * xmlファイルのパスワード(Parameter)を記入する
    * 
    */
    @Parameters("password")
    @Test(groups= "LoginPage", dependsOnGroups = "MyPagingPage")
    public void fillPassword(String password) {
        driver.findElementByXPath(PASSWORD_TEXT_FIELD).click();
        driver.getKeyboard().sendKeys(password);
        driver.findElementByXPath(ENTER_KEY).click();
    }

    /**
    * ログイン画面の『My KINTOへログイン』を押下するテストメソッド
    *
    * このメソッドはXPathを使用してログイン画面の『My KINTOへログイン』を特定し、
    * クリックアクションを実行する
    * 
    */
    @Test(groups= "LoginPage", dependsOnGroups = "MyPagingPage")
    public void clickToMyKintoLoginButton() {
        driver.findElementByXPath(TO_MY_KINTO_LOGIN_BUTTON).click();
    }
}

下記のxmlファイルは自動化テストのテスト実施ファイルです。テスト仕様書に基づいて各機能を順番に書いています。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="iOS.poc.login">
    <test verbose="2" name="iOS.poc.login">
        <classes>
            <class name="iOS.MainPage">
                <methods>
                    <include name="clickMyPagingLogo"/>
                </methods>
            </class>
            <class name="iOS.MyPagingPage">
                <methods>
                    <include name="clickApplyTab"/>
                    <include name="clickLoginHereButton"/>
                </methods>
            </class>
            <class name="iOS.LoginPage">
                <methods>
                    <parameter name="email" value="******.gmail.com"/>
                    <parameter name="password" value="*********"/>
                    <include name="fillMailAddress"/>
                    <include name="fillPassword"/>
                    <include name="clickToMyKintoLoginButton"/>
                </methods>
            </class>
        </classes>
    </test>
</suite>

まとめ

本記事では、AppiumのJavaソースコード向けのテスト仕様書作成方法を説明しましたが、Appiumだけではなく他の自動化テストソースコード作成にも参考になるように期待しています。

Facebook

関連記事 | Related Posts

We are hiring!

【QAエンジニア】QAG/東京・大阪

QAグループについて QAグループでは、自社サービスである『KINTO』サービスサイトをはじめ、提供する各種サービスにおいて、リリース前の品質保証、およびサービス品質の向上に向けたQA業務を行なっております。QAグループはまだ成⾧途中の組織ですが、テスト管理ツールの導入や自動化の一部導入など、QAプロセスの最適化に向けて、積極的な取り組みを行っています。

【部長・部長候補】/プラットフォーム開発部/東京

プラットフォーム開発部 について共通サービス開発GWebサービスやモバイルアプリの開発において、必要となる共通機能=会員プラットフォームや決済プラットフォームの開発を手がけるグループです。KINTOの名前が付くサービスやTFS関連のサービスをひとつのアカウントで利用できるよう、様々な共通機能を構築することを目的としています。