Coding Gun

การทำ Automated Testing ด้วย Appium

Appium คือเครื่องมือสำหรับทำ Automated Testing บน Mobile และ Tablet ทั้งบนระบบปฎิบัติการ iOS และ Android รวมทั้งยังสามารถนำไปทดสอบ Windows desktop Application และ MacOS Application ได้อีกด้วย(Cross-platform testing automation) ปัญหาของการทำ Automated testing บน Mobile และ Windows desktop application คือ บนแต่ละ Platform จะมีเครื่องมือที่ใช้ทดสอบแยกกันทำให้การเรียนรู้วิธีการเขียน Test code และการ Maintain code ในแต่ละ Platform นั้นเป็นเรื่องยุ่งยาก

Appium ทำงานยังไง?

Appium จะสร้าง Server ขึ้นมาเพื่อรอรับคำสั่งจาก Client ซึ่งก็คือ Test Script ที่เราเขียนขึ้นมา หลังจากนั้น Appium Server จะประมวลผลแล้วส่งคำสั่งเข้าไปควบคุม Element ต่างๆบนหน้าจอ โดยผ่านทาง Appium Driver ซึ่งตัว Appium Driver เองก็จะเข้าไปติดต่อกับ Accessibility Service ที่มีอยู่บน Platform ต่างๆอยู่แล้ว หรือใน iOS และ Android Appium driver จะเรียกใช้ UI Testing framework ของ Mobile แต่ละเจ้า ซึ่งการทำงานของ Appium จะเป็นดังรูป

Appium ทำงานอย่างไร
Appium ทำงานอย่างไร?

ในปัจจุบันเรามี W3C Webdriver เป็นมาตรฐานสำหรับการควบคุมการส่งคำสั่งไปยัง UI ใน Platform ต่างๆ ด้วยภาษาเดียวกัน ทำให้ไม่ต้องต่างคนต่างทำอีกต่อไป

Appium Drivers

เราสามารถเลือกใช้งาน Appium ตาม platform ต่างๆได้ดังนี้

  1. iOS เราจะใช้ Appium Driver ชื่อว่า XCUITest
  2. Android เราจะใช้ Appium Driver ชื่อว่า UIAutomator2 หรือ Espresso
  3. Windows เราจะใช้ Appium Driver ชื่อว่า windows ซึ่งเป็น Open-source
  4. MacOS เราจะใช้ Appium Driver ชื่อว่า mac2

คุณสามารถเข้าไปดู Appium drivers อื่นๆ เพิ่มเติมได้ที่นี่

ข้อดีของ Appium

การใช้งาน Appium จะสามารถลดปัญหาของการทำ Automated testing ทั้งบน Mobile และ Windows desktop application ลงได้ ด้วยความสามารถต่างๆเหล่านี้

  1. รองรับการเขียน Test code หลายภาษา ดังนั้นเราสามารถเลือกภาษาที่เราถนัดได้เลย
  2. สามารถเลือก Platform ที่เราต้องการทดสอบได้ตาม Appium Driver ที่เราติดตั้ง
  3. Syntax ที่ใช้ในการเลือก Element เป็นแบบเดียวกันทุก Platform(ใช้ Syntax เดียวกับ Selenium)
  4. Tester ที่เขียน Selenium อยู่แล้วสามารถเริ่มต้นใช้งาน Appium ได้ง่าย
  5. คุณสามารถใช้ฟังก์ชั่นพื้นฐานบน Plaform ต่างๆ เช่น Copy ข้อความไปยัง Clipboard หรือ Capture screen ได้ด้วย Test code ชุดเดียวกัน
  6. การเปลี่ยนแปลงที่เกิดขึ้นกับ Platform ต่างๆจะไม่ส่งผลกระทบต่อ Test code ของเรา เพราะเราทำงานผ่านทาง Appium Driver
  7. สามารถทดสอบ Virtual devices ที่อยู่บน Cloud services ได้ง่าย

