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