如何生成Junit报告

JUnit 报告文件是测试框架生成的一种标准测试结果格式,通常以 XML 文件的形式存储,包含测试套件运行的详细信息。测试工具和框架会在测试执行后生成这些报告文件,具体过程如下:

生成 JUnit XML 报告的过程

  1. 测试框架的支持:

    • 许多测试框架和工具原生支持生成 JUnit 格式的测试报告。例如,JUnit(Java)、pytest(Python)、nose(Python)、testng(Java)等。
  2. 配置框架生成 JUnit 报告:

    • JUnit: 在 Java 中,JUnit 自带生成 XML 报告的能力,通过在 CI/CD 工具(如 Maven、Gradle)中配置来启用。

    • Pytest(Python) : 可以通过 pytest 插件生成 JUnit 格式的报告文件。需安装 pytest 并使用 --junitxml 参数来生成报告。

      python 复制代码
      pytest --junitxml=report.xml tests/
    • Nose(Python) : 使用 nosenose-junit 插件生成报告。

    • TestNG: 与 JUnit 兼容,通过 TestNG 的内置功能生成输出。

    • 示例:我这边采用的是方法二 这边给大家粘贴自己写的模板 需要的自取 集成到Jenkins之后只需要在Jenkinsfile中运行该文件即可

      cs 复制代码
      import pytest
      import os
      import argparse
      
      def main():
          parser = argparse.ArgumentParser(description='Run tests and generate JUnit report.')
          parser.add_argument('--cases-dir', type=str, default='TestcasesDIR', help='Directory containing test cases')
          parser.add_argument('--case-file', type=str, default='testcase1.py', help='Test case file to run')
          args = parser.parse_args()
      
          # 获取测试用例目录和文件
          current_dir = os.path.abspath(os.path.dirname(__file__))
          test_case_path = os.path.join(current_dir, args.cases_dir, args.case_file)
          print(f"Running tests from: {test_case_path}")
      
          # 生成 JUnit XML 报告文件的路径
          parent_dir = os.path.abspath(os.path.join(current_dir, os.pardir))
          junit_xml_path = os.path.join(parent_dir, 'junit-report.xml')
      
          # 设置 pytest 命令参数并调试打印路径
          args_list = ['-s', '-v', test_case_path, '--junit-xml', junit_xml_path]
          print(f"pytest args: {args_list}")
      
          # 执行测试
          pytest.main(args_list)
      
      if __name__ == '__main__':
          main()
  3. CI/CD 集成:

    • 许多持续集成工具(如 Jenkins、GitLab CI、Travis CI)可以自动读取 JUnit 格式的报告来生成可视化的测试结果。
    • 在 Jenkins 中,可以使用 "Publish JUnit test result report" 功能来解析和展示报告。

报告内容

JUnit XML 报告通常包含以下信息:

  • 测试套件(testsuite)

    • name: 测试套件的名称。
    • tests: 套件中的测试用例总数。
    • failures: 失败的测试用例数。
    • errors: 出错的用例数。
    • time: 执行该测试套件花费的总时间。
  • 测试用例(testcase)

    • classname: 用例所属的类名称。
    • name: 测试用例的名称。
    • time: 执行该测试用例的运行时间。
    • 状态 :在测试用例下面可能会有 <failure><error> 元素描述具体的失败或出错信息。
  • 系统输出

    • <system-out>: 包含测试期间的标准输出。
    • <system-err>: 包含测试期间的错误输出。

示例 JUnit XML

下面是一个简单的 JUnit XML 文件的例子:

cs 复制代码
<testsuite name="Example" tests="2" failures="1" errors="0" time="1.234">
    <testcase classname="TestExample" name="testSomething" time="0.123">
        <failure message="failure">Assertion failed</failure>
    </testcase>
    <testcase classname="TestExample" name="testAnotherThing" time="1.111"/>
</testsuite>

自动化流程

通过脚本化或使用持续集成平台中的自动化步骤,JUnit 报告文件的生成和处理可以完全自动化,实现整个软件测试生命周期的连续、高效管理和分析。

总结:

我想提一嘴儿的是之前也用过allure和unittestreport这种html类型的文件集成到Jenkins上去用 但是效果不尽人意 前者由于Jenkins上的安全问题无法加载allurereport 后者由于css的原因 Jenkins上展示的结果和本地的不一致

于是请教了团队里面的负责集成的老师 他告诉我没必要在这个上面花太多精力。因为最终这套测试用起来的话,它是多个项目里某个项目里的某种测试集。

在Jenkins上会有各种不同的测试,而且还需要进一步的处理由另一个团队去收集数据做统计。

单独一个独特结果的效果没必要特别优化,只需要保证数据正确,可以被统一处理就好。

对这套测试有用处的特定结果保证在本地能看到就足够了,

而Junit这个报告的特性(只是记录结果的,总共多少测试,哪些成功哪些失败,耗时多少)非常符合我们的需求 所以最后也是采用这个报告去集成到Jenkins上 至于它无法像html那么直观的问题 debug的时候完全可以靠log来解决

所以其实具体用哪种报告 还是要结合你们具体的需求

相关推荐
知乎的哥廷根数学学派3 小时前
面向可信机械故障诊断的自适应置信度惩罚深度校准算法(Pytorch)
人工智能·pytorch·python·深度学习·算法·机器学习·矩阵
且去填词3 小时前
DeepSeek :基于 Schema 推理与自愈机制的智能 ETL
数据仓库·人工智能·python·语言模型·etl·schema·deepseek
人工干智能3 小时前
OpenAI Assistants API 中 client.beta.threads.messages.create方法,兼谈一星*和两星**解包
python·llm
databook3 小时前
当条形图遇上极坐标:径向与圆形条形图的视觉革命
python·数据分析·数据可视化
阿部多瑞 ABU4 小时前
`chenmo` —— 可编程元叙事引擎 V2.3+
linux·人工智能·python·ai写作
acanab4 小时前
VScode python插件
ide·vscode·python
知乎的哥廷根数学学派4 小时前
基于生成对抗U-Net混合架构的隧道衬砌缺陷地质雷达数据智能反演与成像方法(以模拟信号为例,Pytorch)
开发语言·人工智能·pytorch·python·深度学习·机器学习
WangYaolove13145 小时前
Python基于大数据的电影市场预测分析(源码+文档)
python·django·毕业设计·源码
知乎的哥廷根数学学派5 小时前
基于自适应多尺度小波核编码与注意力增强的脉冲神经网络机械故障诊断(Pytorch)
人工智能·pytorch·python·深度学习·神经网络·机器学习
cnxy1886 小时前
Python爬虫进阶:反爬虫策略与Selenium自动化完整指南
爬虫·python·selenium