在Nunit C#中,我试图只打开应用程序一次并对其进行修改,例如,我创建了此记事本应用程序的演示。在我的实时项目中,我只需要登录一次该应用程序并执行所有100个测试用例,然后关闭桌面应用程序。请告诉我我在这里做错了,非常感谢!顺便说一句,我是C#的新手
using NUnit.Framework;
using OpenQA.Selenium.Remote;
using System;
using OpenQA.Selenium;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace Notepad
{ }
[SetUpFixture]
public class BaseClass
{
public static IWebDriver driver;
[OneTimeSetUp]
public static void AssemblyInitalize()
{
var dc = new DesiredCapabilities();
dc.SetCapability("app", @"C:\\Windows\\System32\\notepad.exe");
driver = new RemoteWebDriver(new Uri("http://localhost:9999"), dc);
Thread.Sleep(5000);
}
[OneTimeTearDown]
public static void oneTearDown()
{
driver.FindElement(By.Id("Close")).Click();
}
}
---首次测试---
namespace Notepad
{ [TestFixture]
public class Notepad2:BaseClass
{
[Test]
public void test2()
{
driver.FindElement(By.Id("15")).SendKeys("My Teacher ");
}
}
}
----第二个测试类----
using NUnit.Framework;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenQA.Selenium;
namespace Notepad
{ [TestFixture]
public class NoteTest : BaseClass
{
[Test]
public void Test()
{
driver.FindElement(By.Id("15")).SendKeys("...is Coming now");
}
}
}
答案 0 :(得分:2)
从文档中,OneTimeSetup在TestFixture中的所有测试之前被调用一次。您的示例有两个固定装置,因此该设置称为两次。您需要将所有测试都放在同一夹具中。
此行为与SetupFixture属性上的旧[Setup]属性不同,该属性对命名空间中的所有测试都运行一次。
答案 1 :(得分:1)
关于SetUpFixture
,第一个答案不正确。
SetUpFixture
的工作原理与以前一样。如果您有SetUpFixture
,则OneTimeSetUp
和OneTimeTearDown
的方法将在同一命名空间下为所有灯具运行一次。
另一方面,在TestFixture
中,OneTimeSetUp
和OneTimeTearDown
方法仅对灯具本身运行一次 。
换句话说,这些方法在使用它们的特定范围,名称空间或固定装置中“一次性”运行。
问题是您正在使用与{strong> 和SetUpFixture
相同的类,并且是所有TestFixtures
的基类。这意味着如果您有n
个测试装置,它将运行n + 1
次!这就是您所看到的。
SetUpFixtures
与夹具继承没有任何关系(从未有过)。您应该将设置为SetUpFixture
或TestFixture
基类。如果出于某种原因同时需要两者,请使用两个类。在这种情况下,您只需要SetUpFixture
,而无需继承。
何时从基类继承:如果您希望同一代码执行多次,则对每个夹具一次。请注意,以这种方式用于一次设置和拆卸的基类通常不标记为TestFixture。
何时使用SetUpFixture:当您希望某个代码只执行一次时,则在运行所有灯具之前,然后在所有灯具运行之后再次执行。
在您的示例中,您正在使用SetUpFixture控制初始化的时间。您正在使用继承来共享驱动程序。问题在于,基类中的OneTimeSetUp实际上是每个测试装置的一部分,而您不希望这样做。
我会担心使用相同的驱动程序进行大约100次测试。我已经看到有些人每次 test 使用一个驱动程序,而另一些人每个 fixture_使用一个驱动程序。为__everything 使用一个选项意味着您要格外小心,每个测试在执行完之后都会自动清除,并将驱动程序还原到相同的状态。我怀疑这是否可能。
但是,作为练习,如果您确实想要以下方法,请执行以下操作: 1.有一个基类,除了驱动程序成员外什么都没有。 2.从基类派生SetUpFixture并在那里创建/销毁驱动程序。 3.从相同的基类派生TestFixture。他们使用但不更改驱动程序。