Cấu hình automated testing cho iOS devices trên MacOS

1/18/2019

Xin vui lòng chờ đợi
Dữ liệu bài viết đang được tải về



Về cơ bản việc automated testing trên MacOS cho iOS devices cũng tương tự như trên Windows cho Android devices. Tuy nhiên, sẽ có đôi chút khác biệt, bạn sẽ phải làm việc nhiều hơn với command line cũng như trong thực tế sẽ có những trục trặc bất ngờ chưa biết trước được:

************************

CÀI ĐẶT MÔI TRƯỜNG

*Phần mềm:
▸Homebrew
▸Carthage
▸Node & NPM
▸JDK
▸XCode 10.1
▸authorize-ios
▸ios-deploy
▸ideviceinstaller
▸ios_webkit_debug_proxy
▸Appium
▸Appium Doctor
▸Maven
▸Eclipse
▸TestNG

*Phần cứng:
▸PC: Macbook/Mac mini...
▸iOS devices: iPhone/iPad.

*Ngôn ngữ lập trình: Java.

Homebrew (https://brew.sh/)
Là một chương trình giúp tải hầu hết các phần mềm trong danh sách một cách dễ dàng và thuận tiện. Để cài đặt Homebrew, hãy mở Terminal và chạy dòng lệnh sau:


/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"


Carthage

Dùng để quản lý dependency, được yêu cầu bởi WebDriverAgent. Để cài đặt, mở Terminal, chạy lệnh sau:


brew install carthage


Để cập nhật lên version mới nhất, sử dụng lệnh:


brew upgrade carthage


Node & NPM

Node là một môi trường chạy javascript và npm là node package manager. Chúng ta cần cài Node & bởi vì Appium là một ứng dụng node.


brew install node


Để cập nhật lên version mới nhất, sử dụng lệnh:


brew upgrade node


JDK và cài đặt JAVA_HOME

Tải và cài đặt jdk-8u181-macosx-x64.dmg từ link này http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html.

Tiếp theo, bạn sẽ cần cài đặt JAVA_HOME trong .bash_profile. Trước tiên bạn sẽ cần xem JDK được cài vào chỗ nào. Hãy mở Terminal lên và chạy dòng lệnh sau:


/usr/libexec/java_home --v


Và bạn sẽ nhận được kết quả tương tự như sau:


/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home


Bây giờ, chúng ta sẽ edit bash_profile bằng vim editor. Chạy tiếp dòng lệnh sau trong Terminal:


vim ~/.bash_profile


Nhấn phím "i" để vào insert mode, sau đó di chuyển con trỏ tới một dòng mới và thêm vào 2 dòng sau:


export JAVA_HOME=[path of your java home]
export PATH=$JAVA_HOME/bin:$PATH



Nhấn "esc" và gõ ":wq" và nhấn enter để lưu và thoát vim. Tắt Terminal và mở lại để cập nhật cấu hình cho .bash_profile

Cài đặt Xcode và Simulators

Bạn có thể download Xcode trực tiếp từ Appstore (phải có Apple ID) hoặc sử dụng trực tiếp file .xip sau. Xả nén được file Xcode.app sau đó kéo thả vào Applications trong Finder.

(md5: c12844f672cf26024419f96462291d29)

Cài đặt authorize-ios

authorize-ios là một ứng dụng nhỏ cho phép pre-authorizes instruments để chạy các script UIAutomation cho các thiết bị iOS. Và bạn sẽ cần nó để chạy với các thiết bị thật.

Mở Terminal và chạy lệnh sau:


npm install -g authorize-ios


Cài đặt ios-deploy

ios-deploy là một ứng dụng nhỏ để cài đặt và debug ứng dụng cho iPhone từ dòng lệnh mà không cần tới Xcode.

Mở Terminal và chạy lệnh sau:


brew install ios-deploy


Cài đặt ideviceinstaller

ideviceinstaller là một công cụ giúp tương tác với installation_proxy của một thiết bị iOS giúp cài đặt, nâng cấp, gỡ bỏ, lưu trữ, phục hồi ứng dùng. Bạn sẽ cần ideviceinstaller để chạy test trên thiết bị thật.

Mở Terminal và chạy lệnh sau:


brew install ideviceinstaller


**Nếu đang sử dụng MacOS High Sierra hoặc Mojave, bạn có thể sẽ gặp lỗi "invalid active developer path". Trong trường hợp đó, hãy chạy các lệnh sau trong Terminal:


xcode-select --install
sudo xcode-select -r


Cài đặt ios_webkit_debug_proxy

Appium sử dụng công cụ này để truy cập vào các web view trên thiết bị iOS thật.

Mở Terminal và chạy lệnh sau để cài đặt:


brew install ios-webkit-debug-proxy


Cài đặt Appium

Appium là một automation framework mã nguồn mở cho các ứng dụng mobile trên 3 platform là Android, iOS và Windows sử dụng giao thức WebDriver.

Mở Terminal và chạy lệnh sau để cài đặt:


npm install -g appium


Để khởi chạy Appium (bắt buộc trước khi execute test scripts cho mobile platforms), cũng trong Terminal, chạy lệnh sau:


appium


Để gỡ bỏ Appium, sử dụng lệnh:


npm uninstall -g appium


Hoặc đơn giản hơn, bạn có thể tải và cài đặt Appium phiên bản có UI, không cần phải sử dụng command line. Cái này thì chỉ cần search

Cài đặt Appium Doctor

Là một công cụ nhỏ giúp kiểm tra qua một checklist xem chúng ta đã có đủ các điều kiện môi trường cần thiết để chạy Appium được hay chưa:

Mở Terminal và chạy lệnh sau để cài Appium Doctor:


npm install -g appium-doctor


Mở Terminal và chạy lệnh sau để chạy Appium Doctor:


appium-doctor


Đối với automation cho iOS devices, không cần quan tâm tới ANDROID_HOME, adb, android, emulator v.v...

Cài đặt Maven

Maven là một công cụ giúp build và quản lý Java projects. Với Maven, chúng ta sẽ không cần phải nhọc công tìm kiếm và tải về từng library một nữa, chỉ cần cấu hình trong file pom.xml là xong.

Trong Terminal, chạy lệnh sau để cài Maven:


brew install maven


Sau đó, chạy lệnh sau để kiểm tra xem Maven đã được cài đặt thành công hay chưa:


mvn -version


Cuối cùng, cài đặt biến môi trường cho Maven (tương tự với JAVA_HOME ở trên)


export PATH=/usr/local/Cellar/maven/3.5.4/bin:$PATH


Thông tin của Maven được output từ Terminal

Cài đặt Eclipse

Eclipse là một IDE (Integrated Development Environment) mà chúng ta sẽ dùng để viết script, complie và chạy test script.

Tải và cài đặt Eclipse IDE for Java EE Developers tại địa chỉ: https://www.eclipse.org/downloads/packages/

************************

DỰNG PROJECT ĐƠN GIẢN VÀ CHẠY THỬ SCRIPT

Trong Eclipse, tạo một Maven project và cấu hình file pom.xml như sau:

<dependencies>
  <dependency>
    <groupId>io.appium</groupId>
    <artifactId>java-client</artifactId>
    <version>5.0.4</version>
  </dependency>
  <dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>3.9.1</version>
  </dependency>
  <dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.7</version>
  </dependency>
  <dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>6.14.3</version>
    <scope>test</scope>
  </dependency>
</dependencies>

Nếu không thích dùng TestNG, có thể bỏ dependency của TestNG ra và thay bằng dependency của JUnit hoặc một test tool nào đó mà bạn muốn.

Trong project vừa tạo, tạo mới một class AppTest với nội dung tương tự như sau, hoặc có thể dùng hàm main để execute cũng được:


import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import io.appium.java_client.MobileElement;
import io.appium.java_client.TouchAction;
import io.appium.java_client.ios.IOSDriver;
import io.appium.java_client.ios.IOSElement;
import io.appium.java_client.remote.MobileCapabilityType;

public class AppTest {
  public static URL url;
  public static DesiredCapabilities capabilities;
  public static IOSDriver driver;
  
  //1
  @BeforeSuite
  public void setupAppium() throws MalformedURLException {
    //2
    final String URL_STRING = "http://0.0.0.0:4723/wd/hub";
    url = new URL(URL_STRING);
    
    //3  
    capabilities = new DesiredCapabilities();
    capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "iPhone");
    capabilities.setCapability(MobileCapabilityType.UDID, "5e2ce********************16f10");
    capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "iOS");
    capabilities.setCapability("xcodeOrgId", "[YOUR_TEAM_ID]");
    capabilities.setCapability("xcodeSigningId", "iPhone Developer");
    capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "12.0.1");
    capabilities.setCapability(MobileCapabilityType.APP, "/Users/******/Downloads/App.ipa");
    capabilities.setCapability(MobileCapabilityType.NO_RESET, true);
    capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, "XCUITest");
    capabilities.setCapability("useNewWDA", true);

    //4
    driver = new IOSDriver(url, capabilities);
    driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
    driver.resetApp();
  }

  //5
  @AfterSuite
  public void uninstallApp() throws InterruptedException {
    driver.removeApp("**********");
  }

  //6
  @Test (enabled=true) public void myFirstTest() throws InterruptedException {
    driver.resetApp();
  }

