【发布时间】:2017-05-23 18:32:06
【问题描述】:
我正在使用 C# 和 NUnit 并行运行 Selenium 测试。当前运行测试的方式是最多可以并行运行 4 个测试(可能多 1 或 2 个,具体取决于运行它的系统有多少核心),其余测试排队。一旦完成一项测试,排队的测试就会运行。目前,不是在每个单独的测试后打开一个新的浏览器并关闭该浏览器,排队的测试会占用一个打开的浏览器。问题是当我在测试后处理驱动程序时,它会关闭浏览器,因此每个后续排队的测试都会失败。
每个测试都在自己的类中,每个测试类都继承自SetupTeardown 类。
我的问题是:有没有办法可以修改DriverFactory 类或继承的SetupTeardown 类,这样那些排队的测试就不会重用最初的四个测试浏览器实例?我真的希望每个测试在Setup 上打开自己的浏览器并在Teardown 上关闭。
这是我的驱动类:
public class DriverFactory
{
private DriverFactory()
{
//Do nothing
}
private static DriverFactory instance = new DriverFactory();
public static DriverFactory getInstance()
{
return instance;
}
ThreadLocal<IWebDriver> driver = BuildThreadLocal();
private static ThreadLocal<IWebDriver> BuildThreadLocal()
{
return new ThreadLocal<IWebDriver>(() =>
{
return new ChromeDriver(PathToChromeDriver);
});
}
public IWebDriver getDriver()
{
return driver.Value;
}
public void removeDriver()
{
driver.Value.Dispose();
}
}
这是我的 SetupTeardown 类,每个测试类都继承自:
[TestFixture]
public class SetupTeardown
{
public string testname;
public IWebDriver driver;
[OneTimeSetUp]
public static void AssemblyInitialize()
{
//Code to initialize test reporting
}
[SetUp]
public void Setup()
{
driver = DriverFactory.getInstance().getDriver();
driver.Navigate().GoToUrl(url);
}
[TearDown]
public void TearDown()
{
var status = TestContext.CurrentContext.Result.Outcome.Status;
if (status == TestStatus.Failed)
{
//Code to add failure status to reporting
}
else
{
//Code to add pass status to reporting
}
}
[OneTimeTearDown]
public static void AssemblyCleanup()
{
//Code that aggregates test data run and places it in a report
}
这是我的测试类的设置方式:
class TestClass1
{
[Parallelizable]
public class _TestClass1 : SetupTeardown
{
[Test]
public void
{
//Test code
}
}
}
【问题讨论】:
标签: c# multithreading selenium nunit