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

Friday, January 18, 2019
Edit this post


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 đặ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

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

💻Nhận dạy online 1 kèm 1 Automation Test từ cơ bản tới nâng cao (From Zero to Hero) 😁😁😁
Lộ trình gồm 3 phần:
1) Kỹ thuật lập trình và tư duy lập trình cơ bản
2) Nhập môn kiểm thử (Manual Test)
3) Kiểm thử tự động (Automation Test) + Chuẩn bị cho phỏng vấn
* Lộ trình chi tiết: Xem tại đây

🎓Đối tượng người học:
- Những bạn bị mất gốc căn bản môn lập trình.
- Những bạn muốn theo con đường kiểm thử (testing), đặc biệt là kiểm thử tự động (Automation Test).

🦘Người giảng dạy:
- Mình sẽ là người trực tiếp hướng dẫn.
- Nếu là các vấn đề ngoài chuyên môn hoặc sở trường, mình sẽ nhờ các anh chị em khác cũng làm trong ngành.

🤓Giới thiệu:
- Mình đã có hơn 10 năm kinh nghiệm làm IT ở cả trong và ngoài nước. Trong đó 3 năm đầu là làm lập trình viên Java, sau đó bén duyên với mảng Automation Test và theo nghề tới tận bây giờ. Mình được đào tạo chính quy về IT từ một trường Đại học danh tiếng ở TP.HCM (hệ kỹ sư 4 năm rưỡi), có chứng chỉ ISTQB, có thể giao tiếp tốt bằng tiếng Anh và có kinh nghiệm làm việc thực tế ở cả 2 mảng Outsource và Product. Title chính thức của mình là QA Automation Engineer, tuy nhiên, mình vẫn làm những dự án cá nhân chuyên về lập trình ứng dụng như Học Tiếng Anh StreamlineSách Nhạc. Mình là người có thái độ làm việc chuyên nghiệp, chăm chỉ và luôn nhiệt tình trong công việc.

💵Chi phí và hình thức thanh toán:
- Các bạn vui lòng liên hệ qua email songtoigianvn@gmail.com (email, chat, hoặc call) để book nội dung và khung giờ học (từ 8h tối trở đi).
- Mức phí: 150.000đ/buổi, mỗi buổi 60 phút.
- Lộ trình From Zero to Hero: 4.350.000đ (29 buổi).
- Bạn có thể học riêng và đóng tiền theo từng phần nếu muốn.
- Có thể học trước 1-2 buổi trước khi quyết định đi full lộ trình hoặc từng phần.
- Thanh toán qua Momo, chuyển khoản v.v...
BÌNH LUẬN
© Copyright by CUỘC SỐNG TỐI GIẢN
Loading...