BEHAT VÀ SELENIUM

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:
    

RunSelenium-.jpg

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:

FeatureFile.jpg

  •      Để 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:
    

FeatureFile1.jpg

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:

RunBehat-Selenium.png

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.

Behat_video.jpeg

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:
    

RunBehat-Selenium.png

  •      Bước 2: Chạy lại lệnh: bin/behat feature/search.feature
    

Ta có kết quả như hình sau:

ErrorCaseBehatResult.jpg

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.