Nội dung bài học

✅ Cách tạo và bố trí Feature File
✅ Cách generate Step Definitions từ Gherkin
✅ Cách Cucumber tìm kiếm các steps
✅ Cách chạy một feature file

✅ Cách tạo và bố trí Feature File

Feature có thể được hiểu là một đơn vị hoặc chức năng độc lập của một dự án. Ví dụ như một trang web thương mại điện tử, một vài tính năng (features) có thể xác định như:

  1. Đăng nhập bằng tài khoản hệ thống hoặc mạng xã hội
  2. Tìm kiếm hàng hóa
  3. Thanh toán
  4. Thêm sản phẩm
    ....


Trong Cucumber mỗi feature có thể hiểu là mỗi chứ năng độc lập của sản phẩm. Trước khi viết test scripts chúng ta nên xác định trước các features cần test để mang lại hiệu quả cao. Các tests xây dựng trong Cucumber được gọi là các feature files và có dạng đuôi mở rộng  .feature, mỗi feature cần test nên đặt trong 1 file feature tương ứng.

Cách tạo thì ở bài trước chổ cài đặt Cucumber An cũng có chia sẻ rồi nên là ở đây An chỉ chia sẻ cho các bạn cách chúng ta bố trí các feature file sao cho hợp lý trong project auto test của mình thôi.

Như vậy thì An góp ý luôn là chúng ta sẽ tạo folder tên features bên trong thu mục recources của phần package test. Và chúng ta sẽ tạo thêm các folder con bên trong để phân ra các module test với nhau để dễ quản lý và gọi lại thực thi.

Ví dụ nếu An test hệ thống CRM thì nó gồm có các module như Login, Customers, Projects,...Thì mình sẽ tạo folder con với chính tên module đó luôn.

src/test/recourses/features/Login/Login.feature
src/test/recourses/features/Customers/Customers.feature
src/test/recourses/features/Projects/Projects.feature

✅ Cách generate Step Definitions từ Gherkin

Mặc dù đã có file feature nhưng Cucumber chưa thực sự biết đoạn mã nào sẽ được thực thi cho từng scenario cụ thể được nêu trong file feature. Nó cần một file trung gian Step Definition, file này ánh xạ các bước thực hiện (step), features (Given,When,Then) trong scenario với đoạn mã (code) chức năng cần thực thi. Step được định nghĩa trong file java chẳng hạn như "stepdefinitions/StepLoginCRM.java".

Như bên dưới này thì An sẽ chỉ các bạn generate một Step Definitions từ Feature LoginCRM

[Cucumber TestNG] Bài 3: Cài đặt Cucumber Framework với Maven project trên IntelliJ IDEA | Anh Tester

Format Gherkin hiện màu Vàng là báo hiệu nó chưa tìm thấy code Step Definitions tương ứng. Nhờ có 2 plugin hỗ trợ mà chúng ta đã cài vào IntelliJ nó báo hiệu.

Tiếp theo chúng ta tạo file step definitions để chứa hết tất cả các step trong Gherkin.

🔆 Tạo Step Definitions cho Feature File

Bước 1: Rê chuột vào một step bất kỳ. Dialog gợi ý hiện lên và chọn more actions

[Cucumber TestNG] Bài 4: Feature File và Step Definitions trong Cucumber | Anh Tester

Bước 2: nhấn chọn Create all step definitions để nó generate ra tất cả các step bên trong Gherkin.

[Cucumber TestNG] Bài 4: Feature File và Step Definitions trong Cucumber | Anh Tester

Bước 3: đặt tên cho File java để lưu các steps trên. Các bạn có thể chọn như hình

[Cucumber TestNG] Bài 4: Feature File và Step Definitions trong Cucumber | Anh Tester

Bước 4: Khi nhấn Ok thì nó sẽ tạo file để chứa Steps và Gherkin cũng đã mapping với các steps đó

[Cucumber TestNG] Bài 4: Feature File và Step Definitions trong Cucumber | Anh Tester

[Cucumber TestNG] Bài 4: Feature File và Step Definitions trong Cucumber | Anh Tester

Vậy là xong phần tạo file Step Definitions cho file Feature hay Gherkin tương ứng rồi.

🔆 Cách bố trí Step Definitions

Các step definitions chính là các file Java và cụ thể hơn là nó nằm trong các class y như chúng ta code Selenium Java. Nội dung bên trong là chúng ta điền code Selenium Java vào để nó thực thi.

Nơi đặt các Step Definitions hợp lý sẽ là trong package test (src/test/java) vì nó sẽ tự động hiểu đó là package nguồn. Tuỳ chúng ta có để trong package con hay không. Chẳng hạn như package com.anhtester.stepdefinitions và An sẽ đặt như vậy để source code chúng ta gọn ràng hơn.

Và thuận tiện khi chúng ta khai báo đường dẫn của step definitions trong Cucumber Option (Cucumber Test Runner)

