VSTS - 测试录制文件为空

时间:2017-12-13 13:55:27

标签: .net tfs azure-devops hyper-v expression-encoder-sdk

对于我们中间的VSTS(或TFS)专家......

我遇到的问题是,Microsoft Expression Encoder SDK生成的录制文件显示为空。上下文的一个小描述:

我们正在VSTS环境中工作,其中设置了构建定义和多个版本定义。此流程正常运行。签入完成,构建触发器和完成,发布开始和结束,直到UI测试运行的最后一个版本,并以正确的结果结束。我们正在使用构建代理和单独的测试代理(两者都是Windows 10操作系统),它们位于同一个域中,可以毫无困难地相互连接。

Environment

我正在尝试在测试场景中包含录音。我在笔记本电脑上安装了Microsoft Expression Encoder SP 2(它也可以作为构建代理)和测试代理。在这两个系统上,我都可以手动制作录音而不会出现问题。在本地运行测试时(从Visual Studio本身),相应地创建录制。

LocalRecording

现在的问题是:当测试代理启动测试运行时,会创建录制文件,但它们最终都是4.93kb文件,没有任何内容。我可以打开它们,但它们的运行时间为0:00。在构建日志或事件查看器中没有出现任何错误:我得到的只是空文件。

TestAgentRecording

背景的一些相关代码:

    [SetUp]
    public void Initialize()
    {
        testName = TestContext.CurrentContext.Test.Name;

        var path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + @"\Recordings";
        Directory.CreateDirectory(path);
        recorder = new ScreenCaptureJob
        {
            OutputScreenCaptureFileName = path + @"\" + testName + @".xesc",
            CaptureRectangle = new Rectangle(0, 0, 1024, 768),
            ShowFlashingBoundary = false,
            CaptureMouseCursor = false,
            CaptureFollowCursor = false,
            CaptureLargeMouseCursor = false,
            CaptureLayeredWindow = false,
            ShowCountdown = false
        };

        Logger.Logger.Log(recorder.OutputScreenCaptureFileName); 

        if (File.Exists(recorder.OutputScreenCaptureFileName))
        {
            File.Delete(recorder.OutputScreenCaptureFileName);
        }

        recorder.Start();

        /* Navigation to baseUrl */
        Driver.Navigate().GoToUrl(startUrl);
        WaitForUrl(startUrl);
        recorder.Stop();
    }

有没有人知道什么(缺乏)魔法导致这个问题?如果分析需要更多信息,那么我很乐意提供。

提前致谢!

CNC中 回应Wouter:我应该注意构建代理使用test-agent的Administrator帐户登录,因此权限应该(可能?)不是问题。

-EDIT 2- 我在整个过程中添加了一些日志记录,这显示了一些有趣的内容:

2017-12-14 10:51:29.322 C:\ TestDrop * censored * \ drop \ bin \ Debug \ Recordings_LoadHomePage_ClickMenuQuestions_NavigatedToJobs.xesc

2017-12-14 10:51:29.322 posX  : 0
2017-12-14 10:51:29.337 posY  : 0
2017-12-14 10:51:29.337 width : 1024
2017-12-14 10:51:29.337 height: 768
2017-12-14 10:51:29.353 Size before starting: 0
2017-12-14 10:51:29.353 Status before starting: NotStarted
2017-12-14 10:51:29.353 Duration before starting: 00:00:00
2017-12-14 10:51:29.369 Framecount before starting: 0
2017-12-14 10:51:29.400 Size started        : 0
2017-12-14 10:51:29.415 Status started        : Running
2017-12-14 10:51:29.415 Duration started        : 00:00:00.0111608
2017-12-14 10:51:29.415 Framecount started        : 1
2017-12-14 10:51:44.315 Size close to ending: 0
2017-12-14 10:51:44.320 Status close to ending: Running
2017-12-14 10:51:44.324 Duration close to ending: 00:00:14.9117567
2017-12-14 10:51:44.332 Framecount close to ending: 190
2017-12-14 10:51:44.344 Size stopped        : 0
2017-12-14 10:51:44.349 Status stopped        : NotStarted
2017-12-14 10:51:44.354 Duration stopped        : 00:00:00
2017-12-14 10:51:44.359 Framecount stopped        : 0

显然,录音实际上正在运行。在recorder.stop()之前,framecount是190,但文件大小保持为0.在本地运行测试时,我得到以下内容:

2017-12-14 10:48:31.861 posX  : 0
2017-12-14 10:48:31.867 posY  : 0
2017-12-14 10:48:31.872 width : 1024
2017-12-14 10:48:31.877 height: 768
2017-12-14 10:48:31.882 Size before starting: 0
2017-12-14 10:48:31.888 Status before starting: NotStarted
2017-12-14 10:48:31.893 Duration before starting: 00:00:00
2017-12-14 10:48:31.898 Framecount before starting: 0
2017-12-14 10:48:31.948 Size started        : 0
2017-12-14 10:48:31.952 Status started        : Running
2017-12-14 10:48:31.956 Duration started        : 00:00:00.0090997
2017-12-14 10:48:31.963 Framecount started        : 0
2017-12-14 10:48:53.630 Size close to ending: 9998272
2017-12-14 10:48:53.634 Status close to ending: Running
2017-12-14 10:48:53.640 Duration close to ending: 00:00:21.6936283
2017-12-14 10:48:53.647 Framecount close to ending: 322
2017-12-14 10:48:53.669 Size stopped        : 0
2017-12-14 10:48:53.675 Status stopped        : NotStarted
2017-12-14 10:48:53.681 Duration stopped        : 00:00:00
2017-12-14 10:48:53.685 Framecount stopped        : 0

这里唯一的区别是文件大小,即9998272。我认为这确实表明了一个权限问题,虽然我仍然感到困惑,为什么可以创建一个视频,但不是写... ...

1 个答案:

答案 0 :(得分:1)

已找到解决方法。由于Expression Encoder本身在Test-Agent上运行良好,因此我编写了一个小型应用程序,该应用程序在Test-Agent本身上运行,并且正在侦听来自网络上其他设备的调用。当接收“start”或“stop”等简单命令时,应用程序在本地使用Expression Encoder SDK(因此,在Test-Agent上)启动或停止录制。由于应用程序在本地运行,因此可以防止任何可能的权限问题。最终,我们会将应用程序转换为Windows服务,以便更轻松地使用它。

虽然从技术上讲这不是问题的答案,但至少我们可以使用一些东西。感谢大家的回复!

修改 在使用上述解决方案时,我们发现了实际问题:录制过程未在交互式会话中找到位置。它作为Windows服务运行,因此没有实际的屏幕要记录。

显然VSTS有一个简单的解决方案。任务“Visual Studio测试代理部署”实际上有一个复选框,字面上称为“运行UI测试”。出于某种原因,我以前错过了它,我认为它在TFS2015中被称为“作为交互式会话运行”

Run UI Tests

选中此按钮,(在我的情况下)Expression Encoder保存录音没有问题。