【问题标题】:Automated testing of user mode actions on TFS Build Agent在 TFS 构建代理上自动测试用户模式操作
【发布时间】:2012-01-30 12:04:56
【问题描述】:

我正在编写一个响应键盘操作的应用程序。为了自动化测试,我编写了一个键盘模拟器,它使用 User32.dll / SendInput 来自动化按键和释放。这种方法在本地开发人员机器上运行良好,但在签入并在 TFS 构建代理上运行时会失败。我的猜测是用户模式活动没有按预期得到处理,因为它是作为服务运行的。是否有与自动化测试即服务兼容的自动化键盘按下和释放方法?

设置: 托管 TFS (tfspreview.com) Visual Studio 2010 终极版 MSTest,xUnit.NET Windows 7 专业版(开发版) Windows 2008 R2(构建控制器/构建代理)

违规代码:

测试用例:

            KeyboardSimulator.PressKey(Keys.A);

键盘模拟器:

    public static void PushKeyDown(Keys key)
    {
        SendKeyboardInput(key, (uint)FLAGS.NONE);
    }

    public static void ReleaseKey(Keys key)
    {
        SendKeyboardInput(key, (uint)FLAGS.KEYUP);
    }

    public static void PressKey(Keys key)
    {
        PushKeyDown(key);
        ReleaseKey(key);
    }

    #region Internals

    private static KEYBDINPUT createKeybdInput(Keys key, uint flag)
    {
        KEYBDINPUT i = new KEYBDINPUT();
        i.wVk = (ushort)key;
        i.wScan = 0;
        i.time = 0;
        i.dwExtraInfo = IntPtr.Zero;
        i.dwFlags = flag;
        return i;
    }

    private static void SendKeyboardInput(Keys key, uint flag)
    {
        INPUT[] inputs = new INPUT[1];
        inputs[0].type = INPUT_KEYBOARD;
        inputs[0].ki = createKeybdInput(key, flag);
        uint intReturn = SendInput(1, inputs, System.Runtime.InteropServices.Marshal.SizeOf(inputs[0]));
        if (intReturn != 1) throw new ApplicationException("Could not send key");
    }

    [DllImport("User32.dll")]
    private static extern uint SendInput(uint numberOfInputs, [MarshalAs(UnmanagedType.LPArray, SizeConst = 1)] INPUT[] input, int structSize);

【问题讨论】:

    标签: c# unit-testing tfs keyboard


    【解决方案1】:

    默认情况下,Team Foundation Build 服务器作为 Windows 服务运行。如您所料,这意味着它无法与桌面交互(它没有)。

    您需要将构建服务配置为在交互模式下运行。请按以下步骤操作:

    1. 打开 TFS 管理控制台,
    2. 选择构建配置,
    3. 单击 BuildService 上的属性
    4. 选择Run build service as: Interactive Process

    当然,在此期间您需要保持登录该计算机。如果是单独的构建服务器,可以配置自动登录,将TfsBuildServiceHost.exe添加到自动启动列表中。使用此配置,您无需再次登录。

    【讨论】:

    • 修复它格兰特。这是我期待的答案,但不是我希望的答案。这不是什么大问题,因为它在我的开发人员机器上作为 VM 运行。有登录用户的服务器让我感觉很脏。但是……至少……绿条!
    猜你喜欢
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多