ABAP 后台程序BACKGROUND JOB DEBUG的终极大法(可修改数据并反映到结果当中)

时间:2024-03-30 15:32:43

在项目中对程序进行白盒测试时,为了将各个测试点都覆盖到,有时候需要在DEBUG中修改数据。

前台程序毋庸置疑,直接在程序中打断点进入DEBUG模式,对于需要修改的变量直接改动即可。

但是后台程序在跑JOB的时候该如何进入到DEBUG模式、并通过修改变量而得到想要的数据or结果呢?

在百度上搜索并没有找到完美的解决方案,去浏览了一下SAP QA社区里面的下面的回答,并整理总结一下项目上get的经验与大家分享。

以下分享三种后台程序DEBUG的方法,其中NO.1大法是可以用来修改数据的,NO.2/3是其他两种比较常见的DEBUG方式。


目录

NO.1 可以修改数据并反应到JOB结果中的DEBUG大法!

STEP 1: 准备工作

STEP 2: 定义JOB (TCODE:SM36)

STEP 3: 结果查看 (T-CODE: SM37)

NO.2 JDBG大法

STEP 1: 选中作业

STEP 2: F7找自己的代码

NO.3 在JOB LOG中回到程序DEBUG界面 

STEP 1: 选中作业

STEP 2: DEBUG


NO.1 可以修改数据并反应到JOB结果中的DEBUG大法!

STEP 1: 准备工作

1-1 在程序中设置外部断点(带小人脑袋的那个)

ABAP 后台程序BACKGROUND JOB DEBUG的终极大法(可修改数据并反映到结果当中)

 1-2 在选择画面上输入信息,并保存一个Varient变式,作为后续后台执行时的选择画面条件ABAP 后台程序BACKGROUND JOB DEBUG的终极大法(可修改数据并反映到结果当中)

ABAP 后台程序BACKGROUND JOB DEBUG的终极大法(可修改数据并反映到结果当中)

STEP 2: 定义JOB (TCODE:SM36)

2-1 输入自定义的JOB名称之后点击保存ABAP 后台程序BACKGROUND JOB DEBUG的终极大法(可修改数据并反映到结果当中)

2-2 保存后会自动弹窗,让用户自定义步骤。在步骤的Name中输入'BTCLOOP',之后点击保存

ABAP 后台程序BACKGROUND JOB DEBUG的终极大法(可修改数据并反映到结果当中)

 2-3 保存后①点击新建按钮后会弹出右边框;②在STEP2的名称中填入程序名,在变式中填入刚刚保存的选择画面Varient;③保存

ABAP 后台程序BACKGROUND JOB DEBUG的终极大法(可修改数据并反映到结果当中)

 2-4 点击返回ABAP 后台程序BACKGROUND JOB DEBUG的终极大法(可修改数据并反映到结果当中)

得到以下结果 

ABAP 后台程序BACKGROUND JOB DEBUG的终极大法(可修改数据并反映到结果当中)  2-5 点击开始条件Start Condition,选择立刻执行并保存

ABAP 后台程序BACKGROUND JOB DEBUG的终极大法(可修改数据并反映到结果当中)

2-6 点击个人作业Own Jobs

ABAP 后台程序BACKGROUND JOB DEBUG的终极大法(可修改数据并反映到结果当中) 2-7 在自己的JOB LIST中选中刚刚定义的JOB,这部分需要强调一点的是需要注意一下此时JOB的STATUS状态,如果是Scheduled的状态,需要将其Release成Active状态(要Release两遍,第一遍成为Ready状态)。在确保状态是执行中的状态时点击应用程序服务器Application Servers

ABAP 后台程序BACKGROUND JOB DEBUG的终极大法(可修改数据并反映到结果当中) 2-8 双击进入该Server

ABAP 后台程序BACKGROUND JOB DEBUG的终极大法(可修改数据并反映到结果当中) 2-9 选中刚刚定义的BTCLOOP这行,点击菜单栏的管理Administration-程序Program-调试Debugging

ABAP 后台程序BACKGROUND JOB DEBUG的终极大法(可修改数据并反映到结果当中)

 2-10 首先会进入开始定义的第一步BTCLOOP循环,这里要手动将I参数改成0以外的其他值,防止死循环。

