本文へスキップ / Skip to main content
KINTO Tech Blog

約10分で読めます

QA

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

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

AI が生成した要約です。正確な内容は本文をご確認ください。

要約を読む

テスト仕様書を作ることで、自動化テストのソースコード作成時間が半分に減りました。 その結果、3人チームのテスト作業で月間15時間の時間節約が実現しました。 この方法はKINTOかんたん申し込みアプリのログインシナリオを例に、画面ごとに分けて書くことで、誰でも読みやすいようにしています。 まず、テスト環境やアカウント、パスワード、実行ファイル名など、必要なデータを収集します。 iOSの場合、環境はStg4、テストアカウントは@gmail.com、レポート名はiOS用にiOS.poc.loginとします。 テスト仕様書では、画面ごとに確認機能と操作を明確に記載しています。 メイン画面ではマイページロゴを押下し、ログインボタンが押下できるか確認します。 マイページ画面では「お申し込み内容」を押下して、「ログインはこちら!」をクリックします。 ログイン画面ではメールアドレスとパスワードを入力し、ログインボタンを押下します。 それぞれの画面に合わせてJavaクラスを作成します。 MainPage.javaにマイページロゴの操作を、MyPagingPage.javaに「お申し込み内容」の操作を、LoginPage.javaにログインフォームの操作を記載します。 各クラスには、操作のメソッド名も明記されており、実行ファイルと一致しています。 この仕組みにより、テスト仕様書が自動化ソースコードの設計に直接つながり、チーム内の理解が深まりました。 結果として、テストスクリプトの作成時間が短縮され、品質も安定しました。

初めに

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

Follow Us

XConnpassWantedly

KINTOテクノロジーズの最新情報をSNSで発信中!イベント・テックブログ更新情報もお届けします。