Automation 是否有一种方法可以让测试用例源从外部源(如excel)读取数据?

Automation 是否有一种方法可以让测试用例源从外部源(如excel)读取数据?,automation,automated-tests,nunit,testcasesource,Automation,Automated Tests,Nunit,Testcasesource,我正在用Nunit写新的测试。我希望测试从excel表(数据驱动测试)中获取其TestCaseSource值 但是,我注意到在输入[Test]方法之后实际上会访问[SetUp]方法,因此我无法初始化从TestCaseSource中的excel工作表中读取的数据 在运行每个测试之前,如何从excel文件初始化TestCaseSource 谢谢 我尝试过使用像MyFactoryClass这样的单独类,然后使用 [Test, TestCaseSource(typeof(MyFactoryClass),

我正在用Nunit写新的测试。我希望测试从excel表(数据驱动测试)中获取其TestCaseSource值

但是,我注意到在输入[Test]方法之后实际上会访问[SetUp]方法,因此我无法初始化从TestCaseSource中的excel工作表中读取的数据

在运行每个测试之前,如何从excel文件初始化TestCaseSource

谢谢

我尝试过使用像MyFactoryClass这样的单独类,然后使用

[Test, TestCaseSource(typeof(MyFactoryClass), "TestCases")]

但是,这是在使用
[Setup]
方法之前达到的,并且无法识别以每个测试的名称命名的excel文件的名称。

使用NUnit时,了解测试在加载和运行时所经历的阶段非常重要。因为我不知道你们在每个阶段都在做什么,我将从概述这些阶段开始。在您发布一些代码之后,我将添加到这个答案中,这些代码显示了您的工厂类、您的
[SetUp]
方法和您的实际测试正在做什么

简言之,NUnit在运行它们之前加载测试。实际上,它可能会为每个负载运行多个分层测试-这取决于所使用的转轮类型。示例:

  • NUnit控制台加载测试一次并运行测试一次,然后退出

  • TestCentric GUI加载测试一次,然后在每次选择测试并单击“运行”时运行测试。它还可以使用菜单选项重新加载它们

  • TestExplorer使用NUnit 3测试适配器加载测试,然后每次单击运行时运行测试

  • 理想情况下,您应该编写测试,以便它们能够在任何运行程序下工作。要做到这一点,您应该假设它们将针对每个负载运行多次。不要在加载时编写代码,您希望在每次运行时看到重复的代码。如果您遵循这条规则,您将有更健壮的测试

    所以。。。NUnit在每个阶段都做什么?这是

    加载

    • 执行
      [TestCaseSource]
      中的所有代码
    运行

    • 对于每个
      TestFixture
      (为了简单起见,我将忽略
      setupfixture

      • 运行任何
        [OneTimeSetUp]
        方法

      • 对于每个
        测试
        测试用例

        • 运行任何
          [SetUp]
          方法
        • 运行测试本身
        • 运行任何
          [TearDown]
          方法
      • 运行任何
        [onetimeeardown]
        方法

    正如您所注意到的,为任何步骤编写的代码只能依赖于已经执行的步骤。特别是,加载测试时所采取的行动不能依赖于运行测试时所采取的行动。如果你认为“加载”真的意味着创建要运行的测试,这是有意义的。 在
    [TestCaseSource]
    中,如果您事先知道要创建哪些对象,则只应调用创建对象的工厂。通常,最好的方法是初始化将用于创建对象的参数。然后,根据目标对象的生存期,这些对象将用于在
    [OneTimeSetUp]
    [SetUp]
    中实际创建对象


    这已经足够(可能太多)概括了!如果你发布一些代码,我会给这个答案添加更具体的建议。

    我实际上没有太多代码。我试图弄清楚如何进行数据驱动测试,并找出是否可以从excel表格中读取我的测试参数。我想我可以从外部源读取参数,然后以某种方式将参数传递给[TestCaseSource]