ABAP 后台程序BACKGROUND JOB DEBUG的终极大法(可修改数据并反映到结果当中)

2-11 此时点击F8,锵锵锵~~~ 就会进入之前在程序中打的外部断点的位置,然后按需修改参数进行测试就可以啦。跑完程序后会退回到2-9的界面,此时去SM37查看就能找到刚刚跑完的JOB

ABAP 后台程序BACKGROUND JOB DEBUG的终极大法(可修改数据并反映到结果当中) 例如我在这里想要测试主数据取得不到的场合,把GT_A表格清空,并确认SY-BATCH的确为后台执行,然后F8跑出去。

ABAP 后台程序BACKGROUND JOB DEBUG的终极大法(可修改数据并反映到结果当中)

STEP 3: 结果查看 (T-CODE: SM37)

从这里之后的操作与正常查看后台JOB的结果没有不同,点击可查看JOB LOG, Spool, Step等等。

Duration就是程序执行&Debug总共花的时间。有些程序有执行日期/时间的取得逻辑,在进行DEBUG操作时,这部分时间需要注意一下。

PS:如果想再次以这种方法跑一次后台Debug,则退回到2-1的屏幕中,再次点击保存,之后的步骤直接跳到2-5。【这种方法定义的JOB在退掉SM36之后需要重新编辑STEP步骤2-2~2-4】

ABAP 后台程序BACKGROUND JOB DEBUG的终极大法(可修改数据并反映到结果当中)

 


NO.2 JDBG大法

我在网络上看到有很多前辈推荐JDBG的DEBUG大法,这种方法非常便捷,但是个人觉得有一定的局限性。

前提:用后台跑了一遍JOB A(随便起个名字方便区分)

问题1:这种方法仅仅可以将程序按照JOB A执行的选择画面条件再次执行一次,并不会跑出结果,只是给你看一下过程

问题2:假如在跑完JOB A这次之后更改了代码逻辑,这样DEBUG进去,会按照新的代码逻辑走,并不能完全还原JOB A那次的过程。(我之前以为会是那种,在系统中自动保存了跑JOB A那次的程序版本,类似一个程序快照的东西。哈哈 后来发现我想多了)

优势:这种方法的优势在于,跑完JOB A之后直接DEBUG进去可以检查程序逻辑,找问题所在。

 

下面简单介绍一下这种方法如何实现,网络上已经有很多个教学版本了。

STEP 1: 选中作业

1-1 T-CODE SM37勾选中作业,并在T-CODE栏处输入JDBG后按回车

ABAP 后台程序BACKGROUND JOB DEBUG的终极大法(可修改数据并反映到结果当中)

STEP 2: F7找自己的代码

2-1 回车进去后会跑到系统代码里面,此时慢慢按几次F7就能跳转到自己的代码中(不同的系统按F7的次数不同,有时还会跳转回第一种方法的2-10界面,需要手动改I值防止死循环)

ABAP 后台程序BACKGROUND JOB DEBUG的终极大法(可修改数据并反映到结果当中)

 跳回自己的代码中啦

ABAP 后台程序BACKGROUND JOB DEBUG的终极大法(可修改数据并反映到结果当中)

 


NO.3 在JOB LOG中回到程序DEBUG界面 

第三种方法也是之前我在网络上搜索到的教程,不过这种方法在我看来无异于在SM38重新执行一次程序,没有什么特殊的优势。

STEP 1: 选中作业

1-1 勾选中作业后点击STEP步骤

ABAP 后台程序BACKGROUND JOB DEBUG的终极大法(可修改数据并反映到结果当中)

1-2 光标选中一个步骤之后(有红框),点击上方的转到Goto-程序Program

ABAP 后台程序BACKGROUND JOB DEBUG的终极大法(可修改数据并反映到结果当中)

STEP 2: DEBUG

2-1 ①跳转到自己的程序后,点击F8执行。

      ②在选择画面中输入完条件后,再次点击执行,就会进入到DEBUG模式当中(记得提前设断点)。

ABAP 后台程序BACKGROUND JOB DEBUG的终极大法(可修改数据并反映到结果当中)


以上就是几种常见的后台JOB的DEBUG方式,主要还是想跟大家分享第一种可以修改数据的方法。 文中如有表述不准确的地方,欢迎各位前辈指正。/鞠躬