You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单个浏览器实例中运行NUnit C#的多个测试用例?

解决NUnit测试共用同一浏览器实例的方案

你的核心问题是当前[SetUp]会在每个测试方法前执行,导致每次测试都重新初始化驱动和页面对象,进而重启浏览器。结合你已经设置的[FixtureLifeCycle(LifeCycle.SingleInstance)],可以通过以下方式实现所有测试共用同一个浏览器实例:

关键修改点

  • 将浏览器驱动的初始化移到[OneTimeSetUp]中,该方法仅在整个测试Fixture启动时执行一次
  • 用[OneTimeTearDown]在所有测试完成后统一关闭浏览器驱动
  • 调整[SetUp]的职责,仅在每次测试前重置必要的页面状态(如果需要)

修改后的代码示例

[FixtureLifeCycle(LifeCycle.SingleInstance)]
[TestFixture]
public class YourTestClass : BaseTestClass
{
    private IWebDriver _driver;
    private YourPageObject _pageObject;

    // 仅在Fixture启动时执行一次,初始化浏览器驱动和页面对象
    [OneTimeSetUp] 
    public void OneTimeSetUp() 
    {
        _driver = GetDriver(); // 这里初始化你的浏览器驱动(如ChromeDriver)
        _pageObject = new YourPageObject(_driver);    
    }

    // 可选:每次测试前重置页面状态(比如回到首页),而非重建驱动
    [SetUp]
    public void TestSetUp()
    {
        _driver.Navigate().GoToUrl("https://your-test-url.com");
    }

    [Test, Order(1)]
    public void Test1()
    {
        // 测试逻辑,使用_pageObject操作同一浏览器实例
    }

    [Test, Order(2)]
    public void Test2()
    {
        // 直接在Test1的浏览器实例上继续执行
    }

    [Test, Order(3)]
    public void Test3()
    {
        // 后续测试逻辑
    }

    [Test, Order(4)]
    public void Test4()
    {
        // 后续测试逻辑
    }

    // 所有测试完成后,仅关闭一次浏览器驱动
    [OneTimeTearDown]
    public void OneTimeTearDown()
    {
        _driver?.Quit();
        _driver?.Dispose();
    }
}

注意事项

  • 确保GetDriver()方法返回的是同一个驱动实例(不要在该方法内每次都新建驱动)
  • 因为所有测试共用一个浏览器实例,要注意测试之间的状态隔离,避免前一个测试的操作影响后一个测试(比如在[SetUp]中重置页面、清除缓存等)
  • [FixtureLifeCycle(LifeCycle.SingleInstance)]保证整个测试类只实例化一次,配合[OneTimeSetUp]就能实现驱动的单实例复用

内容的提问来源于stack exchange,提问作者AshFowler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 02:01:05