我使用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
}
}
}
答案 0 :(得分:0)
我也使用TextFixture并使用OneTimeSetUp - 和OneTimeTearDown - 属性。
在OneTimeSetUp中,我打开浏览器并在OneTimeTearDown中关闭它。