Các thông tin UDID, deviceName, các bạn sẽ lấy bằng cách kết nối thiết bị iOS với máy Mac thông qua dây cáp. Sau đó mở iTunes, truy cập vào thiết bị để lấy các thông tin này. Với deviceName, có thể lấy trực tiếp trên iOS device bằng cách vào Settings > General > About


Nếu execute thành công (nhớ start Appium lên trước), các bạn sẽ thấy file App.ipa được cài lên thiết bị iOS và tự động được mở lên. Điều này chứng tỏ giữa thiết bị và máy Mac đã được "thông" với nhau. Tuy nhiên, nếu app vẫn cài được nhưng gặp lỗi "xcodebuild failed with code 65" thì bạn đang gặp rắc rối với security certificate của app (mình không rành về bên dev ios app nên có thể dùng từ không chính xác). Bạn sẽ cần phải bổ sung IDtrong capability thông tin cho field xCodeOrgId. Thông tin này được lấy bằng cách như sau:

In either case, the Team ID is a unique 10-character string generated by Apple that is assigned to your team. You can find your Team ID using your developer account. Sign in to developer.apple.com/account, and click Membership in the sidebar. Your Team ID appears in the Membership Information section under the team name. You can also find your team ID listed under the "Organizational Unit" field in your iPhone Developer certificate in your keychain.

