Tạo E2E Testing tự động với Rspec, Turnip, Capybara, Selenium

e2e testing là cái gì
- e2e testing hay còn gọi là UI Testing là 1 khâu kiểm thử để kiểm tra tương tác của ứng dụng với dataflow hoạt động có đúng như thiết kế hay không 1 cách toàn diện từ điểm đầu đến điểm cuối.
- e2e testing là 1 phương thức kiểm thử hộp đen, ngay từ cái tên đã thể hiện điều đó.
- Việc e2e testing bằng tay sẽ tốn khá nhiều chi phí trong TH ứng dụng lớn với rất nhiều page và form cần tương tác, vì vậy việc việc e2e testing sẽ giảm thiểu costs(chi phí thời gian, nhân lực)
Bài viết này sẽ giới thiệu cách tạo ra một môi trường Rails E2E test, với việc sử dụng Chrome, Firefox hoặc PhantomJS làm browser.
Basic Setup
- Thêm các gói cần thiết vào
Gemfile
:
-
Sau đấy thì chạy
bundle install
-
Chắc chắn là đã cài đặt rspec, sẽ sinh ra file
.rspec
vớispec
folder.
- Thêm dòng sau vào
.rspec
để chạy turnip test
- Bây giờ là viết các kịch bản test tương ứng với các tính năng cần test vào 1 thư mục mới để tách riêng phân biệt với Unit Test
- Ta có thể viết các feature bằng các ngôn ngữ tự nhiên, rất dễ hiểu.
Ví dụ:
Chúng ta test 1 feature Login với việc nhập username và password (độ dài password không dưới 6 kí tự) rồi nhấn Submit để login, có 2 kichj bản xảy ra:
- Nếu login thành công, redirect về trang mypage
- Thất bại, error message sẽ hiển thị ở ngay trang login, các validate client-side được ưu tiên
-
Xác định các testcase cần thiết:
Login Failure:
- username blank, password blank
- username OK, password blank
- username blank, pasword OK
- username chứa các kí tự đặc biệt như là
\
,"
(giả sử không được cho phép), password ko quan tâm - password dưới 6 kí tự
Login Success (VD với user hợp lệ trong DB là kienphan và password là 123456)
-
Thêm các testcases vào
user_login.feature
Nhìn qua thì khá dễ hiểu, code gì mà như viết văn =)) Trước tiên cần hiểu 1 số khải niệm trong đấy:
- Feature: cái này là feature name, viết sao cho đọc cái là hiểu tính năng gì là được
- Scenario: kịch bản, coi như là testcase
- Các phần Given, When, And, Then là các
step
, trình duyệt sẽ lần lượt thực hiện các step này
Ta để ý thấy có khái niệm step
ở đây, và phải định nghĩa step thì mới có thể run test được
- Và tiếp đến file định nghĩa các steps
- Viết các steps đã định nghĩa ở
user_login.feature
- Để chứa các config của
turnip
, ta tạo 1 fileturnip_helper.rb
- Bây giờ thì khởi động server lên bằng
rails server
, rồi chạy rspecbundle exec rake spec
, ta sẽ thấy Firefox tự động bật lên và kết quả test hiện trên màn hình console
Thay đổi driver
Nếu bạn muốn dùng Chrome thay firefox thì tiến hành đơn giản như sau
Thêm gem chrome vào Gemfile
Đăng kí driver đến Capybara để nó sử dụng Chrome Driver để test
Bây giờ nếu chạy test thì Chrome sẽ bật lên để chạy test tự động