You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Maven与Java在Robot Framework中重跑失败测试套件

如何用Maven + Java在Robot Framework中重跑失败的测试套件

确实,Robot Framework本身并没有直接提供针对测试套件级的重跑配置,但我们可以结合Maven插件、Robot的输出文件和一些简单的自定义处理来实现这个需求。下面是具体的实操步骤:

1. 配置Maven Robot插件,确保生成完整测试输出

首先在你的pom.xml中配置robotframework-maven-plugin,确保测试运行后生成包含所有结果的output.xml文件:

<plugin>
    <groupId>org.robotframework</groupId>
    <artifactId>robotframework-maven-plugin</artifactId>
    <version>2.2.0</version> <!-- 建议使用最新稳定版 -->
    <executions>
        <execution>
            <goals>
                <goal>test</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <suiteSourceDirectory>src/test/robotframework</suiteSourceDirectory>
        <outputDirectory>${project.build.directory}/robotframework-reports</outputDirectory>
        <!-- 强制生成完整输出文件 -->
        <output>output.xml</output>
        <report>report.html</report>
        <log>log.html</log>
    </configuration>
</plugin>

第一次运行全量测试时执行:

mvn clean test

运行完成后,target/robotframework-reports目录下会生成output.xml,里面记录了所有测试套件的运行状态。

2. 提取失败的测试套件列表

接下来需要从output.xml中筛选出所有运行失败的套件路径,这里提供两种适配不同环境的方案:

方案A:用Python脚本提取(快捷易用)

如果你的环境有Python,可以在项目根目录创建extract_failed_suites.py脚本:

import xml.etree.ElementTree as ET

tree = ET.parse('target/robotframework-reports/output.xml')
root = tree.getroot()

failed_suites = []

def traverse_suites(suite_node):
    # 检查当前套件是否失败
    if suite_node.attrib.get('status') == 'FAIL':
        suite_path = suite_node.attrib.get('source')
        if suite_path:
            failed_suites.append(suite_path)
    # 递归处理子套件
    for child_suite in suite_node.findall('suite'):
        traverse_suites(child_suite)

traverse_suites(root)

# 将结果写入文件
with open('target/failed_suites.txt', 'w') as f:
    for suite in failed_suites:
        f.write(f"{suite}\n")

执行脚本生成失败套件列表:

python extract_failed_suites.py

执行后,target目录下会生成failed_suites.txt,每行对应一个失败套件的路径。

方案B:用Java工具提取(纯Java环境)

如果你的环境只有Java,可以创建ExtractFailedSuites.java类来解析XML:

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.FileWriter;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

public class ExtractFailedSuites {
    public static void main(String[] args) {
        List<String> failedSuites = new ArrayList<>();
        try {
            Path outputXmlPath = Paths.get("target", "robotframework-reports", "output.xml");
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document doc = builder.parse(outputXmlPath.toFile());

            traverseSuites(doc.getDocumentElement(), failedSuites);

            // 写入失败套件列表文件
            try (FileWriter writer = new FileWriter(Paths.get("target", "failed_suites.txt").toFile())) {
                for (String suite : failedSuites) {
                    writer.write(suite + "\n");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void traverseSuites(Element suiteElement, List<String> failedSuites) {
        String status = suiteElement.getAttribute("status");
        if ("FAIL".equals(status)) {
            String sourcePath = suiteElement.getAttribute("source");
            if (sourcePath != null && !sourcePath.isEmpty()) {
                failedSuites.add(sourcePath);
            }
        }
        // 递归处理子套件
        NodeList childSuites = suiteElement.getElementsByTagName("suite");
        for (int i = 0; i < childSuites.getLength(); i++) {
            traverseSuites((Element) childSuites.item(i), failedSuites);
        }
    }
}

编译并运行这个类(可以通过Maven的exec插件集成到构建流程),同样会生成failed_suites.txt文件。

3. 用Maven仅运行失败的测试套件

现在可以通过Maven指定只运行failed_suites.txt中的套件,有两种便捷方式:

方法1:命令行直接指定

直接通过-Drobot.suites参数引用失败套件列表文件:

mvn robotframework:test -Drobot.suites=@target/failed_suites.txt

Robot Framework支持用@符号读取文件中的套件路径,这样就会只运行列表里的失败套件。

方法2:配置Maven Profile简化操作

在pom.xml中添加专门用于重跑失败套件的Profile:

<profiles>
    <profile>
        <id>re-run-failed-suites</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.robotframework</groupId>
                    <artifactId>robotframework-maven-plugin</artifactId>
                    <configuration>
                        <suites>
                            <suite>@target/failed_suites.txt</suite>
                        </suites>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

之后只需执行以下命令即可重跑失败套件:

mvn robotframework:test -P re-run-failed-suites

注意事项

  • 确保failed_suites.txt中的路径是相对于项目根目录的正确路径,可根据项目结构调整脚本中的路径逻辑。
  • 如果测试套件存在嵌套层级,上述脚本会递归提取所有失败的子套件;若只想重跑顶级失败套件,可修改脚本逻辑跳过子套件的遍历。
  • 重跑前建议清理之前的output.xml,避免新旧结果混淆,或在插件配置中指定新的输出文件名。

内容的提问来源于stack exchange,提问作者Saurabh kukade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:39:25