【问题标题】:Selenium NUnit Parallel Tests Reusing Browser InstancesSelenium NUnit 并行测试重用浏览器实例
【发布时间】: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


    【解决方案1】:

    我也使用 TextFixture 并使用 OneTimeSetUp- 和 OneTimeTearDown-Attributes。

    在 OneTimeSetUp 中,我打开浏览器并在 OneTimeTearDown 中关闭它。

    【讨论】:

      猜你喜欢
      • 2012-04-30
      • 1970-01-01
      • 2012-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-16
      相关资源
      最近更新 更多