Chuyển đến nội dung chính

Tìm hiểu về Cucumber

Cucumber là gì?

Cucumber là một công cụ kiểm thử tự động dựa trên việc thực thi các functions được mô tả dướng dạng plain-text, để hỗ trợ cho việc viết Behavior Driven Development(BDD). Nói theo cách khác Cucumber là công cụ phần mềm được sử dụng bởi tester để thực hiện các trường hợp kiểm thử kiểm tra hành vi của phần mềm.

Tạo project Cucumber

mvn archetype:generate "-DarchetypeGroupId=io.cucumber" "-DarchetypeArtifactId=cucumber-archetype" "-DarchetypeVersion=7.17.0" "-DgroupId=mycucumberplanet" "-DartifactId=mycucumberplanet" "-Dpackage=<package-name>" "-Dversion=1.0.0-SNAPSHOT" "-DinteractiveMode=false"
Hoặc viết như sau
mvn archetype:generate \
  "-DarchetypeGroupId=io.cucumber" \
  "-DarchetypeArtifactId=cucumber-archetype" \
  "-DarchetypeVersion=7.17.0" \
  "-DgroupId=mycucumberplanet" \
  "-DartifactId=mycucumberplanet" \
  "-Dpackage=<package-name>" \
  "-Dversion=1.0.0-SNAPSHOT" \
  "-DinteractiveMode=false"

mvn archetype:generate: Đây là lệnh Maven để tạo một dự án mới từ một archetype (mẫu dự án). archetype là một bộ khung của dự án Maven, giúp bạn dễ dàng khởi tạo các dự án theo cấu trúc chuẩn mà không cần viết từ đầu.

-DarchetypeGroupId=io.cucumber: Xác định groupId của archetype bạn muốn sử dụng. Trong trường hợp này, archetype thuộc về Cucumber.

-DarchetypeArtifactId=cucumber-archetype: Đây là Artifact ID của archetype mà bạn muốn sử dụng, ở đây là cucumber-archetype. Nó giúp tạo ra một dự án dựa trên framework Cucumber.

-DarchetypeVersion=7.17.0: Xác định phiên bản của archetype Cucumber. Ở đây, phiên bản 7.17.0 của Cucumber archetype được sử dụng.

-DinteractiveMode=false: Điều này vô hiệu hóa chế độ tương tác, có nghĩa là quá trình tạo dự án sẽ không yêu cầu người dùng nhập thêm bất kỳ thông tin nào. Các thông số đã được cung cấp sẵn thông qua các tham số -D.

Maven archetype

Maven archetype là các mẫu dự án được tạo và cấu hình sẵn, nghĩa là nó sẽ giải phóng chúng ta khỏi những việc như: 

  • Cấu hình phiên bản Java 
  • Add các dependency 
  • Add các plugin Add các lớp test

Ngoài việc tạo bằng command line, bạn có thể dùng IntelliJ IDEA để tạo project

Mở IntelliJ IDEA, chọn menu File → New → Project... → Maven Archetype

Catalog: Maven Central

Archetype: chọn template mà bạn mong muốn, vd: com.github.mkolisnyk:aerial-cucumber-testng-archetype

Version: chọn version cho template

Trong Advanced Settings, điền thông tin GroupId, ArtifactId, Version

Cấu trúc dự án Cucumber với TestNG

Một dự án Cucumber tích hợp với TestNG sẽ có cấu trúc thư mục như sau

your-project-root
│
├── src
│   ├── main
│   │   └── java
│   │       └── *.java
│   ├── test
│       ├── java
│       │   ├── com.nhatkyhoctap
│       │   │   └── yourpackage
│       │   │       ├── stepdefinitions     # step definitions
│       │   │       │   └── YourStepDefinitions.java
│       │   │       └── testrunner          # Test Runner class
│       │   │           └── TestNGCucumberRunner.java
│       └── resources
│           └── features                    # *.feature
│               └── yourfeaturefile.feature
│
├── pom.xml
└── ...

Thư mục stepdefinitions

Đây là thư mục chứa các step definitions (định nghĩa các bước kiểm thử). Các file Java trong thư mục này ánh xạ với các bước trong tệp .feature.

Ví dụ: YourStepDefinitions.java sẽ chứa các phương thức tương ứng với các bước Given, When, Then.

Thư mục testrunner

Thư mục này chứa Test Runner, chính là class sẽ chạy các kịch bản kiểm thử bằng cách tích hợp Cucumber với TestNG.

File TestNGCucumberRunner.java thường sẽ như sau:

package com.yourpackage.testrunner;

import io.cucumber.testng.AbstractTestNGCucumberTests;
import io.cucumber.testng.CucumberOptions;

@CucumberOptions(
    features = "src/test/resources/features",            // path to .feature folder
    glue = "com.yourpackage.stepdefinitions",            // path to step definitions folder
    plugin = {"pretty", "html:target/cucumber-reports.html"} // report plugins
)
public class TestNGCucumberRunner extends AbstractTestNGCucumberTests {
}

Chạy Test Runner

Từ IntelliJ IDEA: chạy file RunCucumberTests.java (nằm trong thư mục testrunner). Kết quả kiểm thử sẽ hiển thị trên console.

