มาลอง Automated Test Mobile on macOS (Robot Framework)

Panaya Loymee
Nextzy
Published in
5 min readNov 20, 2017
https://www.todaysoftmag.com/author/504/silviu-lascu

บทความนี้จะพูดถึงการเทส moblie เป็นหลัก พอดีว่ามีโอกาสได้ทำ Automated Test ใน Mac mini ซึ่งเดิมที่แพรใช้ Windows ในการทำ Automated Test แต่การใช้ Windows ในการเทสก็มีข้อจำกัดในการเทสอยู่บ้าง ซึ่งข้อจำกัดที่กล่าวมานั้นคือการเทส mobile ระบบ iOS

ทำไมถึง Test Mobile iOS ใน Windows ไม่ได้ ?

>> การทดสอบ Mobile ระบบ iOS จำเป็นต้องใช้โปรแกรมเฉพาะของมันเนื่องจากโปรแกรมบางตัวสามารถรันบนระบบปฎิบัติการ macOS

สิ่งที่ทุกคนต้องเตรียมให้พร้อมก่อนการ Automated Test (Mobile) มีดังนี้

  1. Visual Studio Code (แล้วแต่ความถนัดของผู้ใช้)
  2. Android Studio
  3. Xcode
  4. Appium (How to Install Appium Server)
  5. Python (OSX — Nothing to be done, python is present by default.)
  6. Robot Framework
    pip install robotframework
    easy_install robotframework
  7. AppiumLibrary
    pip install robotframework-appiumlibrary
    ** Install (or upgrade) the latest Selenium2Library 3 release **
  8. AppiumLibrary
    pip install robotframework-appiumlibrary
  9. IOSLibrary
    pip install — upgrade robotframework-ioslibrary
  10. AndriodLibrary
    pip install — upgrade robotframework-androidlibrary

เมื่อติดตั้งทุกอย่างเรียบร้อยแล้วก็จะมาถึงจุดที่ทุกคนรอค่อยนั้นคือการ Automated Test Mobile แต่ Platform ของ Mobile นั้นมีอยู่ 2 Platform นั้นคือ Android และ iOS โดยแพรจะเริ่มจาก…

Android

http://www.thepower.co.th/7-cool-things-android-can-do/

ต้องบอกก่อนเลยว่า ก่อนที่จะทำการทดสอบ Adroid จะมีการ Set Path ที่ยุ่งยากนิดหน่อยแต่ไม่ยากเกินไปสำหรับมือใหม่

How to Setting Path Android_Home and Java_Home

  • ใช้คำสั่ง sudo nano ~/.bash_profile
    จากนั้นใสรหัส Password
คำสั่งเพื่อเข้าไป Set path Android_Home and Java_Home
  • ทำการ Set ตำแหน่งของ Android_Home และ Java_Home
export PATH=$ANDROID_HOME/platform-tools:$PATH
export PATH=$ANDROID_HOME/tools:$PATH
export ANDROID_HOME=/Users/Shared/Android/sdk
export JAVA_HOME=$(/usr/libexec/java_home)
export PATH=$JAVA_HOME/bin:$PATH
หน้าจอ Terminal เมื่อ Set Path เสร็จสิ้น
เมื่อ Set Path เสร็จสามารถเข้ามาที่ไฟล์ .bash_profile เพื่อตรวจสอบ

เมื่อทำการ Set Path Android_Home และ Java_Home เสร็จแล้วขั้นตอนต่อมาคือการ เปิด Emulator ซึ่งมีวิธีดังนี้

List Emulator and Open Emulator

  • List Emulator
    cd ~/Android/Sdk/tools/bin && ./avdmanager list avd
    Ex. nextzycnxs-mini:Shared nextzycnx$ cd Android/Sdk/tools/bin && ./avdmanager list avd
แสดงคำสั่งที่ใช้ในการ List Emulatro
รายชื่อ List Emulator ที่มีทั้งหมด
  • Open Emulator
    cd ~/Android/Sdk/tools && ./emulator -avd NAME_OF_YOUR_DEVICE
    Ex. nextzycnxs-mini:Shared nextzycnx$ cd Android/Sdk/tools && ./emulator –avd Nexus_5X_API_26
คำสั่งเปิด Emulator
เมื่อเปิด Emulator เสร็จ

