测试期间的屏幕截图

时间:2010-05-13 19:35:29

标签: wpf testing

这是一个审查性能测试的应用程序。概念简单,难以描述。图片:

1)记录与WPF程序的交互,以便可以播放输入。

2)在进行连续屏幕捕捉时播放输入。

3)在播放期间捕获挂壁时间以及连续CPU百分比。

4)多次重复步骤(2)和(3)。

5)将相关内容写入files / db。

6)阅读并将其全部放入花哨的UI中,以便于查看/分析。

对我来说,杀手是(2)。我可以在一个好的,可能是商业的屏幕捕获SDK上使用一些指导。我也欢迎有关我的整个问题已经解决的消息。当然,对整体想法的任何想法都会很棒。

感谢。

7 个答案:

答案 0 :(得分:2)

如果您要为此进行开发,可以使用Windows自动化设置Cucumber / SpecFlow ...这是WPF中的一个示例,其中包含正在测试的应用程序的屏幕截图。

        /// <summary>
        /// Take screen shot
        /// </summary>
        /// <param name="left">left</param>
        /// <param name="top">top</param>
        /// <param name="width">width</param>
        /// <param name="height">height</param>
        /// <returns>screen shot in bytes</returns>
        public static byte[] TakeScreenShot(int left, int top, int width, int height)
        {
            // Set the bitmap object to the size of the screen
            var bmpScreenshot = new Bitmap(width, height,
                                                  PixelFormat.Format32bppArgb);

            // Create a graphics object from the bitmap
            var gfxScreenshot = Graphics.FromImage(bmpScreenshot);

            // Take the screenshot from the upper left corner to the right bottom corner
            gfxScreenshot.CopyFromScreen(left, top, 0, 0,
                                             new Size(width, height), CopyPixelOperation.SourceCopy);

            var buffer = new byte[bmpScreenshot.Size.Height * bmpScreenshot.Size.Width * 4];

            var stream = new MemoryStream(buffer);

            bmpScreenshot.Save(stream, ImageFormat.Png);

            return stream.ToArray();
        }

答案 1 :(得分:1)

您可以使用DirectShow在自己的应用程序中进行屏幕捕获。

有关如何使用DirectShow进行视频捕获以及指向示例代码的链接的一般详细信息,请参阅Video Capture。要从屏幕上专门捕获,您需要在wmpsrcwp.dll中找到的“屏幕捕获过滤器”过滤器,该过滤器可以在较新版本的Windows中找到,也可以作为Windows Media Encoder的一部分下载。

尽管UI Automation可用于播放事件,但它无法录制。如果您需要录制系统事件,我建议您使用Windows Hooks进行录制和播放。

DirectShow在C ++ / CLR中最容易做,而不是C#,因为您可以轻松地包含C ++头文件并进行非托管调用,而Windows Hooks只能在本机代码中完成。

答案 2 :(得分:1)

您是在创建性能测试产品还是在测试产品性能?

如果是后者,您可以查看Team Foundation Server 2010的功能集,特别是测试工具。似乎有一些不错的功能用于历史调试,分析和QA团队集成(测试会话视频播放等)。

否则,如果你只是在寻找vidcap工具,我总是喜欢SnagIt

答案 3 :(得分:1)

听起来我正在寻找一种可以执行UI交互的自动化测试工具。我们使用TestComplete 我相信它会做很多你正在寻找的功能性UI测试和录制。还有其他人。我想知道你是否真的需要在运行测试时记录屏幕,如果你有什么东西可以轻松重现相同的交互。

答案 4 :(得分:1)

由于您正在寻找商业用于屏幕捕获,我建议您查看整个套件的商业广告:我建议使用Microsoft的Test Manager 2010(请参阅此处的功能:http://msdn.microsoft.com/en-us/library/bb385901.aspx)。它需要视频和记录并回放输入,这是我可以告诉您正在处理的大部分内容,但它也可以直接连接到.NET应用程序以进行intellitrace调试,与Team Foundation Server的错误报告系统集成等。如果您愿意牺牲intellitrace功能,可以将它与WPF,XNA,ASP.Net或其他语言一起使用。它甚至可以自动播放输入并验证输出到您的规范,以进行持续集成测试。

答案 5 :(得分:1)

你说困难的部分是:

  

2)在做的时候回放输入   连续的屏幕截图。

您可以考虑使用自动化和脚本编写工具,例如AutoIt或AutoHotKey。这些工具中的每一个都可以让您记录与Windows应用程序的交互。您可以记录基本方案,然后在编辑器中调整详细信息和时间。 AutoIt的一个很好的功能是能够将宏“编译”为独立的可执行文件。

据我所知,这些工具都不会捕获视频。为此,你可能会想到像Fraps这样的东西,这是一个受视频游戏玩家欢迎的视频屏幕。您应该能够使用上述任一脚本工具来启动和停止Fraps。

祝你的项目好运。

答案 6 :(得分:0)

Windows API?也许System.Drawing?

http://www.codeproject.com/KB/dialog/screencap.aspx