Đọc thêm hướng dẫn ở đây để rõ hơn: https://github.com/appium/appium-xcuitest-driver/blob/master/docs/real-device-config.md

Nếu bạn không có quyền truy cập vào account Apple Dev dùng để commit app này lên Appstore, thì bạn sẽ cần phải liên hệ với Dev team để lấy được thông tin đó. Chúc các bạn thành công!!!

Original content by Benjamin ZY Tan

Cảm ơn bạn đã đọc bài viết của Cuộc Sống Tối Giản. Đây là một blog cá nhân, được lập ra nhằm mục đích lưu trữ và chia sẻ mọi thứ hay ho theo chủ quan của chủ sở hữu. Có lẽ vì vậy mà bạn sẽ thấy blog này hơi (rất) tạp nham. Mọi chủ đề đều có thể được tìm thấy ở đây, từ tâm sự cá nhân, kinh nghiệm sống, phim ảnh, âm nhạc, lập trình, cho tới cả các bạn gái xinh đẹp nữa. Phần lớn các bài đăng trong blog này đều được tự viết, trừ các bài có tag "Sponsored" là được tài trợ hoặc quảng cáo. Để ủng hộ blog, bạn có thể share những bài viết hay tới bạn bè, người thân, hoặc có thể follow Kênh YouTube của chúng tôi. Nếu cần liên hệ giải đáp thắc mắc hoặc đặt quảng cáo, vui lòng gửi mail theo địa chỉ cstoigian@gmail.com. Một lần nữa xin được cảm ơn rất nhiều!!!

Bài viết liên quan

Không có nhận xét nào:

© Copyright 2018 by Minimalism Life
Loading...
Minimalism Life