ขั้นตอนการติดตั้ง Appium

  1. ติดตั้ง NodeJS โดยสามารถ Download NodeJS version ล่าสุดดได้ที่นี่

  2. คิดตั้ง Appium server โดยใช้คำสั่ง

    $ npm install -g appium
    
  3. ติดตั้ง Appium Driver เพื่อให้สามารถ Automated UI ของ Platform นั้นๆได้

    $ appium driver install [ชื่อ Platform]
    

    ซึ่งเราจะต้องเลือก Appium drivers จาก list รายการด้านบน

    ถ้ายังไม่แน่ใจว่าจะติดตั้ง Appium driver ตัวไหนให้ใช้คำสั่ง appium driver list เพื่อดึงรายการของ Appium driver ออกมาดู เช่นถ้าเราต้องการติดต้ัง Appium driver สำหรับ Android เราจะใช้คำสั่ง

    $ appium driver install uiautomator2
    

    หลังจากที่การติดตั้งเสร็จเรียบร้อยเราจะได้ผลลัพธ์จากคำสั่ง appium driver list ออกมาเป็นแบบนี้

    ✔ Listing available drivers
    - uiautomator2@3.8.0 [installed (npm)]
    - xcuitest [not installed]
    - espresso [not installed]
    - mac2 [not installed]
    - windows [not installed]
    - safari [not installed]
    - gecko [not installed]
    - chromium [not installed]
    

    ถือว่าการติดต้ัง Appium เสร็จสมบูรณ์

  4. ติดตั้ง Android Studio หรือ XCode ตาม Mobile platform ตาม Application ที่เราต้องการทดสอบ

  5. เมื่อเราต้องการทดสอบ เราต้อง start Appium server ขึ้นมาใช้งาน ซึ่งจะใช้คำสั่ง

    $ appium
    

    หลังจากนั้น Appium จะสร้าง Server ขึ้นมาให้บริการอยู่ที่ Port 4372 โดยมีผลลัพธ์ออกมาแบบนี้

    [Appium] Welcome to Appium v2.11.4
    [Appium] The autodetected Appium home path: /Users/phanupong/.appium
    [Appium] Attempting to load driver uiautomator2...
    [Appium] Requiring driver at /Users/phanupong/.appium/node_modules/appium-uiautomator2-driver/build/index.js
    [Appium] AndroidUiautomator2Driver has been successfully loaded in 0.324s
    [Appium] Appium REST http interface listener started on http://0.0.0.0:4723
    [Appium] You can provide the following URLs in your client code to connect to this server:
        http://127.0.0.1:4723/ (only accessible from the same host)
        http://192.168.1.104:4723/
    [Appium] Available drivers:
    [Appium]   - uiautomator2@3.8.0 (automationName 'UiAutomator2')
    [Appium] No plugins have been installed. Use the "appium plugin" command to install the one(s) you want to use.
    

เริ่มต้นเขียน Test code ตัวแรก

หลังจากที่เราติดตั้ง Appium เรียบร้อยแล้วขั้นตอนต่อไปคือการเขียน Test code ซึ่งเราจะเขียน Test code สำหรับการทดสอบ Android โดยเริ่มจากการติดตั้ง Eyes Package เพื่อให้การเขียน Code ง่ายขึ้น ด้วยการเพิ่ม Dependencies เข้าไปใน build.gradle แบบนี้

dependencies {
    compile 'com.applitools:eyes-appium-java5:+'
}

หลังจากนั้นก็เขียน Code เพื่อทำการทดสอบได้เลย

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.android.AndroidDriver;
import java.net.URL;
import com.applitools.eyes.appium.Eyes;

public class Appium_native_java {

    public static void main(String[] args) throws Exception {

        String APPIUM_SERVER_URL = "http://127.0.0.1:4723";

        // Set desired capabilities.
        DesiredCapabilities capabilities = new DesiredCapabilities();

        capabilities.setCapability("platformName", "Android");
        capabilities.setCapability("deviceName", "DEVICE_NAME");
        capabilities.setCapability("platformVersion", "PLATFORM_VERSION");
        capabilities.setCapability("app", "app-debug.apk");
        capabilities.setCapability("browserName", "");
        capabilities.setCapability("automationName", "UiAutomator2");

        // Open the app.
        WebDriver driver = new AndroidDriver(new URL(APPIUM_SERVER_URL + "/wd/hub"), capabilities);

        // Initialize the eyes SDK and set your private API key.
        Eyes eyes = new Eyes();
        eyes.setApiKey("YOUR_API_KEY");

        eyes.setForceFullPageScreenshot(true);

        try {
            eyes.open(driver, "Contacts!", "My first Appium native Java test!");
            eyes.checkWindow("Start screen");

            // เขียนคำว่า Hello Appium ลงใน editText1
            driver.findElement(By.id("com.demo.testappium:id/editText1")).sendKeys("Hello Appium");
            // กดปุ่มปิด Application
            driver.findElement(By.id("com.demo.testappium:id/btnClose")).click();

            eyes.close();

        } finally {
            driver.quit();
            eyes.abortIfNotClosed();
        }
    }
}

ซึ่งสิ่งที่เราต้องระบุใน Test code คือ

  1. กำนหนดที่อยู่ Appium server URL ไว้ในบรรทัดที่ 11
  2. กำหนดค่า Configuration ในบรรทัดที่ 14 ซึ่งใน DesiredCapabilities จะกำหนด Platform, Devices และ ชื่อ App ที่ต้องการทดสอบ
  3. ติดต่อกับ Appium server ด้วยคำสั่งในบรรทัดที่ 24
  4. นำ APIKEY ของ Appium ไปใส่ในบรรทัดที่ 28
  5. เขียน Code เพื่อทดสอบ ในบรรทัดที่ 37 และ 39
  6. ปิด connection ในบรรทัดที่ 41

สุดท้ายเมื่อเรา run Test code ตัวนี้ เราจะเห็น Mobile Application ชื่อ testappium ถูกเปิดขึ้นมาแล้วก็พิมพิ์คำว่า Hello Appium ขึ้นมาหลังจากนั้นก็ปิด Application ลงไป

Phanupong Permpimol
Follow me