Những chú ý khi viết test bằng cucumber
This post hasn't been updated for 8 years
Nguồn: Bài viết được dịch từ nguyên gốc Cucumberでテストを書くときのポイント của tác giả oh_rusty_nail trên qitta. Đây là anh chàng (cô nàng?) chuyên viết về chủ đề test rất hay
Lý do
- Một ngày chủ nhật đẹp trời, mùi thơm món canh ngan mẹ nấu đang bao trùm cả căn phòng. Em quyết tâm viết bài để không bị xóa sổ 2 ngày lương
- Trong nhóm của mình hiện nay cũng có dự án về viết test sử dụng Calabash (có base là cucumber), cho nên cũng muốn tìm kiếm đó đây xem thiên hạ có tiêu chuẩn gì và làm sao để viết có lợi về lâu về dài.
Bắt đầu
- Khi viết test bằng Cucumber, chúng ta cần phải "trau chuốt" không chỉ cho file feature mà cả file step nữa.
- Dưới đây là cách thức trau chuốt mà tôi đã và đang sử dụng, hy vọng có thể giúp ích cho các bạn.
Cách trau chuốt file feature
① Khi phải viết nhiều scenario có dạng giống nhau, hãy sử dụng Scenario Outline
# Khi viết chỉ bằng scenario
Scenario: Login vào Facebook
Precondition Chuẩn bị account có thể login vào "Facebook" được
If Hiển thị trang login của "Facebook"
And Thực hiện login
Then Có thể login vào "Facebook"
Scenario: Login vào Twitter
Precondition Chuẩn bị account có thể login vào "Twitter" được
If Hiển thị trang login của "Twitter"
And Thực hiện login
Then Có thể login vào "Twitter"
---------------------------------------------
# Khi viết bằng Scenario Outline
Scenario outline: Login vào SNS
Precondition Chuẩn bị account có thể login vào "<SNS>" được
If Hiển thị trang login của "<SNS>"
And Thực hiện login
Then Có thể login vào "<SNS>"
Ví dụ:
|SNS |
|Facebook|
|Twitter |
② Sử dụng bảng (table)
- Đây là một kỹ thuật giúp các file feature trở nên dễ nhìn hơn
- Bảng nhận được có thể lấy ra từ file step bằng lệnh
table.hashes
# Khi không sử dụng bảng để viết
Nếu Upload "2" file "PNG" có dung lượng "1MB"
Và Upload "3" file "JPG" có dung lượng "5KB"
# Khi sử dụng bảng để viết
Nếu Upload file:
| File size | File type | Lượng upload |
| 1MB | PNG | 2 |
| 5KB | JPG | 5 |
Cách trau chuốt file step
- ###①Khi định nghĩa step gần giống nhau chỉ khác mỗi keyword, sử dụng matching bằng regular expression
- Có thể viết bằng 1 step
# (Ví dụ 1)
# Khi viết thông thường
When /^Login vào Facebook$/ do
end
When /^Login vào twitter$/ do
end
# Khi viết bằng matching dùng regular expression
When /^Login vào "([^\"]*)"$/ do |sns|
end
-------------------------------------------------------
# (Ví dụ 2)
# Khi viết thông thường
When /^Chuẩn bị user đã đăng ký account ở Facebook$/ do
end
When /^Chuẩn bị user chưa đăng ký account ở Facebook$/ do
end
-------------------------------------------------------
# Khi viết bằng matching dùng regular expression
When /^Chuẩn bị user (đã|chưa) đăng ký account ở Facebook$/ do |regist|
end
-
###②Định nghĩa theo thứ tự 50 âm (hoặc alphabet)
-
Bằng cách này sẽ dễ dàng tìm được đoạn test case mong muốn.
-
Hãy có gắng để các step có keyword tương tự ở gần nhau sẽ giúp việc thay đổi hay thêm step dễ dàng hơn.
-
###③ Sử dụng hook
-
Nếu viết hook như dưới đây sẽ có thể chèn xử lý vào trước hay sau scenario và step
-
Chỉ cần ở dưới directory features, có thể định nghĩa hook ở bất cứ đâu, tuy nhiên nên viết tại file features/support/hooks.rb
# Before : Trước scenario
# After : Sau scenario
# AfterStep : Số step
Before do
puts "Xử lý trước scenario"
end
Before("@hoge") do # Có thể chỉ định tag
puts "Xử lý thêm vào trước scenario có gắn tag được chỉ định"
end
- ###④ Cố gắng tạo step càng nhỏ càng tốt
- Nếu tạo ra các step lớn sẽ làm rất khó để sửa chữa và sử dụng lại sau này
- Nếu ngay từ đầu chú tâm tạo các step nhỏ, khi cần sử dụng lại hay định nghĩa mới một step có nội dung liên quan chỉ cần copy là được luôn. Việc có thể sử dụng lại là một đặc điểm rất quan trọng
All Rights Reserved