*** หมายเหตุ *** ในการใช้คำสั่งเพื่อ แสดง Emulator ทั้งหมด หรือคำสั่งเปิด Emulator ต้องตรวจตำแหน่งของ Directory ว่าอยู่ตำแหน่งเดียวกันแล้ว

ตำแหน่งที่อยู่ Directory Android

คำสั่งในการเปิด Application แบบ Automated

  1. เตรียม test script (android)
Test Script (Android)

โดยสิ่งที่สำคัญให้ใส่ค่า Capabilities ให้ถูกต้องและครบถ้วน สามารถดูได้จาก AppiumLibrary ที่ Keyword ชื่อ Open Application

AppiumLibrary

จะรู้ได้อย่างไรว่าต้องกำหนดค่าอย่างไร

${REMOTE_URL}     http://localhost:4723/wd/hub      # URL to appium server
${PLATFORM_NAME} Android
${PLATFORM_VERSION} 8.0.0
${DEVICE_NAME} Nexus_5X_API_26
${APP_PACKAGE} com.xxx.xxxx.xxxxx.xxxx
${APP_ACTIVITY} com.xxx.xxx.xxxx.xxxxx.xxxx.xxxxxActivity

${REMOTE_URL} คือ URL ของ Appium server ใช้ตามของ Library ได้เลย
${PLATFORM_NAME} คือ Platform ของโทรศัพท์ซึ่งถ้าหากเป็น Android ให้ใส่ค่าเป็น Android ได้เลย
${DEVICE_NAME} คือ ชื่อของ Emulator ที่จะเรียกใช้งาน
${APP_PACKAGE} คือ ชื่อแพ็คเก็จของแอพที่จะใช้ (อาจจะต้องถาม Programmer หรือ สามารถดูเองได้จาก Android Studio)
${APP_ACTIVITY} คือ ชื่อ Activity ของแอพที่จะใช้ (อาจจะต้องถาม Programmer หรือ สามารถดูเองได้จาก Android Studio)

วิธีดูชื่อ Package และ Activity ใน Android Studio แบบพื้นฐาน

>> Project > Project Name > app > src > main > AndroidManifest.xml
จะเจอไฟล์ที่ชื่อ AndroidManifest.xml เราสามารถเข้าไปดูข้อมูล Package และ Activity ได้ แต่บางโปรเจคอาจจะมีความซับซ้อนหากไม่ทราบจริงๆ ถามจาก Programmer จะดีที่สุด

ที่อยู่ของไฟล์ AndroidManifest.xml

2. รันคำสั่ง Robot ซึ่งสามารถใช้ได้ 2 คำสั่งคือ

pybot File_Name.robot
ตัวอย่างเช่น pybot AndroidTest.robot (เนื่องจากชื่อไฟล์ชื่อ AndroidTest.robot)
robot File_Name.robot
ตัวอย่างเช่น robot AndroidTest.robot (เนื่องจากชื่อไฟล์ชื่อ AndroidTest.robot)

*** หมายเหตุ ***หากจะใช้คำสั่ง robot File_Name.robot python ต้องเป็น version 3 ขึ้นไป และต้องตรวจตำแหน่งของ Directory ว่าอยู่ตำแหน่งที่อยู่เดียวกับไฟล์ Test Script ที่จะทดสอบด้วยหรือไม่

คำสั่งรัน Robot Framework และ Test Report
ภาพรวมเวลา Test Android

Terminal ที่ไม่สามารถปิดได้คือ Appium และ Emulator เพราะถ้าปิด มันจะถือเป็นการปิดตัว Emulator และ ปิดการทำงานของ Appium

iOS

http://media.idownloadblog.com/wp-content/uploads/2016/09/iPhone-7-wallpaper-desktop-design_hero_large.jpg

ส่วนของ iOS จะไม่มีความยุ่งยากเหมือนของ Android ที่ต้อง Set Path นู้นนี่นั้น แต่ความยากมันอยู่ตรงที่เราต้องมีเครื่อง Mac (ราคามันก็จะน่ารักประมาณหนึ่ง) เพื่อเอาไว้เปิดโปรแกรม Xcode ซึ่งโปรแกรม Xcode จะมีให้ติดตั้งได้เฉพาะระบบปฎิบัติการ macOS เท่านั้น และ Simulator ของ iOS นั้นไม่มีตัวเสริมเหมือน Android ที่หากไม่ลง Android Studio ก็จะมี Genymotion ทำหน้าที่เป็นเป็น Emulator แทน ดังนั้นเราจึงจำเป็นต้องลงโปรแกรม Xcode เพื่อจะใช้ Simulator ได้

