NUnit Order属性不适用于Parallizable

NUnit Order属性不适用于Parallizable,nunit,selenium-chromedriver,Nunit,Selenium Chromedriver,在使用Order属性时,如何利用可并行化测试 Nunit v3.9.0 我意识到与这个主题相关的其他帖子的数量。。。但当使用ParallelScope.Self时,似乎并没有排序功能 我需要命令测试执行的原因。我正在远程EC2上运行Selenium测试,ChromeDriver有一个挂起的bug。 [] [] [] [] 我需要运行一些初始测试,以确保ChromeDriver正常运行,这些测试可能会无声地失败。。。然后我需要其余的测试并行运行。self以利用速度。 我的“入会测试”非常基本。我

在使用Order属性时,如何利用可并行化测试

Nunit v3.9.0

我意识到与这个主题相关的其他帖子的数量。。。但当使用ParallelScope.Self时,似乎并没有排序功能

我需要命令测试执行的原因。我正在远程EC2上运行Selenium测试,ChromeDriver有一个挂起的bug。 [] [] [] []

我需要运行一些初始测试,以确保ChromeDriver正常运行,这些测试可能会无声地失败。。。然后我需要其余的测试并行运行。self以利用速度。

我的“入会测试”非常基本。我在它们自己的[TestFixture]中运行了其中三个

[TestFixture]
[Order(1)]
public class Initiate
{
    [TestCase(TestName = "001")]
    public void Initiate_ChromeDriver_2()
    {
        try
        {
            IWebDriver driver = new ChromeDriver();
            driver.Navigate().GoToUrl(<url>);
            driver.WaitForPageLoad();
            driver.Quit();
            driver.Dispose();
        }
        catch (Exception ex)
        {
            Assert.Inconclusive(ex.Message);
        }
        Assert.Pass();
    }
}
[TestFixture]
[命令(1)]
公开课发起人
{
[TestCase(TestName=“001”)]
公共空间启动\u铬驱动程序\u 2()
{
尝试
{
IWebDriver=新的ChromeDriver();
driver.Navigate().gotour();
driver.WaitForPageLoad();
driver.Quit();
driver.Dispose();
}
捕获(例外情况除外)
{
断言。非结论性(例如消息);
}
Assert.Pass();
}
}
*WaitForPageLoad()是一个扩展。

输出:

但是。。。夹具在可并行化部件下以完全随机的顺序运行,该部件将忽略“顺序”属性

我读过很多帖子。但我似乎无法正确安排测试。
我试过:

  • [测试、命令(1)]
  • [分类(“雅达”)]
  • [TestCase(TestName=“001”)]
  • 在v3.8中添加了[TestFixture][Order(1)]
  • 按字母顺序排列测试名称和夹具名称

提前谢谢

编辑: 这是一个已知的问题:
有什么解决办法吗?


编辑2:不是问题。请阅读下面Charlie的评论。

OrderAttribute控制测试相对于同一级别的其他测试的启动顺序。在您的示例中,fixture将在同一名称空间中的任何其他fixture之前开始运行

当然,fixture上的属性对fixture中测试用例的运行方式没有影响

只有在不涉及并行性的情况下,Order特性才提供测试的完整顺序。对于单线程执行,首先开始的测试必须在下一个测试开始之前完成。但对于多线程执行,这不再是事实

假设您有三个相同级别的测试,顺序值为1、2和3。如果有三个或三个以上的执行线程,所有三个线程都可以启动:1、2、3!它们并行运行

照此看来,NUnit提供的简单排序不是依赖项。也就是说,不能保证顺序为1的测试将在下一次测试运行之前完成。如果您需要,这是一个需要的特性,但尚未实现

OTOH,看起来你并不是真的想要测试顺序。在我看来,您正在尝试的是一次性设置方法,而不是测试。事实上,设置、测试和拆卸之间的依赖关系目前是NUnit中唯一存在的依赖关系,因此您应该尝试按照设置模型来制定依赖关系要求

在您的情况下,我相信您需要一个
设置夹具
,或者几个。如果需要该装置的测试都在一个命名空间中,则可以将该装置放置在所有命名空间之外,以便为您提供在程序集中或特定命名空间中的任何其他内容之前运行的内容。它可能看起来像这样:

[SetUpFixture]
public class Initiate
{
  [OneTimeSetUp]
  public void Initiate_ChromeDriver_2()
  {
        IWebDriver driver = new ChromeDriver();
        driver.Navigate().GoToUrl(<url>);
        driver.WaitForPageLoad();
        driver.Quit();
        driver.Dispose();
  }
}
[SetUpFixture]
公开课发起人
{
[一次性设置]
公共空间启动\u铬驱动程序\u 2()
{
IWebDriver=新的ChromeDriver();
driver.Navigate().gotour();
driver.WaitForPageLoad();
driver.Quit();
driver.Dispose();
}
}

我留下了你所有的代码,尽管我不确定我是否理解你为什么要关闭并处理驱动程序。你的测试不需要它吗?处置可以移动到
onetimeeardown
方法。

与同一级别的其他测试相比,
OrderAttribute
控制启动测试的顺序。在您的示例中,fixture将在同一名称空间中的任何其他fixture之前开始运行

当然,fixture上的属性对fixture中测试用例的运行方式没有影响

只有在不涉及并行性的情况下,Order特性才提供测试的完整顺序。对于单线程执行,首先开始的测试必须在下一个测试开始之前完成。但对于多线程执行,这不再是事实

假设您有三个相同级别的测试,顺序值为1、2和3。如果有三个或三个以上的执行线程,所有三个线程都可以启动:1、2、3!它们并行运行

照此看来,NUnit提供的简单排序不是依赖项。也就是说,不能保证顺序为1的测试将在下一次测试运行之前完成。如果您需要,这是一个需要的特性,但尚未实现

OTOH,看起来你并不是真的想要测试顺序。在我看来,您正在尝试的是一次性设置方法,而不是测试。事实上,设置、测试和拆卸之间的依赖关系目前是NUnit中唯一存在的依赖关系,因此您应该尝试按照设置模型来制定依赖关系要求

在您的情况下,我相信您需要一个
设置夹具
,或者几个。如果需要该装置的测试都在一个命名空间中,则可以将该装置放置在所有命名空间之外,以便为您提供在程序集中或特定命名空间中的任何其他内容之前运行的内容。它可能看起来像这样:

[SetUpFixture]
public class Initiate
{
  [OneTimeSetUp]
  public void Initiate_ChromeDriver_2()
  {
        IWebDriver driver = new ChromeDriver();
        driver.Navigate().GoToUrl(<url>);
        driver.WaitForPageLoad();
        driver.Quit();
        driver.Dispose();
  }
}
[设置]