Hướng dẫn tích hợp Allure với pytest để viết test case và xuất báo cáo kiểm thử

1. Cài đặt các gói cần thiết

Đảm bảo cài đặt đầy đủ các thư viện Python hỗ trợ tích hợp Allure và pytest:

pip install pytest allure-pytest

2. Viết test case có chú thích Allure

Dưới đây là file test_auth_flow.py, minh họa cách sử dụng các decorator của Allure để làm phong phú báo cáo — bao gồm phân nhóm theo tính năng, mô tả hành vi, gắn dữ liệu phụ trợ và ghi lại từng bước thực thi:

import allure
import pytest

def login(user: str, pwd: str) -> str:
    return "success" if user == "admin" and pwd == "secret" else "error"

def search_products(query: str) -> list:
    mock_data = {
        "laptop": [{"id": 101, "name": "MacBook Pro"}],
        "phone": [{"id": 201, "name": "iPhone 15"}, {"id": 202, "name": "Pixel 8"}],
        "tablet": [{"id": 301, "name": "iPad Air"}]
    }
    return mock_data.get(query.lower(), [])

@allure.epic("Hệ thống xác thực người dùng")
@allure.feature("Quản lý đăng nhập")
class TestAuthenticationFlow:

    @allure.title("Kiểm tra đăng nhập thành công với tài khoản hợp lệ")
    @allure.description("Xác minh hệ thống chấp nhận thông tin đăng nhập đúng và trả về trạng thái xác thực")
    def test_valid_credentials(self):
        with allure.step("Khởi tạo thông tin đăng nhập"):
            account = {"username": "admin", "password": "secret"}
        
        with allure.step("Gửi yêu cầu xác thực"):
            status = login(account["username"], account["password"])
        
        with allure.step("Kiểm tra phản hồi"):
            assert status == "success"
            allure.attach(
                f"Trạng thái: {status} | Tài khoản: {account['username']}",
                name="Kết quả xác thực",
                attachment_type=allure.attachment_type.TEXT
            )

    @allure.title("Kiểm tra từ chối đăng nhập khi cung cấp thông tin sai")
    def test_invalid_credentials(self):
        assert login("guest", "123") == "error"

@allure.epic("Tìm kiếm sản phẩm")
@allure.feature("Bộ lọc và truy vấn")
class TestSearchScenarios:

    @pytest.mark.parametrize("term, min_results", [
        ("laptop", 1),
        ("phone", 2),
        ("tablet", 1)
    ])
    def test_keyword_search(self, term, min_results):
        results = search_products(term)
        allure.attach(
            str(results),
            name=f"Kết quả tìm kiếm '{term}'",
            attachment_type=allure.attachment_type.JSON
        )
        assert len(results) >= min_results

3. Chạy test và sinh báo cáo Allure

Thực thi bộ kiểm thử và lưu kết quả dưới dạng định dạng Allure JSON:

pytest --alluredir=reports/allure_raw tests/test_auth_flow.py

Tạo bản báo cáo HTML tĩnh từ dữ liệu đã thu thập:

allure generate reports/allure_raw -o reports/allure_html --clean

Mở giao diện tương tác trực tiếp qua máy chủ nội bộ:

allure serve reports/allure_raw

4. Các tính năng nâng cao của Allure

Gắn tệp và nhật ký vào từng bước kiểm thử

def test_data_driven_workflow():
    with allure.step("Tải cấu hình môi trường"):
        config = {"env": "staging", "timeout": 30}
        allure.attach(
            str(config),
            name="Cấu hình chạy thử",
            attachment_type=allure.attachment_type.JSON
        )
    
    with allure.step("Thực hiện thao tác nghiệp vụ"):
        outcome = execute_business_logic(config)
    
    with allure.step("Xác minh đầu ra"):
        assert outcome["status"] == "completed"

Phân loại mức độ nghiêm trọng của test case

@allure.severity(allure.severity_level.BLOCKER)
def test_system_boot_sequence():
    # Kiểm tra quy trình khởi động nền tảng — không được thất bại
    pass

@allure.severity(allure.severity_level.TRIVIAL)
def test_ui_element_alignment():
    # Kiểm tra bố cục giao diện — ưu tiên thấp
    pass

Liên kết với hệ thống quản lý lỗi và case kiểm thử

@allure.issue("https://bugs.internal/project/BUG-789", "Không hiển thị thông báo lỗi khi mật khẩu rỗng")
@allure.testcase("https://qa-platform/case/TC-2024-045", "TC-2024-045: Quy trình đăng nhập đa bước")
def test_edge_case_login():
    assert login("", "any") == "error"

5. Phân tích báo cáo Allure

Báo cáo được sinh ra bao gồm các tab chính sau:

  • Tổng quan: Biểu đồ phần trăm pass/fail, thời gian thực thi tổng và số lượng test case
  • Epic & Feature: Xem theo nhóm chức năng (epic), phân nhánh theo tính năng (feature) và kịch bản (story)
  • Timeline: Biểu đồ dọc thể hiện thứ tự và thời lượng thực thi từng test
  • Behavior: Cấu trúc cây theo lớp và phương thức test — hữu ích khi phân tích luồng nghiệp vụ
  • Severity: Bộ lọc nhanh theo mức độ ưu tiên: blocker, critical, normal, minor, trivial
  • Attachments: Tất cả dữ liệu đính kèm như ảnh chụp màn hình, log, JSON response, hoặc văn bản tùy chỉnh

Thẻ: allure pytest python test-automation ci-cd

Đăng vào ngày 21 tháng 6 lúc 21:33