1 关键字

电源管理;HatsPowermgrPowerTest;测试用例

2 问题描述

设备型号:XXXXX

系统版本:OpenHarmony 3.2 Release

代码版本:XXXXXX

问题现象:在进行电源管理模块hats用例测试,用例直接中断退出,无法执行整个模块的用例,导致HatsPowermgrPowerTest模块测试用例失败。

 

3 问题原因

3.1 正常机制

在进行hats电源管理HatsPowermgrPowerTest模块用例测试时,能正常执行,结果是pass。

3.2 异常机制

在执行HatsPowermgrPowerTest模块时,设备息屏,测试用例执行被退出,同时HDC也无法连接设备。

4 解决方案

由于该产品的息屏是将StartSuspend接口进行了重写,实现了真待机的效果,此时不仅仅是熄屏,CPU等硬件是停止工作的,所以导致HDC中断,其他用例无法

测试;而原有的测试接口是对屏幕熄屏进行测试。所以需要对具体接口HdfPowerHdiTest003在调用接口StartSuspend前加一个标志判断,使其不进入真待机状

态,相当于一种规避,以免影响整体的测试。

在整体逻辑前加标志进行规避处理
HWTEST_F(HdfPowerHdiTest, HdfPowerHdiTest003, TestSize.Level1)
{
    if (false) {
      int32_t ret = g_powerInterface->StartSuspend();
      EXPECT_EQ(0, ret);
      .............
      .............
    }
}

5 定位过程

5.1 由于是用例测试中断了,而且HatsPowermgrPowerTest类中没有日志输出,那么就只能手动依次添加日志进行详细定位是哪个测试接口出的问题,首先看初

始化调用的几个接口:

    static void SetUpTestCase();
    static void TearDownTestCase();
    void SetUp();
    void TearDown();
    static int32_t ReadFile(const char *path, char *buf, size_t size);

经依次分析,除了ReadFile接口打开了一个文件操作,其他都是空函数,可排除初始化问题。

5.2 排除了初始化问题,那么就只可能存在具体的测试接口HdfPowerHdiTesXXX中了,对此,我们依次添加日志,发现问题所在:

 

 

发现在HdfPowerHdiTes003没有正常的退出。

5.3 分析HdfPowerHdiTes003,定位到调用导致异常的接口StartSuspend

HWTEST_F(HdfPowerHdiTest, HdfPowerHdiTest003, TestSize.Level1)
{
    int32_t ret = g_powerInterface->StartSuspend();
    EXPECT_EQ(0, ret);
    .............
    .............
}

5.4 进一步分析,发现该产品的StartSuspend进行了重写,原来是该产品对业务上实现了真待机的功能,调用了指定产品的驱动;而原有的接口流程只是进行的熄屏的操作如下:

 

 

重写StartSuspend关键点:

 

 

5.5 在调用驱动真待机接口后,不仅熄屏,此时CPU等硬件都停止工作了,进入真正的休眠了,这也是导致当前HDC断开,后续其它测试用例都无法继续执行的问

题所在了。针对此种情况,可以在测试用例执行过程中,让设备不进入真正的休眠状态,只需要进行上面的简单方案即可。

6 知识分享

通过测试用例模块名称快速定位到具体的代码框架;同时对电源管理中的熄屏、唤醒、强制休眠等功能有一个比较性的认识。

Logo

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

更多推荐