Từ Maven:

mvn clean test

Cucumber Tags

Cucumber Tags được sử dụng để kiểm soát việc thực thi các kịch bản (scenarios) hoặc các nhóm kịch bản trong các tập tin .feature của Cucumber. Chúng cho phép bạn nhóm các kịch bản hoặc đặc tả (scenarios) lại với nhau và chỉ định những kịch bản nào nên chạy hoặc không nên chạy trong một lần chạy thử nghiệm nhất định.

Cách sử dụng Cucumber Tags

Định nghĩa Tag trong tập tin .feature

Tags được thêm trực tiếp vào các kịch bản (scenario) hoặc các nhóm kịch bản (scenario outline), và cũng có thể được áp dụng ở cấp độ file để áp dụng cho tất cả các kịch bản trong file đó. Tag luôn bắt đầu bằng ký tự @ theo sau là tên tag (không có khoảng cách)

Ví dụ
Feature: Login feature

  @regression
  Scenario: Successful login
    Given the user is on the login page
    When the user enters valid credentials
    Then the user should be redirected to the dashboard

  @smoke-test @regression
  Scenario: Unsuccessful login with invalid credentials
    Given the user is on the login page
    When the user enters invalid credentials
    Then an error message should be displayed

Sử dụng tag trong Test Runner

Tags có thể được sử dụng trong test runner (ví dụ JUnit hoặc TestNG) để xác định các kịch bản nào sẽ được thực thi.
package com.example.testrunner;

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

@CucumberOptions(
        features = "src/test/resources/features",
        glue = "com.example.stepdefinitions",
        tags = "@smoke-test",
        plugin = {
                "pretty",
                "html:target/cucumber-html-report.html",
                "json:target/cucumber-reports/cukes-json.json",
                "testng:target/cucumber-reports/cukes-testng.xml",
                "rerun:target/cucumber-reports/failed_scenarios.txt"
        }
)
@Test
public class RunCucumberTests extends AbstractTestNGCucumberTests {

}

Các cách sử dụng phổ biến với tags trong Test Runner:

Chạy một tag cụ thể:
tags = "@smoke": Chỉ chạy các kịch bản có gắn tag @smoke.

Chạy nhiều tag (hoặc):
tags = "@smoke or @regression": Chạy các kịch bản có gắn @smoke hoặc @regression.

Chạy nhiều tag (và):
tags = "@smoke and @regression": Chỉ chạy các kịch bản có cả hai tag @smoke và @regression.

Loại trừ tag:
tags = "not @smoke": Loại trừ các kịch bản có gắn tag @smoke.

Tóm lại

  • Tạo class Test Runner kế thừa AbstractTestNGCucumberTests. 
  • Setup feature files, step definitions và plugin trong annotation @CucumberOptions. 
  • Chạy Test Runner từ IDE hoặc bằng lệnh Maven để kiểm thử Cucumber với TestNG. 

 

Tham khảo

https://viblo.asia/p/automated-testing-with-cucumber-phan-1-khai-quat-so-luoc-ve-cucumber-Do7546AWZM6

Effective Java Application Testing with Cucumber and BDD

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

Nhận xét

Bài đăng phổ biến từ blog này

[ASP.NET MVC] Authentication và Authorize

Một trong những vấn đề bảo mật cơ bản nhất là đảm bảo những người dùng hợp lệ truy cập vào hệ thống. ASP.NET đưa ra 2 khái niệm: Authentication và Authorize Authentication xác nhận bạn là ai. Ví dụ: Bạn có thể đăng nhập vào hệ thống bằng username và password hoặc bằng ssh. Authorization xác nhận những gì bạn có thể làm. Ví dụ: Bạn được phép truy cập vào website, đăng thông tin lên diễn đàn nhưng bạn không được phép truy cập vào trang mod và admin.

ASP.NET MVC: Cơ bản về Validation

Validation (chứng thực) là một tính năng quan trọng trong ASP.NET MVC và được phát triển trong một thời gian dài. Validation vắng mặt trong phiên bản đầu tiên của asp.net mvc và thật khó để tích hợp 1 framework validation của một bên thứ 3 vì không có khả năng mở rộng. ASP.NET MVC2 đã hỗ trợ framework validation do Microsoft phát triển, tên là Data Annotations. Và trong phiên bản 3, framework validation đã hỗ trợ tốt hơn việc xác thực phía máy khách, và đây là một xu hướng của việc phát triển ứng dụng web ngày nay.

Tổng hợp một số kiến thức lập trình về Amibroker

Giới thiệu về Amibroker Amibroker theo developer Tomasz Janeczko được xây dựng dựa trên ngôn ngữ C. Vì vậy bộ code Amibroker Formula Language sử dụng có syntax khá tương đồng với C, ví dụ như câu lệnh #include để import hay cách gói các object, hàm trong các block {} và kết thúc câu lệnh bằng dấu “;”. AFL trong Amibroker là ngôn ngữ xử lý mảng (an array processing language). Nó hoạt động dựa trên các mảng (các dòng/vector) số liệu, khá giống với cách hoạt động của spreadsheet trên excel.