你好我的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自动化。