Giới Thiệu Về Gherkin
Gherkin là một ngôn ngữ định dạng văn bản có cấu trúc đơn giản, sử dụng cú pháp gần với ngôn ngữ tự nhiên. Mục tiêu của Gherkin là làm cho các kịch bản kiểm thử dễ hiểu cho tất cả mọi người, kể cả những người không có kỹ thuật lập trình. Nó thường được sử dụng trong Behavior-Driven Development (BDD) để mô tả hành vi của phần mềm dưới dạng các tính năng và kịch bản.
Cú pháp của Gherkin giúp tạo ra sự thống nhất giữa các bên liên quan trong dự án, từ khách hàng, quản lý dự án đến đội phát triển và kiểm thử. Trong Java, Gherkin thường được sử dụng với công cụ Cucumber để chuyển các kịch bản thành mã kiểm thử tự động.
Cấu Trúc Cơ Bản Của Gherkin
Cấu trúc của Gherkin rất đơn giản và dễ hiểu. Nó bao gồm các từ khóa sau:
- Feature: Mô tả tính năng chính của hệ thống hoặc phần mềm mà bạn muốn kiểm thử.
- Scenario: Tình huống cụ thể mà bạn muốn mô tả hoặc kiểm thử.
- Given: Điều kiện ban đầu của hệ thống trước khi hành động diễn ra.
- When: Hành động hoặc sự kiện mà người dùng thực hiện.
- Then: Kết quả mong đợi sau khi hành động được thực hiện.
- And/ But: Kết nối các bước kiểm thử, làm rõ thêm điều kiện hoặc kết quả.
Ví Dụ Cấu Trúc Gherkin
Feature: Tính năng đăng nhập
Scenario: Đăng nhập thành công với thông tin hợp lệ
Given Người dùng đã có tài khoản hợp lệ
When Người dùng nhập đúng tên đăng nhập và mật khẩu
Then Người dùng sẽ được chuyển đến trang chính của hệ thống
Viết Gherkin Test trong Cucumber
Cucumber là công cụ phổ biến được sử dụng để thực thi các kịch bản viết bằng Gherkin. Cucumber chuyển đổi các kịch bản này thành mã kiểm thử thực tế. Khi sử dụng Cucumber, bạn có thể viết các kiểm thử tự động mà không cần phải sử dụng các thuật ngữ lập trình phức tạp.
Các Từ Khóa Chính Trong Gherkin
1. Feature
Feature
mô tả tính năng chính hoặc một tập hợp các hành vi của phần mềm. Đây là một khái niệm lớn, mô tả những gì bạn muốn kiểm thử.
Ví dụ:
Feature: Tính năng đăng nhập
Để bảo mật thông tin cá nhân
Là một người dùng
Tôi muốn có thể đăng nhập vào hệ thống
2. Scenario
Scenario
mô tả một trường hợp cụ thể của tính năng mà bạn muốn kiểm thử. Mỗi kịch bản phải bao gồm một chuỗi các bước từ đầu đến cuối để kiểm tra một tình huống cụ thể.
Ví dụ:
Scenario: Đăng nhập thành công với thông tin hợp lệ
Given Người dùng đã có tài khoản hợp lệ
When Người dùng nhập đúng tên đăng nhập và mật khẩu
Then Người dùng sẽ được chuyển đến trang chính của hệ thống
3. Given
Given
mô tả trạng thái hoặc điều kiện ban đầu của hệ thống. Nó thường đại diện cho một tiền đề cần phải có trước khi thực hiện hành động.
Ví dụ:
Given Người dùng đã có tài khoản hợp lệ
4. When
When
mô tả một hành động hoặc sự kiện mà người dùng thực hiện trong hệ thống. Đây là phần diễn tả hành vi mà bạn muốn kiểm thử.
Ví dụ:
When Người dùng nhập đúng tên đăng nhập và mật khẩu
5. Then
Then
mô tả kết quả mong đợi sau khi hành động đã được thực hiện. Nó là phần quan trọng nhất để xác định xem kiểm thử có thành công hay không.
Ví dụ:
Then Người dùng sẽ được chuyển đến trang chính của hệ thống
6. And và But
And
và But
được sử dụng để nối nhiều điều kiện, hành động hoặc kết quả.
Ví dụ:
Scenario: Đăng nhập thất bại với mật khẩu không chính xác
Given Người dùng đã có tài khoản hợp lệ
When Người dùng nhập đúng tên đăng nhập nhưng sai mật khẩu
Then Hệ thống sẽ hiển thị thông báo lỗi đăng nhập không thành công
And Tên đăng nhập và mật khẩu không được lưu
Viết Step Definitions trong Cucumber
Các bước kiểm thử được mô tả trong Gherkin không thể thực thi nếu không có mã tương ứng để thực hiện chúng. Để làm điều này, bạn cần tạo các step definitions (định nghĩa bước), là các phương thức trong mã chương trình để ánh xạ từng bước của Gherkin.
Ví Dụ:
Giả sử bạn đã viết kịch bản sau trong Gherkin:
Scenario: Đăng nhập thành công với thông tin hợp lệ
Given Người dùng đã có tài khoản hợp lệ
When Người dùng nhập đúng tên đăng nhập và mật khẩu
Then Người dùng sẽ được chuyển đến trang chính của hệ thống
Bước tiếp theo là viết mã Java trong Cucumber để ánh xạ từng bước này:
import io.cucumber.java.en.Given;
import io.cucumber.java.en.When;
import io.cucumber.java.en.Then;
public class LoginStepDefinitions {
@Given("Người dùng đã có tài khoản hợp lệ")
public void nguoiDungDaCoTaiKhoanHopLe() {
// Kiểm tra người dùng đã có tài khoản hợp lệ trong hệ thống
System.out.println("Người dùng có tài khoản hợp lệ");
}
@When("Người dùng nhập đúng tên đăng nhập và mật khẩu")
public void nguoiDungNhapDungTenDangNhapVaMatKhau() {
// Thực hiện đăng nhập với tên đăng nhập và mật khẩu đúng
System.out.println("Người dùng nhập thông tin đúng");
}
@Then("Người dùng sẽ được chuyển đến trang chính của hệ thống")
public void nguoiDungDuocChuyenDenTrangChinh() {
// Kiểm tra người dùng đã được chuyển đến trang chính
System.out.println("Người dùng đã vào trang chính");
}
}
Ví Dụ Thực Tế
Tính Năng Đăng Ký Tài Khoản
Feature: Đăng ký tài khoản
Để sử dụng hệ thống
Là một người dùng mới
Tôi muốn có thể đăng ký tài khoản mới
Scenario: Đăng ký thành công với thông tin hợp lệ
Given Người dùng mới chưa có tài khoản
When Người dùng cung cấp thông tin hợp lệ
Then Tài khoản mới sẽ được tạo
And Người dùng sẽ được chuyển đến trang đăng nhập
Tính Năng Tìm Kiếm Sản Phẩm
Feature: Tìm kiếm sản phẩm
Để tìm được sản phẩm phù hợp
Là một khách hàng
Tôi muốn có thể tìm kiếm sản phẩm theo từ khóa
Scenario: Tìm kiếm thành công với từ khóa hợp lệ
Given Người dùng đang ở trang chủ
When Người dùng nhập từ khóa vào thanh tìm kiếm
Then Kết quả tìm kiếm sẽ hiển thị sản phẩm phù hợp
Kết Luận
Gherkin là một công cụ mạnh mẽ cho việc viết các kịch bản kiểm thử trong Cucumber, giúp liên kết các bên liên quan trong dự án. Nhờ cú pháp dễ hiểu, bạn có thể viết và thực thi các kịch bản kiểm thử tự động mà không cần kỹ năng lập trình phức tạp. Với việc tách biệt các bước kiểm thử và mã thực thi, Gherkin và Cucumber tạo nên một hệ thống kiểm thử mạnh mẽ và dễ quản lý, đặc biệt trong phát triển phần mềm theo hướng BDD.