寫 iOS UIAutomation 自動化測試,如何透過 shell script 傳送參數至 JavaScript 程式中?

最近在做 iOS UIAutomation 自動化測試時遇到一個問題,當有一個畫面需要做登入動作時,我們會將登入的帳號密碼寫入某個 JavaScript 檔,把測試的帳號密碼直接固定寫死,程式碼如下所示:

const ACCOUNT = "markchang@example.com";
const PASSWORD = "mark123";

這樣子的寫法是可以正常運作沒問題,但是這樣的做法不是很好,因為當我們要換其他帳號登入時,就需要每次固定去找到這個 JavaScript 檔案,再找尋這段設定帳號密碼在第幾行去修改,顯得相當不便。

那我們該怎麼解決這問題,讓更換其他帳密登入時能更便利?

我們在啟動自動化測試時會透過 shell script 來啟動執行,所以我們可以透過 shell script 來傳送帳號密碼,那問題來了我們又該如何將參數傳遞至 JavaScript 檔案呢?

可透過傳入 shell script 的參數將帳密資訊傳入,第一個參數為帳號,值為 markchang@example.com;第二個參數為密碼,值為 mark123,指令如下所示:

sh build.sh markchang@example.com mark123

接著透過 shell script 來產生一個文字檔案,讓它產生出來的檔案副檔名為 js (JavaScript),shell script 指令如下所示:

#! /bin/bash

# Assign the first argument to the login account
ACCOUNT=$1
# Assign the second argument to the login password
PASSWORD=$2

# Generates a JavaScript file
OUTPUT_FILE_PATH="loginData.js"
cat <<EOF >$OUTPUT_FILE_PATH
const ACCOUNT = "$ACCOUNT";
const PASSWORD = "$PASSWORD";
EOF

透過 cat 指令來產生文字檔,在 > 字元後面我們可以設定輸出的 JavaScript 檔案的路徑,透過 OUTPUT_FILE_PATH 變數來設定要輸出檔案路徑與檔名,本範例設定為 loginData.js,接著把要寫入檔案的文字寫在 “<< EOF > {OUTPUT_FILE_PATH}” 至 “EOF” 區間中,如果要在區間裡的文字要寫入 shell script 裡的變數資料,我們就在這變數前加入 $ 字元即可。

那我們所寫的 JavaScript 自動化腳本就可以透過 import 的方式將剛才產生的 loginData.js 檔案匯入至會使用到帳號密碼的 JavaScript 檔案,透過以下程式將 loginData.js import 至 JavaScript 檔:

#import "loginData.js"

這樣就可以解決每次更換使用者帳號,還要再去找尋帳號密碼的變數在哪個 JavaScript 檔案,然後再去修改登入帳密的麻煩。

以上的 shell script 指令還有一個地方可以再做加強,就是當我們執行 shell script 時我們沒傳入帳號密碼時我們可以填入預設使用者的帳號密碼,透過以下指令來設定變數的預設值:

# 如果變數 var 尚未設定或是 null,則變數 var 的內容將等於 word 這個字串,並使用這個新的值。
${var:=word}

最後修改後的 shell script 指令如下所示:

#! /bin/bash

# Step 1.
# Assign the first argument to the login account
ACCOUNT=$1
: ${ACCOUNT:="default@example.com"}
echo ACCOUNT=$ACCOUNT
# Assign the second argument to the login password
PASSWORD=$2
: ${PASSWORD:="default_password"}
echo PASSWORD=$PASSWORD

# Step 2.
# Generates a JavaScript file
OUTPUT_FILE_PATH="loginData.js"
cat <<EOF >$OUTPUT_FILE_PATH
const ACCOUNT = "$ACCOUNT";
const PASSWORD = "$PASSWORD";
EOF

參考文章:

[1] 第二十一章 Shell Script

[2] ios ui automation – iOS UIAutomation : Command line Instruments sets environment variables using -e. Is there a way to access those variables in javascript’s UIATarget? – Stack Overflow

[3] BASH shell scripting tip: Set default values for variable – nixCraft

廣告

發表迴響

Please log in using one of these methods to post your comment:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s