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

如何通过标准ABAP报表程序化运行ABAP Unit测试并定时展示结果?

程序化运行ABAP Unit测试并展示结果

要实现程序化执行ABAP Unit测试、定时运行并在ALV中展示结果,核心是利用SAP官方提供的CL_AUNIT_RUNNER类触发测试,再提取结果并通过ALV输出。以下是具体实现方案:

一、核心实现逻辑

  • 用CL_AUNIT_RUNNER的静态方法RUN执行指定对象(类、程序、函数组等)的ABAP Unit测试
  • 通过CL_AUNIT_RESULT类获取测试的详细结果(通过/失败状态、错误信息、测试时长等)
  • 将结果整理为内表后,调用ALV控件展示数据

二、完整报表程序示例

REPORT z_run_aunit_test.

* 选择屏幕:输入测试对象名称和类型
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
  PARAMETERS: p_obj TYPE seoclsname OBLIGATORY, " 对象名称(类/程序)
              p_type TYPE trobjtype OBLIGATORY DEFAULT 'CLS' AS LISTBOX VISIBLE LENGTH 3. " 类型:CLS=类,PROG=程序
SELECTION-SCREEN END OF BLOCK b1.

* 定义结果内表结构
TYPES: BEGIN OF ty_result,
         obj_name TYPE seoclsname, " 测试对象名称
         test_class TYPE seoclsname, " 测试类名称
         test_method TYPE seoattrname, " 测试方法名称
         status TYPE char10, " 状态:PASS/FAIL/ERROR
         message TYPE string, " 错误/失败信息
         duration TYPE i, " 测试时长(毫秒)
       END OF ty_result.

DATA: gt_result TYPE STANDARD TABLE OF ty_result,
      gs_result TYPE ty_result,
      go_runner TYPE REF TO cl_aunit_runner,
      go_result TYPE REF TO cl_aunit_result,
      go_testcase TYPE REF TO cl_aunit_testcase,
      go_testmethod TYPE REF TO cl_aunit_testmethod,
      go_message TYPE REF TO cl_aunit_message.

START-OF-SELECTION.
  * 初始化测试运行器
  CREATE OBJECT go_runner.
  go_runner->set_filter( EXPORTING i_filter = cl_aunit_filter=>create( ) ).
  go_runner->add_object( EXPORTING i_object_name = p_obj
                                    i_object_type = p_type ).

  * 执行测试
  go_result = go_runner->run( ).

  * 遍历结果整理到内表
  LOOP AT go_result->get_testcases( ) INTO go_testcase.
    LOOP AT go_testcase->get_testmethods( ) INTO go_testmethod.
      gs_result-obj_name = p_obj.
      gs_result-test_class = go_testcase->get_name( ).
      gs_result-test_method = go_testmethod->get_name( ).
      gs_result-duration = go_testmethod->get_duration( ).

      CASE go_testmethod->get_status( ).
        WHEN cl_aunit_constants=>c_status_passed.
          gs_result-status = 'PASS'.
        WHEN cl_aunit_constants=>c_status_failed.
          gs_result-status = 'FAIL'.
          LOOP AT go_testmethod->get_messages( ) INTO go_message.
            gs_result-message = go_message->get_text( ).
          ENDLOOP.
        WHEN cl_aunit_constants=>c_status_error.
          gs_result-status = 'ERROR'.
          LOOP AT go_testmethod->get_messages( ) INTO go_message.
            gs_result-message = go_message->get_text( ).
          ENDLOOP.
      ENDCASE.

      APPEND gs_result TO gt_result.
      CLEAR gs_result.
    ENDLOOP.
  ENDLOOP.

  * ALV展示结果
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program = sy-repid
      is_layout          = VALUE #( colwidth_optimize = abap_true )
      it_fieldcat        = VALUE #(
        ( fieldname = 'OBJ_NAME'   seltext_m = '测试对象' )
        ( fieldname = 'TEST_CLASS' seltext_m = '测试类' )
        ( fieldname = 'TEST_METHOD' seltext_m = '测试方法' )
        ( fieldname = 'STATUS'     seltext_m = '状态' )
        ( fieldname = 'MESSAGE'    seltext_m = '信息' )
        ( fieldname = 'DURATION'   seltext_m = '时长(ms)' )
      )
    TABLES
      t_outtab           = gt_result
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

三、定时执行配置

  1. 事务码SM36创建后台作业,填写作业名称与描述
  2. 在「步骤」中添加上述报表程序,设置固定的选择屏幕参数(要测试的对象和类型)
  3. 在「开始条件」中配置定时计划(如每天凌晨2点执行)
  4. 保存并激活作业,系统会按计划自动执行测试;可通过SM37查看作业日志,也可修改程序将结果写入文件或发送邮件通知

四、扩展说明

  • 若需批量测试多个对象,可修改选择屏幕为多选参数,循环调用add_object方法添加测试对象
  • 可通过CL_AUNIT_FILTER设置过滤条件(如只运行特定测试类、排除某些方法)
  • 如需导出结果,可在ALV中开启导出功能,或直接在程序中实现写入本地文件/发送邮件的逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 04:34:49