使用Teststack.White + Nunit3-console缓慢执行测试

时间:2018-03-22 14:42:08

标签: c# automated-tests nunit white nunit-console

你好我的nunit和teststack白色有小问题。

这里我有一个小测试(Window已使用选项WithCache本地化):

[Test] public void ShouldLogIn()
{
    var loginPanel = Window.Get<Panel>("txbLogin");
    var loginTextBox = loginPanel.Get<TextBox>("mobTextBox1");
    loginTextBox.BulkText = "user1";        
}

现在我从VS运行此测试,并调试每一步。我注意到,Get需要大约50ms,获得30ms。接下来我使用nunit3-console.exe运行相同的测试,现在,在附加到进程后,我可以注意到每个步骤执行大约3次。这不是附加的问题,因为我在更长的测试中检查它并且总是步骤需要更长时间。

另一个漫长的过程正在变得新的窗口。我的应用程序显示了新窗口,其中包含实际窗口,所以当出现新窗口时我需要获得新窗口。命令Application.GetWindows()。Last()从VS大约需要200-300ms,但在最坏的情况下从nunit控制台大约需要3秒。

也许有人有类似的问题,并为我提供任何解决方案。

这里我有一个例子: 您需要从此处下载应用程序: https://www.codeproject.com/Articles/607868/Social-Club-Sample-application-using-WinForms-Csha

构建它,运行应用程序,使用凭据登录到它: 登录:演示 密码:demo123

然后创建新的单元测试prkject,为nunit和teststack.white添加nuget pacakges。以下是此测试的代码:

using System.Diagnostics;
using System.Linq;
using System.Threading;
using Castle.Core.Logging;
using NUnit.Framework;
using TestStack.White;
using TestStack.White.Configuration;
using TestStack.White.Factory;
using TestStack.White.UIItems;
using TestStack.White.UIItems.Finders;
using TestStack.White.UIItems.WindowItems;

namespace StackTestProject
{
    [TestFixture]
    public class Notepadtests
    {
        private Application Application;
        private Window Window;

        [OneTimeSetUp]
        public void OneTimeInitialize()
        {
            CoreAppXmlConfiguration.Instance.FindWindowTimeout = 30000;
            CoreAppXmlConfiguration.Instance.LoggerFactory = new WhiteDefaultLoggerFactory(LoggerLevel.Debug);
        }

        [SetUp]
        public void TestInitialize()
        {
            Thread.Sleep(5000);
            ProcessStartInfo psi = new ProcessStartInfo("John.SocialClub.Desktop.exe");
            psi.WorkingDirectory = @"C:\Users\[USER NAME]\Downloads\John.SocialClub\John.SocialClub\John.SocialClub.Desktop\bin\Debug";
            Application = TestStack.White.Application.AttachOrLaunch(psi);
            //before this u need to have opened and logged in aplication with login:demo and password: demo123
            Window = Application.GetWindow("Social Club - Membership Manager", InitializeOption.WithCache); //250ms
        }

        [Test]
        public void NotepadTest()
        {
            var toolbar = Window.Get<Panel>(SearchCriteria.ByClassName("tabRegistration")); //33ms

        }

        [TearDown]
        public void TestCleanup()
        {
            Application.Kill();
        }
    }
}

我在线上点击断点,我为Window赋值,现在我查看获取名称为“社交俱乐部 - 会员经理”的窗口的时间:

a)当我从visual studio调试测试时 - 第一次分配大约450ms,当我将光标移回此行并再次分配它更快并需要大约250ms

b)当我使用命令从nunit3-console运行时:

nunit3-console.exe C:\Users\kamil.chodola\source\repos\StackTestProject\StackTestProject\bin\Debug\StacktestProject.dll

并附加到进程nunit-agent.exe程序在断点处停止,现在分配Window占用大约1秒,第二次分配大约需要700ms,这比从visual studio适配器运行相同的测试还要长。 我必须注意到它附加到过程没有问题,因为没有附加我也可以看到,这个测试需要比视觉工作室更长的时间。

真有趣的是,我只在winforms应用程序上重现此问题。当我自动化像记事本这样的应用程序,这是基于Win32框架时间正常甚至更快。 Web应用程序也是如此,并使用selenium webdriver自动化。

0 个答案:

没有答案