在编写测试脚本的过程中,我们无法避免的需要自己定义一些API函数完成指定的目标。在CAPL库中,存在着两大类的函数:一种是普通函数,一种是测试函数。这篇文章主要是介绍这两种函数的之间的区别以及自己在使用过程中的一些常用场景。这两种函数并没有高下之分,只是在处理不同问题上有自己的优势而已。
普通函数
命名方式
以下方的函数为例。这里先定义了函数类型为 int 型,后面则是函数名和参数名。
int func_Comm_SetSig_Chk(signal *aSig, float val)
{
long result;
char buffer[64];
buffer[0] = '\0';
getSignalDescriptionForValue(aSig, val, buffer, elCount(buffer));
/*Step 1 to set a signal value*/
$aSig.phys = val;
result = testWaitForSignalMatch(aSig, val, 300);
if(1 != result){
testStepFail("1","%s \n value is [ %.3f ], failed to set as expected [ %.3f ] [ %s ].",aSig.name, $aSig.phys, val, buffer);
return -1;
}
else{
testStepPass("1","%s \n value is [ %.3f ], set as expected [ %.3f ] [ %s ].",aSig.name, $aSig.phys, val, buffer);
}
return 1;
}
报告输出
下方截图中的每一个灰色方框的执行命令及其结果。总的来说,你可以看到每一个函数的执行结果。
测试函数
命名方式
以下方的函数为例。这里先定义了函数类型为testfunction,后面则是函数名和参数名。
testfunction tstf_APA_Off_Mode_ConditionSet()
{
func_Comm_SetSig_Chk(isVehModMngtGlbSafe1UsgModSts, 0); //abandon
func_Comm_SetSig_Chk(isEngSt1WdStsEngSt1WdSts, 0x5); //abandon
func_APA_ButPress_PrkgInOrOutAndCncl(0);
func_APA_ButPress_DrvrAsscSysBtnPush(0);
}
报告输出
下方有整个testfunction的测试结果,其中每一个函数的执行结果也在其中进行了一一展示。总的来说,你可以看到每一个测试函数以及内部函数的执行结果。
总结
对于场景简单的测试场景来说,这两者的区别可能并没有太大。但是,对于复杂的场景来说,如果前后关系具有强相关的性质,并且操作步骤很多。可以想象一下,其中的某一步执行结果为 Failed 。那么,如何将函数与在测试用例中的关系对应起来,这是否会耗费大量的时间呢?你说你可以通过函数名快速定位,那如果用例里面本身就存在着多个步骤使用到同一函数,你又有什么办法呢?例如下图:
在这整个测试步骤中,有8个测试点需要检查。这份报告的输出,可以很明确的告诉我这个测试步骤不通过,并且是第1、2、3、5、6、7、8 这七个测试点不通过。通过普通函数也可以知道测试点的失败,但我相信检查起来并没有使用 testfunction 迅速。同时,恰当的使用 testfunction 函数会将你的主程序简化不少,输出的测试报告的可读性更高。