「変数」の機能を使うと、画面上の値などを一時的に保存しておき、後から参照することができます。たとえば、「あるUI要素のテキストを変数に保存し、別の画面の他のUI要素のテキストと一致するかチェックする」といった使い方が可能です。
目次
1.変数に値を保存する
- 「値を保存」コマンドで、画面上の要素の値を変数に保存できます。(図1)
- 「現在時刻を元に生成したユニークな値を保存」コマンドで、毎回ユニークな値を変数に保存できます。毎回違うIDでユーザーを登録するテストなどに利用できます。
- 「固定値を保存」コマンドで、指定した値を変数に保存できます。
2.変数の値を参照する
保存した変数は、その行以降のコマンドのテキスト中で${変数名}の形式で参照できます。
- 保存した変数は同一のテストケースからのみ参照することができます。
- 変数保存コマンドでは変数名は${...}無しで記述しますが、変数参照時は${...}で参照します。注意してください。
ロケータ内でも${変数名}の形式で変数を参照できます。詳しくはこちらをご確認ください。
3.特別な変数
以下の変数はMagicPodで定義された特別な変数で、変数保存コマンドを使うことなく、${変数名}の形式で参照することができます。
ENVIRONMENT | モバイルアプリ/ブラウザ | テスト実行環境。「local_pc」「magic_pod」「browserstack」「headspin」「remote_testkit」「saucelabs」のいずれか。「クラウド」を選択した場合は「magic_pod」 |
OS | モバイルアプリ/ブラウザ | モバイルアプリの場合は「ios」「android」のいずれか、ブラウザの場合は「windows」「mac」「linux」のいずれか |
VERSION | モバイルアプリ | OSのバージョン。「13.3」「10」など |
MODEL | モバイルアプリ | 機種。「iPhone 8」「Nexus 5X」など |
DEVICE_TYPE | モバイルアプリ/ブラウザ | 端末の種類。モバイルアプリの場合は「simulator」「emulator」「arm64_v8a_emulator」「real_device」のいずれか、ブラウザの場合は「desktop」「mobile_emulation_by_chrome」のいずれか |
DEVICE_REGION | モバイルアプリ | 端末の地域。「Default」「AU」「BR」「CA」「CN」「FR」「DE」「IN」「ID」「IT」「JP」「MX」「NL」「RU」「SA」「KR」「ES」「CH」「TW」「TR」「GB」「US」のいずれか |
DEVICE_LANGUAGE | モバイルアプリ |
端末の言語。「default」「 en」「ja」「ko」「zh」「de」「it」「nl」「pt」「fr」「id」「th」「ar」「ru」「es」「bg」「cs」「hu」のいずれか |
APP_PACKAGE | モバイルアプリ | Androidアプリのパッケージ名。Androidでのみ利用可能。「io.appium.android.apis」など |
BROWSER | ブラウザ | ブラウザ名。「chrome」「firefox」「internet_explorer」「safari」「edge」のいずれか |
BASE_URL | ブラウザ | テスト実行設定で指定した「ベースURL」 |
- VERSION、MODEL、DEVICE_TYPE、DEVICE_REGION、DEVICE_LANGUAGEなどの値は、テスト実行設定で指定した値で、実際に使用された端末の情報とは異なる場合があるので注意してください。例えば外部クラウドサービスなどで機種を単に「iPhone」と指定した場合、MODELの値も「iPhone」で、「iPhone 7」などの厳密な機種名ではありません。
- 上記の特別な値は、同じ名前の変数を変数保存コマンドや後述のシークレット変数で上書きしてしまうと参照できなくなるので注意してください。
4.マスクしたい変数を扱う
Web APIのアクセストークンやパスワード入力の値など、テストケースの編集画面や結果画面、ログ等で表示したくない値はシークレット共有変数として登録することでマスクできます。共有変数はテスト実行設定ダイアログの詳細設定タブで登録します。
左側の列に任意の変数名、右側に値を入力します。共有変数をシークレット共有変数に変更する際は、赤枠の鍵マークを押下します。
設定した変数は、通常の変数と同じように${...}で参照できます。たとえばWeb APIコールで使う場合は以下のようになります。
シークレット共有変数の値は、テスト結果のログ上で「********」のようにマスクされます。
なお、この機能はマスクされた値が見えないことを100%保証するものではありません。例えば、マスクされた値をパスワード入力エリア以外の場所にテキスト入力すれば、アプリケーションの画面上でその値は簡単に表示されてしまいます。
5.テストケース間で変数を共有する
・テスト一括実行時に共有変数を使う
テスト対象アプリのログイン情報など、同一プロジェクト内の複数のテストケース間で共通な値は、共有変数として登録することができます。
一括実行設定画面から、詳細設定タブを選択し登録します。
図5 共有変数の設定
・コマンドラインから共有変数を使う
開発環境と本番環境で渡したい共有変数が異なる等、テスト実行時に指定の共有変数を外側から渡したい場合はコマンドラインから実行する際に共有変数を指定することができます。
クラウド環境の場合
クラウド環境の場合、magicpod-api-clientを使い一括実行する際に、test_settings_numberを使用しないことで、共有変数の値を渡すことができます。
まず、MagicPodの一括テストの詳細設定画面にて共有変数も含めて一旦セットします。その後、そしてコマンドラインで実行するための文をコピーします。
この時「(詳細設定)」とついているものを選択します。そうすることでtest_settings_numberを使用しないものをコピーできます。「shared_variables」というパラメータに、共有変数を自由にセットください。
ローカル環境の場合
ローカル環境の場合、共有変数を使ったテストケースをコマンドラインから実行する方法は2つあります。
1.magic_pod_config.jsonファイルに変数の値を直接記述する
たとえば元々このようなJSONファイルでテストを実行していたとします。
{
"owner": "SampleCompany",
"project": "SampleApp",
"capabilities": {
"platformName": "iOS",
"platformVersion": "10.3",
"deviceName": "iPhone 7 Plus",
"app": "${HOME}/magicpod_demo_app.app",
"automationName": "XCUITest"
},
"sendMail": true,
"workDir": "${HOME}/magicpod-work"
}
少し複雑になりますが、以下のように設定を追記すると共有変数を渡して実行することができます。この例では、USERNAMEとPASSWORDという2つの変数(PASSWORDはシークレット共有変数)を設定しています。
{
"owner": "SampleCompany",
"project": "SampleApp",
"capabilities": {
"platformName": "iOS",
"platformVersion": "10.3",
"deviceName": "iPhone 7 Plus",
"app": "${HOME}/magicpod_demo_app.app",
"automationName": "XCUITest"
},
"sendMail": true,
"workDir": "${HOME}/magicpod-work",
"testCondition": {
"shared_variables": [
{
"key": "USERNAME",
"value": "test_user",
"secret": false
},
{
"key": "PASSWORD",
"value": "secret_password",
"secret": true
}
]
}
}
テストを実行するときのコマンドは通常のコマンドライン実行と同じです。
2.環境変数を使って設定する
もう少し厳密に、シークレット共有変数の値をファイルに残さずに管理したいという場合には環境変数を使って設定することもできます。その場合のmagic_pod_config.jsonの記述は以下のようになります。
{
"owner": "SampleCompany",
"project": "SampleApp",
"capabilities": {
"platformName": "iOS",
"platformVersion": "10.3",
"deviceName": "iPhone 7 Plus",
"app": "${HOME}/magicpod_demo_app.app",
"automationName": "XCUITest"
},
"sendMail": true,
"workDir": "${HOME}/magicpod-work",
"testCondition": {
"shared_variables": [
{
"key": "USERNAME",
"value": "test_user",
"secret": false
},
{
"key": "PASSWORD",
"value": "${PASSWORD}",
"secret": true
}
]
}
}
この場合は実行時に実際の値を与える必要がありますので、実行のコマンドは以下のようになります。
PASSWORD=secret_password "MagicPodDesktop.app/Contents/MacOS/MagicPodDesktop" run \
--magic_pod_config=magic_pod_config.jsonのフルパス
6.「日時計算」コマンドの日付書式
「日時計算」のコマンドを利用する場合に、最初から用意されている「日付種別」だけではやりたいことが実現できない場合があります(例えば「05月」のような、ゼロ埋めされた月を取得したいなど)。このような場合には、「日付種別」を「日付書式指定」にすることで、様々な「日付書式」を指定できます。例えば、ゼロ埋めされた月の値を変数に保存したい場合は、「日付書式」に「MM月」を指定します。
他には、「yyyy/LL/dd(EEE) hh:mm:ss」と書くことで、「2020/05/01(金) 05:47:25」のような日時を変数保存することができます。「日付書式」の記法は、date-fnsというライブラリのものが利用できます。より細かい記述方法等に関してはこちらをご参照ください。
また、「日付書式」入力エリアには変数を使うこともできます。そのため、 例えば、「MM月」という文字列を変数「MONTH_FORMAT」に予め保存しておき、 日付書式に${MONTH_FORMAT}を指定することも可能です。
なお、「日時計算」コマンドは「システム」カテゴリの中にあります。ご注意ください。
図7 日時計算コマンド
7.変数がセットされる順序
データパターンの値や変数が複数ある場合、以下の順序でセットされます。
- 共有変数
- 多言語データパターン
- データパターン
- テストスクリプト中の変数保存コマンド
- 既にセットされた変数は、${...}で参照することができます。
- 同じ名前の変数が既にセットされている場合、新しくセットした値で古い値は上書きされます。