2. Thành phần của Cucumber

Features

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. Lựa chọn hàng hóa

  3. Thanh toán

  4. Đăng xuất

Trong Cucumber mỗi feature có thể hiểu là mỗi function độ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 .feature, mỗi feature cần test nên đặt trong 1 file feature tương ứng.

Features trong Cucumber bao gồm các thành phần sau:

Feature: Mô tả test script hiện tại sẽ được chạy Scenario: Mô tả các bước thực hiện và kết quả đầu ra mong muốn cho một test case cụ thể Scenario Outline: Scenario thực hiện nhiều tập dữ liệu (sets of data). Dữ liệu được lưu dưới dạng cấu trúc, phân cách nhau bằng kí hiệu | | Given: Chỉ ra ngữ cảnh để thực thi When: Chỉ ra hành động đã được thực hiện Then: Kết quả đầu ra mong muốn của một test

Ví dụ

Feature: Đăng nhập thành công

  Scenario: Login vào trang web
    When Mở trang web "https://crm.anhtester.com/admin/authentication"
    Then Thực hiện mở

  Scenario: Mở rộng trang web
    When Mở rộng
    Then Thực hiện mở toàn bộ trang 
    
  Scenario: Điền email
    When Mong muốn điền "[email protected]" vào "//input[@id='email']"
    Then Hiển thị thông tin 

  Scenario: Điền password
    When Mong muốn điền "123456" vào "//input[@id='password']"
    Then Hiển thị thông tin 

  Scenario: Nhấn button
    When Nhấn button 
    Then Thực hiện đăng nhập thành công vào hệ thống

Examples:

| Url | username | password |

| https://hrm.anhtester.com/login | admin01 | 123456 |

Step Definitions

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),

Ví dụ

const { World, When, Then, Given, setWorldConstructor} = require('@cucumber/cucumber');
const cucumberHelper = require('vtit-automation-cucumber-helper')


When("Mở trang web {string}", function (url) {
    this.url = url
});
Then(
    "Giao diện mở rộng",
    async function () {
        const req = await cucumberHelper.doCommand(this, {
            "input": {
                "target": this.url,
                "object": null,
            },
            "takeScreenShot": true,
            "keyword": "open",
            "import": ""
        })
        console.log(req)
    }
);

When("Mở rộng", function () {
   
});
Then(
    "Thực hiện mở toàn bộ trang",
    async function () {
        const req = await cucumberHelper.doCommand(this, {
            "input": {
                
            },
            "takeScreenShot": true,
            "keyword": "maximizeCurrentWindow",
            "import": ""
        })
        console.log(req)
    }
);

When("Mong muốn điền {string} vào {string}", function (str, target) {
    this.valueString = str
    this.target = target
});
Then(
    "Hiển thị thông tin",
    async function () {
        const req = await cucumberHelper.doCommand(this, {
            "input": {
                "target": this.target,
                "object": null,
                "value": this.valueString
            },
            "takeScreenShot": true,
            "keyword": "type",
            "import": ""
        })
        console.log(req)
    }
);

When("Nhấn button", function () {
    
});
Then(
    "Thực hiện đăng nhập thành công vào hệ thống",
    async function () {
        const req = await cucumberHelper.doCommand(this, {
            "input": {
                "target": "//button[@type='submit']",
                "timeout":"5000"
            },
            "takeScreenShot": true,
            "keyword": "click",
            "import": ""
        })
        console.log(req)
    }
);

Sử dụng trong Test case

Last updated