import io.cucumber.testng.CucumberOptions;
import io.cucumber.testng.AbstractTestNGCucumberTests;
import org.testng.annotations.Test;

@CucumberOptions(
        features = "src/test/resources/features",
        glue = "com.anhtester.stepdefinitions",
        plugin = {"pretty", "html:target/cucumber-html-report.html"}
)
@Test
public class RunCucumberTests extends AbstractTestNGCucumberTests {

}

Các bạn chú ý chổ "glue" chính là khai báo đường dẫn đến các step definitions. Chúng ta có bao nhiêu vị trí chung để lưu file step thì khai báo vào hết, cách nhau bởi dấu phẩy và đặt trong dấu ngoặc nhọn. Ví dụ:

import io.cucumber.testng.CucumberOptions;
import io.cucumber.testng.AbstractTestNGCucumberTests;
import org.testng.annotations.Test;

@CucumberOptions(
        features = "src/test/resources/features",
        glue = {"com.anhtester.projects.website.crm.stepdefinitions",
                "com.anhtester.projects.website.cms.stepdefinitions",
                "com.anhtester.common.stepdefinitions",
                "acom.anhtester.hooks"}, 
        plugin = {"pretty", "html:target/cucumber-html-report.html"}
)
@Test
public class RunCucumberTests extends AbstractTestNGCucumberTests {

}


✅ Cách Cucumber tìm kiếm các steps


Trong Cucumber nó sẽ tự động nhận diện các steps nằm rải rác ở nhiều file step definitions trong một project cho cùng một feature file.

Nghĩa là các step definitions được generate ra từ một feature file nó có thể nằm ở nhiều file step khác nhau. Chính vì thế chúng ta khai báo chổ glue gồm nhiều đường dẫn trỏ đến.

Ví dụ: Gherkin có 5 steps


[Cucumber TestNG] Bài 4: Feature File và Step Definitions trong Cucumber | Anh Tester

Thì chúng ta để tại class StepsLoginCRM 4 step desinitions



Còn 1 step mình đặt tại CommonStepDefinitions 



Như vậy nếu chúng ta không thay đổi gì trong Test Runner. Nghĩa là chỉ để 1 đường dẫn đến nơi chứa file StepsLoginCRM thì nó sẽ báo lỗi không tìm thấy 1 step Given đầu



Bây giờ chúng ta chỉ cần thêm đường dẫn đến nơi chứa các file steps liên quan vào từ khoá "glue" trong Test Runner là ok.


Thì đó là cách Cucumber hoạt động để tìm các step definitions.

Qua đây chúng ta mới nghiệm lại là nếu như vậy thì làm sao thiết kế driver theo dạng BaseTest trong TestNG với mô hình Page Object được đây. Vì steps nó rải rác ra nhiều nơi mà theo TestNG thuần chúng ta buộc thiết kế @Test chung một nơi 😝

Yeah tức nhiên sẽ có cách. An sẽ chỉ các bạn trong các bài tiếp theo.


✅ Cách chạy một feature file

Chúng ta có thể chạy một feature file bằng 2 cách:

  • Chạy trực tiếp tại class Test Runner mà chúng ta thiết đặt cho nó.
  • Gọi class Test Runner sang Suite XML để chạy y như TestNG thuần gọi một class

Và cách 2 sẽ là cách dùng hợp lý. Chúng ta dùng Cucumber kết hợp TestNG để sử dụng thế mạnh của TsestNG chổ này. Sau này sẽ gọi sang Maven để chạy càng tiện hơn.



Hết hết hết hết hết rồi 😜

Cộng đồng Automation Testing Việt Nam

🌱 Facebook Fanpage: Anh Tester
🌱 Telegram
Automation Testing:   Cộng đồng Automation Testing
🌱 
Facebook Group Automation: Cộng đồng Automation Testing Việt Nam
🌱 Telegram
Manual Testing:   Cộng đồng Manual Testing
🌱 
Facebook Group Manual: Cộng đồng Manual Testing Việt Nam

  • Anh Tester

    Đường dẫu khó chân vẫn cần bước đi
    Đời dẫu khổ tâm vẫn cần nghĩ thấu


Cộng đồng Automation Testing Việt Nam:

🌱 Telegram Automation Testing:   Cộng đồng Automation Testing
🌱 
Facebook Group Automation: Cộng đồng Automation Testing Việt Nam
🌱 
Facebook Fanpage: Cộng đồng Automation Testing Việt Nam - Selenium
🌱 Telegram
Manual Testing:   Cộng đồng Manual Testing
🌱 
Facebook Group Manual: Cộng đồng Manual Testing Việt Nam

Chia sẻ kiến thức lên trang

Bạn có thể đăng bài để chia sẻ kiến thức, bài viết của chính bạn lên trang Anh Tester Blog

Danh sách bài học