คำสั่งในการเปิด Application แบบ Automated

  1. เตรียม test script (iOS)
Test Script (iOS)

โดยสิ่งที่สำคัญให้ใส่ค่า Capabilities ให้ถูกต้องและครบถ้วน สามารถดูได้จาก AppiumLibrary ที่ Keyword ชื่อ Open Application

AppiumLibrary

จะรู้ได้อย่างไรว่าต้องกำหนดค่าอย่างไร

·${REMOTE_URL}     http://localhost:4723/wd/hub      # URL to appium server
·${PLATFORM_NAME} iOS
·${PLATFORM_VERSION} 11.0
·${DEVICE_NAME} iPhone Simulator
·${APP_LOCATION} /Users/nextzycnx/Library/Developer/Xcode/DerivedData/HelloWorld-gqpazzdeiwoyuvffapoiivcfsjhr/Build/Products/Debug-iphonesimulator/HelloWorld.app
·${BUNDLE_ID} com.nextzy.HelloWorld

${REMOTE_URL} คือ URL ของ Appium server ใช้ตามของ Library ได้เลย
${PLATFORM_NAME} คือ Platform ของโทรศัพท์ซึ่งถ้าหากเป็น iOS ให้ใส่ค่าเป็น iOS ได้เลย
${PLATFORM_VERSION} คือ เวอร์ชั่นของ iOS ที่ต้องการใช้
${DEVICE_NAME} คือ ชื่อของ Simulator ที่จะเรียกใช้งาน
${APP_PACKAGE} คือ ชื่อแพ็คเก็จของแอพที่จะใช้ (อาจจะต้องถาม Programmer หรือ สามารถดูเองได้จาก Xcode)
${BUNDLE_ID} คือ ชื่อ Bundle ของแอพที่จะใช้ (อาจจะต้องถาม Programmer หรือ สามารถดูเองได้จาก Xcode)

  • วิธีดูชื่อ Location และ Bundle ใน Xcode แบบพื้นฐาน

>> Bundle > คลิกที่ ชื่อโปรเจ็คซึ่งในตัวอย่างคือ HelloWorld

ที่อยู่ของ Bundle

>> Location > คลิกที่ Xcode > Preferences…

การเปิดตำแหน่งที่อยู่แอปพลิเคชั่น
Path ที่อยู่ของแอปพลิเคชั่น
เมื่อคลิกเพื่อดูที่อยู่ Path
ที่อยู่ Path แบบเต็มๆที่ใช้ใน Localtion

2. สามารถใช้คำสั่งรัน Robot ได้โดยไม่จำเป็นต้องเปิด Simulator ก่อน ซึ่งสามารถรันได้สองคำสั่ง

pybot File_Name.robot
ตัวอย่างเช่น pybot iOSTest.robot (เนื่องจากชื่อไฟล์ชื่อ iOSTest.robot)
robot File_Name.robot
ตัวอย่างเช่น robot iOSTest.robot (เนื่องจากชื่อไฟล์ชื่อ iOSTest.robot)

*** หมายเหตุ *** หากจะใช้คำสั่ง robot File_Name.robot python ต้องเป็น version 3 ขึ้นไป และต้องตรวจตำแหน่งของ Directory ว่าอยู่ตำแหน่งที่อยู่เดียวกับไฟล์ Test Script ที่จะทดสอบด้วยหรือไม่

คำสั่งรัน Robot Framework และ Test Report
ภาพรวมเวลา Test iOS

Terminal ที่ไม่สามารปิดได้คือ Appium เหตุผลก็คือหากปิด Appium จะหยุดการทำงาน และ Appium คือปัจจัยหลักในการรัน Automated

ยังไงก็ขอฝากบทความนี้ไว้ หากมีโอกาสได้ลองอะไรใหม่ๆ แพรจะมาแชร์ให้อีกนะค่ะ

--

--