ozyrys1994
ozyrys1994

Reputation: 21

Slow execution of tests using Teststack.White + Nunit3-console

Hello i have small problem with nunit and teststack white.

Here i have small test (Window is localized with option WithCache):

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

Now i run this test from VS, and debugging each step. I can notice, that Get takes around 50ms, Get 30ms. Next i run the same test using nunit3-console.exe and now, after attaching to process i can notice around 3 time longer execution of each step. Its not problem with attaching, becouse i checked it in longer test and always steps takes longer.

Another long process is getting new window. My application show new windows, which covers actual one, so i need to get new window when new one appears. Command Application.GetWindows().Last() takes around 200-300ms from VS, but from nunit console in worst case can take about 3 seconds.

Maybe someone of you have similar problem and have any solution for me.

HERE I HAVE EXAMPLE: You need to download app from here: https://www.codeproject.com/Articles/607868/Social-Club-Sample-application-using-WinForms-Csha

Build it, run application, login into it with credentials: login: demo password: demo123

Then create new unit test prkject, add nuget pacakges for nunit and teststack.white. Here is code for this test:

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

I hit breakpoint on line where i assign value to Window, and now i check time of getting window with name "Social Club - Membership Manager":

a) when i debug test from visual studio - its around 450ms for first assign, when i move cursor back to this line and assign again its faster and takes about 250ms

b) when i run from nunit3-console with command :

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

and attach to proces nunit-agent.exe program stops on breakpoint and now assign of Window take around 1second, second assign takes around 700ms which is still longer than running same test from visual studio adapter. I must notice that its not problem with attaching to proces, becouse without attaching i can see as well, that this test takes longer than from visual studio.

Really interesting thing is that i reproduce this issue only on winforms applications. When i automatize app like notepad which is base on Win32 framework times are normal or even faster. Same thing on web application, and automatizing with selenium webdriver.

Upvotes: 0

Views: 556

Answers (0)

Related Questions