Như ở bài trước
chúng ta đã tìm hiểu về behat và tính ứng dụng của behat trong quá
trình phát triển phần mềm, đặc biệt là trong quá trình phát triển
website và cách sử dụng behat để kiểm tra tính đúng đắn của các function
ở mức logic. Tuy nhiên, behat không chỉ dừng lại ở việc kiểm thử với
cấp độ thấp mà tính ứng dụng chủ yếu của behat được dùng chủ yếu trong
quá trình kiểm thử chấp nhận (Acceptance test). Ở cấp độ kiểm thử này,
ngoài việc kiểm tra các chức năng của chương trình đã chạy đúng yêu cầu
chưa thì việc quan trọng tiếp theo là phải kiểm tra được tính đúng đắn
của giao diện, và phải đảm bảo được tính thống nhất giữa giao diện và
chức năng. Một ví dụ đơn giản như giao diện để login thì phải thực hiện
chức năng login vào hệ thống, giao diện đăng ký thông tin thì phải thực
hiện chức năng đăng ký thông tin… Và việc kiểm tra tính đúng đắn giữa
giao diện và chức năng chỉ dùng riêng behat thì chưa đủ, chúng ta cần
thêm một công cụ khác nữa là Selenium Server. Vậy tại sao phải cần đến
Selenium Server?
Như đã trình bày ở bài trước, nếu chỉ sử dụng behat và Mink, chúng ta
sẽ chỉ kiểm tra được tính đúng đắn của chức năng ở cấp độ logic mà chưa
có giao diện. Để kiểm thử được giao diện của website có đúng với chức
năng hay không, chúng ta cần đến một công cụ giúp thể hiện phần giao
diện của từng chức năng. Công cụ đó chính là Selenium Server- công cụ
giúp cho các scenario được thực hiện trên browser thực- tương ứng với
từng hành động của người dùng.
Cách cài đặt và sử dụng Selenium cùng với behat sẽ được giới thiệu ngay sau đây.
1. Cách cài đặt SeleniumWeb Driver
Để cài đặt SeleniumServer chúng ta thực hiện các bước sau:
-
Truy cập vào link: http://docs.seleniumhq.org/download/
-
Download Selenium Server version: 2.44.0
-
Sau khi download thành công, chúng ta sẽ được 1 file có tên: selenium-server-standalone-2.44.0.jar
- Tạo một thư mục selenium trong thư mục Behat đã tạo trước đó, đưa file selenium vừa download vào thư mục selenium
Sau khi đã download thành công, chúng ta thực hiện khởi chạy selenium bằng gitbash như sau:
-
Mở Git Bash, gõ lệnh: java –jar selenium-server-standalone-2.44.0 để khởi động selenium
- Sau khi gõ lệnh, ta sẽ được kết quả như hình sau:
Khi được kết quả như trên, tức là ta đã khởi chạy server thành công,
tiếp theo sẽ là cách sử dụng behat cùng với selenium để thực hiện kiểm
thử chấp nhận.
2. Cách kết hợp behat và selenium
Như ở bài trước, chúng ta đã sử dụng behat và mink để thực thi các
scenario, để sử dụng selenium, chúng ta sẽ làm thêm các bước sau đây:
- Tạo file .feature với cấu trúc như sau:
@javascript
User story
Title (one line describing the story)
Narrative:
As a [role]
I want [feature]
So that [benefit]
Scenario 1: Title
Given [context]
When [event]
And [some more context]...
Then [outcome]
And [another outcome]...
Scenario 2: ...
Trong đó từ khóa [@javascript] được dùng để khởi động selenium server
trước khi thực thi các scenario. Và phải có từ khóa trên thì các
scenario mới được thực thi trên browser thực.
User story và scenario đã được giải thích ở bài trước.
Ví dụ: Như ở bài trước, ta đã tạo 1 file feature để kiểm thử chức năng search trên Wikipedia như hình sau:
- Để sử dụng selenium, chúng ta chỉ cần thêm từ khóa @javascript ở dòng đầu tiên trong file. Và khi đó file feature sẽ như hình sau:
Sau khi đã có file feature, chúng ta thực hiện chạy behat để xem kết quả bằng câu lệnh (phần đóng khung đỏ trong hình) như sau:
Như hình trên, sau khi thực hiện xong các scenario, chúng ta có kết
quả là 2 scenarios đều thành công (passed) với mỗi một câu văn trong
scenario sẽ có một hàm tương ứng chịu trách nhiệm thực thi câu văn đó. Ở
đây với 2 scenario, chúng ta có 9 câu văn được coi là 9 steps ở phần
kết quả cũng được thông báo đã thành công (passed). Để có thể thấy được
behat và selenium thực hiện các scenario như thế nào, hãy xem video dưới
đây.
Với trường hợp trên, các scenario đều thành công và đưa ra kết quả
passed cho toàn bộ các steps, vậy trong trường hợp có 1 steps không
thành công, kết quả sẽ thay đổi như thế nào? Chúng ta hãy cùng tìm hiểu
ví dụ tiếp theo sau đây:
- Bước 1: Chúng ta thay đổi một steps trong scenario như sau:
- Bước 2: Chạy lại lệnh: bin/behat feature/search.feature
Ta có kết quả như hình sau:
Sau khi thay đổi một steps, kết quả trả về cũng bị thay đổi, như ta
thấy trong hình, kết quả ở dòng đầu tiên chỉ có 1 scenario thành công, 1
scenario thất bại. Ở dòng thứ 2, với 9 steps, chúng ta chỉ có 6 steps
thành công (passed), 2 steps bị bỏ qua (skipped) và 1 step chưa được
định nghĩa (undefined). Step có kết quả undefined chính là step chúng ta
đã thay đổi ở bước 1 (bỏ đi từ “fill” ở dòng số 10). Vì sau khi thay
đổi, không có hàm tương ứng để thực thi step đó nên nó sẽ bị behat đánh
dấu là chưa được định nghĩa và các steps còn lại trong cùng scenario sẽ
bị behat bỏ qua không thực hiện nữa (ở đây là 2 steps ở dòng 11,12).
Scenario thứ 2 giữ nguyên, không thay đổi nên vẫn có kết quả như cũ
(passed)
Trên đây là một số ví dụ cơ bản với behat và selenium cũng như kết quả
sau khi sử dụng 2 công cụ trên vào quá trình kiểm thử chấp nhận.
Với việc sử dụng công cụ kiểm thử tự động như trên vào các dự án dài
hạn và có ít thay đổi, kiểm thử viên có thể tiết kiệm được khá nhiều
thời gian và công sức. Tuy nhiên nếu sử dụng vào các dự án ngắn hạn và
có nhiều thay đổi, việc sử dụng công cụ này sẽ không còn tối ưu nữa, vì
lúc đó kiểm thử viên sẽ phải thường xuyên thay đổi, chỉnh sửa các
scenario hoặc có thể là cả user’s story. Vì vậy, chúng ta cần xem xét kỹ
càng các yếu tố của dự án trước khi triển khai việc sử dụng behat cũng
như các công cụ kiểm thử khác để có thể sử dụng chúng một cách hiệu quả
mà không gây ảnh hưởng đến công việc của các bộ phận tham gia vào quá
trình phát triển phần mềm.