如何生成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来解决

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

相关推荐
用户83562907805118 小时前
Python 实现 PDF 文件加密与解密方法
后端·python
用户83562907805118 小时前
使用 Python 冻结与拆分 Excel 窗格教程
后端·python
你好潘先生1 天前
别再记命令了,用 yeero do 说句人话就能跑脚本,而且不烧 token
服务器·python·命令行
Agent_大师1 天前
WebSocket 行情重连成功,K线缺口不会自动消失
python
荣码1 天前
LLM结构化输出:让AI返回JSON而不是废话,我踩了4个坑
java·python
copyer_xyf1 天前
FastAPI 如何连接 MySQL
后端·python
apocelipes2 天前
常用编程语言和库的正则表达式性能对比
c语言·c++·python·性能优化·golang·开发工具和环境
用户8356290780512 天前
使用 Python 在 PDF 中创建与管理书签
后端·python
MeixianAgent2 天前
Python 回测数据入口怎么验?历史 K 线入库前先做 5 个检查
后端·python
咕白m6252 天前
用 Python 实现一键批量查找与替换 Excel 数据
后端·python