- JAVA JDK
- ANDROID SDK
- RUBY
Các bạn tải và cài đặt tại đây: Java JDK
Tải và cài đặt Android SDK dành cho Mac OS tại Android SDK Stand alone download
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_HOME
và PATH
với 2 folder platform-tools
và tools
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
Đầ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
Sau khi đã cài đặt xong Ruby thì chúng ta cần cài đặt gem Calabash-Android
gem install calabash-android
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:
Ở đâ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
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
Đọ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
Ồ, 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:
Tất cả đều passed.
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
Đơ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
calabash-android run skype.apk --tag @test
hoặc
calabash-android run skype.apk -t @test
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
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é
Các bạn hãy dùng uiautomatorviewer
có sẵn trong thư mực tools
của ANDROID SDK
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
Các bạn có thể clone repo này về rồi thực hành nhé