最近在将 Sikuli 测试框架(基于 OpenCV 实现)集成到自动化测试平台中,我们的 Windows 10 测试机默认的组策略是 10 分钟无操作的话,自动进入屏保并锁屏,一旦锁屏,基于 Sikuli 的测试用例都无法正常执行,因为 Sikuli 的实现基础是图像识别。有两种方法可以确保测试机不进入屏保和锁屏。
1. 通过修改组策略
这种方式具有侵入性,破坏了原有测试机的状态,而且每次部署新的测试机需要更改组策略(Windows 为了安全考虑,组策略的更改没有 API 的方式可以代码实现,需要手动去做,所以基本不能自动化),不推荐。
2. 通过平台调用持续激活测试代理
在测试代理程序中加入以下平台调用模块,测试代理启动时,调用 Enable(),退出时调用 Disable()。
public class KeepRunningService
{
[Flags]
public enum EXECUTION_STATE : uint
{
ES_AWAYMODE_REQUIRED = 0x00000040,
ES_CONTINUOUS = 0x80000000,
ES_DISPLAY_REQUIRED = 0x00000002,
ES_SYSTEM_REQUIRED = 0x00000001
}
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags);
public void Enable()
{
SetThreadExecutionState(EXECUTION_STATE.ES_DISPLAY_REQUIRED
| EXECUTION_STATE.ES_CONTINUOUS);
}
public void Disable()
{
SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS);
}
}