如何在单个浏览器实例中运行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
相关产品推荐
相关产品推荐

