/calabash-test-skype

Tutorial for Calabash Android (Vietnamese)

Primary LanguageHTML

Automation Test cho Android app sử dụng Calabash-Cucumber

Yêu cầu

  • JAVA JDK
  • ANDROID SDK
  • RUBY

Cài đặt Java JDK

Các bạn tải và cài đặt tại đây: Java JDK

Cài đặt Android SDK.

Tải và cài đặt Android SDK dành cho Mac OS tại Android SDK Stand alone download android_sdk_for_macos

Sau khi tải về máy và giải nén, chúng ta phải cấu hình biến môi trường ANDROID_HOMEPATH với 2 folder platform-toolstools trong folder của Android SDK
Cài đặt ANDROID_HOME bằng cách gõ command vào terminal

export ANDROID_HOME=/path/to/your/android/sdk/folder

/path/to/your/android/sdk/folder là đường dẫn tới folder lưu SDK của bạn, chẳng hạn như của mình sẽ là /User/hoaiviet/Documents/android-sdk

Và cài đặt PATH:

export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/platform-tools

Và sau đó nhớ add 3 dòng command trên vào ~/.bash_profile hoặc ~/.zshrc nếu như dùng zsh Khởi động lại Terminal hoặc run dòng command

source ~/.bash_profile

Cài đặt Ruby.

Đầu tiên là máy Mac của bạn phải có Homebrew, nếu chưa có thì bạn phải cài đặt trước khi cài đặt Ruby.

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

Tiếp theo là cài đặt Ruby, các bạn hãy làm theo các bước như bên dưới

brew install rbenv ruby-build

# Cài đặt ruby
rbenv install 2.2.3
rbenv global 2.2.3

# Kiểm tra 
ruby -v

Nếu kiểm tra ruby -v không đúng với version 2.2.3 thì các bạn hãy paste những đoạn sau vào cuối file ~/.bash_profile

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

Khởi động lại Terminal hoặc run dòng command

source ~/.bash_profile

Cài đặt gem calabash-android.

Sau khi đã cài đặt xong Ruby thì chúng ta cần cài đặt gem Calabash-Android

gem install calabash-android

Khởi tạo thư mục test

Các thứ các bạn cần chuẩn bị là:

  • Device android hoặc Emulator
  • File APK của app bạn muốn test.
  • Sublime Text hoặc bất kì một công cụ Texit Editor nào đó.

Trong bài này mình sẽ sử dụng là app Skype

Bây giờ bắt đầu tạo 1 folder mới

mkdir calabash-test-skype

Mở folder vừa tạo

cd calabash-test-skype

Tiếp theo chúng ta sẽ tạo generate ra folder test bằng command

calabash-android gen

Calabash sẽ yêu cầu bạn nhấn Enter để tiếp tục, hãy nhấn Enter và bạn sẽ nhận được folder dạng như sau:

folder_structer

Ở đây các bạn cần quan tâm nhất 2 phần:
step_definitions: Sẽ chứa các file ruby mà các bạn sẽ định nghĩa các bước, ví dụ như nhấn button nào, gõ dòng text gì.

Các file có đuôi .feature là những file mình sẽ viết Scenario, Test cases của app.

Bước tiếp theo, hãy copy file APK của app mình muốn test vào folder vừa tạo, sao đó resign app:

calabash-android resign skype.apk

Viết scenario đầu tiên

Bắt đầu chúng ta hãy mở file my_fist.feature bằng Sublime Text, chúng ta sẽ thấy như hình

first_step

Đọc đến đây chắc các bạn cũng tự hỏi, làm sao để biết được viết các steps như nào mới là đúng? OK, tất cả các Steps mà Calabash đã defined sẵn ở đây, các bạn có thể xem ở đây: canned_steps

Nào quay lại với file feature, chúng ta hãy định nghĩa 1 scenario đơn giản cho chức năng đăng nhập bằng Skype name

Step 1: Nhấn button Skype Name
Step 2: Điền tài khoản skype vào khung nhập thứ nhất
Step 3: Điền mật khẩu vào khung nhập thứ hai
Step 4: Nhấn button đăng nhập
Step 5: Kết quả mong muốn là muốn thấy nút Add friends

Xong rồi, chúng ta bắt đầu sửa file my_first.feature theo các step chúng ta đã define ở trên:

Feature: Login feature

  Scenario: As a valid user I can log into my app
    Given I press the "Skype Name" button
    Given I enter "viet.ch2612" into input field number 1
    Given I enter my secret password into input fiend number 2
    When I press view with id "sign_in_btn"
    Then I should see "Add friend"

Bước cuối cùng là run test. Để chạy được trên devices thật thì các bạn nhớ cắm dây USB và bật USB Debugging lên nhé. Tốt nhất các bạn nên kiểm tra bằng câu lệnh

adb devices

OK bây giờ chúng ta hãy run thử

calabash-android run skype.apk

Hãy xem devices và kết quả first_run

Ồ, bước 1,2 chúng ta đã chạy OK nhưng tới bước 3 thì calabash báo là chúng ta chưa định nghĩa step này. OK giờ chúng ta sẽ định nghĩa nó. Trong folder test, chúng ta hãy mở file calabash_steps.rb trong folder step_definitions và thêm hàm như sau để định nghĩa step trên

Given(/^I enter my secret password into input fiend number (\d+)$/) do |index|
  enter_text("android.widget.EditText index:#{index.to_i-1}", "password")
end

Và bây giờ chúng ta run test lại lần nữa:

result

Tất cả đều passed.

Test report?

Các bạn sẽ tự hỏi, tất cả thông báo các steps pass và fail đều hiện lên trên command line như vậy thì lưu lại report kiểu gì phải không? Tất nhiên là Calabash có hỗ trợ lưu report dưới dạng file, và cụ thể là HTML và report cũng rất là "cool".

calabash-android run skype.apk --format html --out <filename>.html

hoặc

calabash-android run skype.apk -f html -o <filename>.html

và đây là file report đã generate ra report

Run cụ thể một feature nào đó?

Đơn giản là bạn chỉ cần dẫn tới file feature đó là được

calabash-android run skype.apk feature/<filename>.feature

Run cụ thể một @tag nào đó?

calabash-android run skype.apk --tag @test

hoặc

calabash-android run skype.apk -t @test

Clear app data

Cách 1: Dùng tag @reset

Các bạn chỉ cần thêm đoạn code sau vào file feature/support/app_installation_hooks.rb bên trong Before

scenario_tags = scenario.source_tag_names
  if scenario_tags.include?("@reset")
    clear_app_data
  end

Còn tại feature, chúng ta chỉ cần thêm tag @reset vào trước Scenario để clear app data

@reset
  Scenario: As a valid user I can log into my app
    Given I press the "Skype Name" button

Cách 2: Define 1 step để clear app data

Trong file sử dụng define step thì trước tiên chúng ta phải require app_installation trước

require 'calabash-android/management/app_installation'

rồi define step

Given /^I clear app data$/ do
  clear_app_data
end

Note: Khi dử dụng step dạng này thì bạn nên có thêm thời gian đợi nhé

Xem ID, Class của các đối tượng

Các bạn hãy dùng uiautomatorviewer có sẵn trong thư mực tools của ANDROID SDK uiautomatorviewer

Debugging, test các steps của bạn

calabash-android console skype.apk

Tại đây các bạn có thể nhập các hàm của mình vào để test và xem kết quả trên device

Kết

Các bạn có thể clone repo này về rồi thực hành nhé