【问题标题】:VSTS - Test Recording files emptyVSTS - 测试记录文件为空
【发布时间】:2018-05-27 10:40:02
【问题描述】:

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

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

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

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

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

一些相关的背景代码:

    [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();
    }

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

提前致谢!

-编辑- 回应 Wouter:我应该注意到构建代理使用测试代理的管理员帐户登录,所以权限应该(可能?)不是问题。

-编辑 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() 之前,帧数为 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。我认为这确实表明存在权限问题,尽管我仍然对为什么可以创建视频但不写视频感到困惑......

【问题讨论】:

  • 您是否尝试过以构建代理的身份手动登录运行录制软件?可能是权限问题
  • 想法不错,但是构建代理已经使用测试代理的管理员帐户登录。我会将其添加到信息中:感谢您的注意!
  • 会不会是视频软件还没有开始录制,测试已经结束的时间问题?
  • 尝试通过命令行手动运行测试,看看是否有效。将 system.debug 变量设置/添加为 true,然后排队构建(并触发发布),然后在此处发布详细日志(删除个人信息)。你可以比较命令。
  • @WouterdeKort 当我最初运行测试时,recorder.stop 命令设置为测试结束。由于测试大约需要 15 秒才能完成,如果时间问题,至少应该记录其中的一部分。

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


【解决方案1】:

已找到解决方法。由于 Expression Encoder 本身在 Test-Agent 上运行良好,我编写了一个小应用程序,它在 Test-Agent 本身上运行并监听来自网络上其他设备的调用。当接收到诸如“开始”或“停止”之类的简单命令时,应用程序在本地(因此,在测试代理上)使用表达式编码器 SDK 来开始或停止录制。由于应用程序在本地运行,因此可以防止任何可能的权限问题。最终,我们会将应用程序转换为 Windows 服务,以方便使用。

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-13
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多