测试分析

ActsSamgrTes测试用例sendrequest_func_test.c中testSendRequest0070、testSendRequest0080、testSendRequest0090在测试时存在失败的情况:

搜索 "sendrequest_func_test.c"1个文件中匹配到10次,总计查找1次) [RegEx]
  D:\test.log (匹配10次)
    行  403: ../../../test/xts/acts/distributed_schedule_lite/system_ability_manager_hal/src/sendrequest_func_test.c:410:testSyncCall0010:PASS
    行  408: ../../../test/xts/acts/distributed_schedule_lite/system_ability_manager_hal/src/sendrequest_func_test.c:438:testSendRequest0010:PASS
    行  433: ../../../test/xts/acts/distributed_schedule_lite/system_ability_manager_hal/src/sendrequest_func_test.c:476:testSendRequest0020:PASS
    行  436: ../../../test/xts/acts/distributed_schedule_lite/system_ability_manager_hal/src/sendrequest_func_test.c:514:testSendRequest0030:PASS
    行  439: ../../../test/xts/acts/distributed_schedule_lite/system_ability_manager_hal/src/sendrequest_func_test.c:543:testSendRequest0040:PASS
    行  442: ../../../test/xts/acts/distributed_schedule_lite/system_ability_manager_hal/src/sendrequest_func_test.c:571:testSendRequest0050:PASS
    行  450: ../../../test/xts/acts/distributed_schedule_lite/system_ability_manager_hal/src/sendrequest_func_test.c:605:testSendRequest0060:PASS
    行  455: ../../../test/xts/acts/distributed_schedule_lite/system_ability_manager_hal/src/sendrequest_func_test.c:668:testSendRequest0070:FAIL: E0xc00 OsMemAlloc size: 8 Byte, AllocSize: 16 Byte, UsedMemSize: 46312 Byte. 
    行  460: ../../../test/xts/acts/distributed_schedule_lite/system_ability_manager_hal/src/sendrequest_func_test.c:704:testSendRequest0080:FAIL: Expected 0xc00 OsMemAlloc size: 32 Byte, AllocSize: 40 Byte, UsedMemSize: 46352 Byte. 
    行  506: ../../../test/xts/acts/distributed_schedule_lite/system_ability_manager_hal/src/sendrequest_func_test.c:737:testSendRequest0090:FAIL: Expected -73 Was 0

-----------------------
10 Tests 3 Failures 0 Ignored 

在测试结果中可以看到三个测试用例执行失败,分析代码testSendRequest0070、testSendRequest0080、testSendRequest0090测试用例中是通过发送异步请求,根据返回结果与预期结果进行判断,但是在发送请求后立即进行了断言判断,此时请求尚未完成并返回结果,因此导致测试失败。

修改

在发送请求后添加延时,给系统留出了处理消息的时间,确保后台线程有机会执行回调函数并更新数据,从而保证断言检查的是正确的结果。

LITE_TEST_CASE(SendRequestTestSuite, testXXXXXXXX, Function | MediumTest | Level2)
{
    for (int i = 0; i < PRESSURE_BASE; i++) {
        ...
        int32 result = demoApi->SAMGR_SendRequestProxy(&feature->identity, &request, DemoHandlerAndCheck); 
        TEST_ASSERT_EQUAL_INT(result, 0);
        osDelay(OPER_INTERVAL);  // 添加延时
        TEST_ASSERT_EQUAL_INT(strcmp(feature->latestRequest, body), 0);
          ...
    }
}

修改后测试结果:

搜索 "sendrequest_func_test.c"1个文件中匹配到10次,总计查找1次) [RegEx]
  新文件 1 (匹配10次)
    行 403: ../../../test/xts/acts/distributed_schedule_lite/system_ability_manager_hal/src/sendrequest_func_test.c:410:testSyncCall0010:PASS
    行 408: ../../../test/xts/acts/distributed_schedule_lite/system_ability_manager_hal/src/sendrequest_func_test.c:438:testSendRequest0010:PASS
    行 432: ../../../test/xts/acts/distributed_schedule_lite/system_ability_manager_hal/src/sendrequest_func_test.c:476:testSendRequest0020:PASS
    行 435: ../../../test/xts/acts/distributed_schedule_lite/system_ability_manager_hal/src/sendrequest_func_test.c:514:testSendRequest0030:PASS
    行 438: ../../../test/xts/acts/distributed_schedule_lite/system_ability_manager_hal/src/sendrequest_func_test.c:543:testSendRequest0040:PASS
    行 441: ../../../test/xts/acts/distributed_schedule_lite/system_ability_manager_hal/src/sendrequest_func_test.c:571:testSendRequest0050:PASS
    行 449: ../../../test/xts/acts/distributed_schedule_lite/system_ability_manager_hal/src/sendrequest_func_test.c:605:testSendRequest0060:PASS
    行 456: ../../../test/xts/acts/distributed_schedule_lite/system_ability_manager_hal/src/sendrequest_func_test.c:644:testSendRequest0070:PASS
    行 578: ../../../test/xts/acts/distributed_schedule_lite/system_ability_manager_hal/src/sendrequest_func_test.c:679:testSendRequest0080:PASS
    行 656: ../../../test/xts/acts/distributed_schedule_lite/system_ability_manager_hal/src/sendrequest_func_test.c:716:testSendRequest0090:PASS

-----------------------
10 Tests 0 Failures 0 Ignored 

注意:如果 OPER_INTERVAL 定义的值过小(例如小于消息处理的平均耗时),在压力测试环境下仍可能偶发失败。如果发现取消注释后仍有不稳定情况,可能需要适当增大 OPER_INTERVAL 的值。

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