Tích hợp báo cáo và tự động hóa gửi Email trong khung kiểm thử API Java

Tổng quan các cải tiến trong khung kiểm thử

Đây là bản ghi chú các bước nâng cấp hiệu suất và tính năng cho khuôn mẫu kiểm thử tự động hóa API Java hiện tại, tập trung vào việc tối ưu hóa quy trình báo cáo và thông báo kết quả.

1. Tích hợp báo cáo trực tiếp

Trước đây, báo cáo kiểm thử được tạo ra bên ngoài thư mục dự án, gây bất tiện khi truy xuất. Phiên bản mới đã tích hợp quá trình sinh báo cáo trực tiếp vào within project, cho phép truy cập kết quả ngay lập tức thông qua đường dẫn tĩnh của ứng dụng.

2. Áp dụng giao diện báo cáo Allure

Kế hoạch phát triển bao gồm việc tích hợp hoàn toàn Allure Report để thay thế định dạng HTML cơ bản. Báo cáo dạng web này cung cấp giao diện trực quan, chi tiết và các biểu đồ phân tích xu hướng kiểm thử tốt hơn.

3. Cơ chế thông báo Email tự động

Tính năng gửi Email đã được thêm vào quy trình tự động hóa. Sau khi các kịch bản kiểm thử được kích hoạt bởi tác vụ định kỳ (Scheduled Task), hệ thống sẽ tự động nén các tệp báo cáo và gửi chúng đến danh sách người nhận đã cấu hình.

Triển khai mã nguồn gửi thư (Email Service)

Lớp tiện ích dưới đây được tái cấu trúc để xử lý việc kết nối SMTP, đính kèm tệp và gửi email. Các biến và phương thức đã được đổi tên để tăng tính rõ ràng.

import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
import java.io.File;

public class EmailNotificationService {

    private final String mailServerHost;
    private final String senderAccount;
    private final String senderAuthCode;
    private Session mailSession;
    private MimeMessage mailMessage;
    private Multipart multipartContainer;
    private List<FileDataSource> attachmentList = new LinkedList<>();

    private EmailNotificationService(String host, String user, String pass, String recipients,
                                    String ccRecipients, String subject, String bodyContent, List<String> filePaths) {
        this.mailServerHost = host;
        this.senderAccount = user;
        this.senderAuthCode = pass;

        initializeSession();
        setSender(senderAccount);
        setRecipients(recipients);
        setCarbonCopy(ccRecipients);
        setSubjectLine(subject);
        setMailContent(bodyContent);

        if (filePaths != null) {
            filePaths.forEach(this::attachFile);
        }
        dispatchEmail();
    }

    private void initializeSession() {
        Properties props = new Properties();
        props.put("mail.smtp.host", mailServerHost);
        props.put("mail.smtp.auth", "true");
        // Có thể thêm cấu hình SSL/TLS tại đây
        mailSession = Session.getInstance(props, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(senderAccount, senderAuthCode);
            }
        });
    }

    // ... Các phương thức setter khác (setSender, setRecipients, etc.) ...

    public static void sendReport(String host, String user, String pass, String to, String cc,
                                 String subject, String content, List<String> files) {
        new EmailNotificationService(host, user, pass, to, cc, subject, content, files);
    }
}

Cấu hình thông số hệ thống

Tệp cấu hình ứng dụng định nghĩa thông tin máy chủ SMTP và lịch trình chạy tác vụ (Cron Job).

# Cấu hình Email
spring.mail.host=smtp.example.com
spring.mail.username=automation@example.com
spring.mail.password=your_password

# Danh sách người nhận
test.mail.send=team@example.com
test.mail.cc=manager@example.com

# Lịch trình tác vụ (Cron Expression)
# Chạy mỗi 60 phút
scheduler.test.job=0 0/60 * * * ?

Lớp điều phối tác vụ định kỳ

Sử dụng Spring Boot `@Scheduled` để kích chạy bộ kiểm thử TestNG, xử lý nén báo cáo và gửi email thông báo.

import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.testng.TestNG;
import java.util.ArrayList;
import java.util.List;

@Service
public class ScheduledTestRunner {

    @Value("${spring.mail.host}")
    private String smtpHost;

    @Value("${spring.mail.username}")
    private String username;

    @Value("${spring.mail.password}")
    private String password;

    @Value("${test.mail.send}")
    private String recipientTo;

    @Value("${test.mail.cc}")
    private String recipientCc;

    @Scheduled(cron = "${scheduler.test.job}")
    public void executeAutomationSuite() {
        System.out.println("----- Bắt đầu chạy bộ kiểm thử tự động -----");

        // 1. Cấu hình và chạy TestNG
        TestNG testEngine = new TestNG();
        List<String> suiteFiles = new ArrayList<>();
        suiteFiles.add("config/testng-suites.xml");
        testEngine.setTestSuites(suiteFiles);
        testEngine.run();

        // 2. Nén thư mục báo cáo thành file Zip
        String sourceDir = "src/main/resources/static-reports";
        String outputDir = "C:/Temp/Reports/";
        String zipPath = ZipUtils.compressDirectory(sourceDir, outputDir);

        // 3. Gửi Email đính kèm báo cáo
        List<String> attachments = new ArrayList<>();
        attachments.add(zipPath);

        EmailNotificationService.sendReport(
            smtpHost, username, password, 
            recipientTo, recipientCc, 
            "Kết quả kiểm thử tự động", 
            "Đính kèm là báo cáo chi tiết của lần chạy này.", 
            attachments
        );
    }
}

Kết quả thực tế

Xuất nhật ký hệ thống:
Quan sát log trên console cho thấy quá trình nén thư mục báo cáo static-reports thành tệp .zip thành công và khởi chạy quy trình gửi email.

Email nhận được:
Hộp thư của người nhận nhận được email có chứa tệp đính kèm. Sau khi giải nén và mở file báo cáo, giao diện hiển thị dữ liệu kiểm thử đầy đủ và chính xác như mong đợi.

Thẻ: Java testng Spring Boot SMTP API Testing

Đăng vào ngày 22 tháng 6 lúc 19:04