NUnit Order Attribute不适用于Parallizable

问题描述 投票:0回答:1

在使用订单属性时如何利用Parallelizable测试?

Nunit v3.9.0 我意识到与此主题相关的其他帖子的数量......但是当使用ParallelScope.Self时,没有任何排序似乎有效。

我需要订购测试执行的原因。我在远程EC2上运行Selenium测试,ChromeDriver有一个挂起的错误。 [Bug] [Bug] [Bug] [Bug]

我需要运行一些初始测试,这些测试可以无声地失败,以确保ChromeDriver正确运行...然后我需要其余的测试并行运行。自己利用速度。 我的“启动测试”非常基础。我在他们自己的[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();
    }
}

* driver.WaitForPageLoad()是一个扩展名。 输出:enter image description here

但是......灯具在Parallelizable组件下以完全随机的顺序运行,它忽略了order属性。

我读了这么多帖子。但我似乎无法让我的测试正确订购。 我试过了:

  • [测试,订单(1)] as per the documentation
  • [类别(“yada”)] qazxsw poi
  • [TestCase(TestName =“001”)]
  • [TestFixture] [Order(1)]在v3.8中添加
  • 按字母顺序排列测试名称和夹具名称

提前致谢!

编辑: 这是一个已知的问题: ref 任何解决方法? 编辑2:不是问题。阅读查理的评论如下。

nunit selenium-chromedriver
1个回答
2
投票

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

当然,夹具上的属性对夹具内的测试用例的运行没有影响。

订单功能仅在不涉及并行性时才提供测试的完整排序。使用单个执行线程,首先启动的测试必须在下一个启动之前完成。但是对于多个执行线程,这已不再适用。

假设您在同一级别有三个测试,订单值为1,2和3.如果有三个或更多执行线程,则所有三个可以开始:1,2,3!它们并行运行。

IOW,NUnit提供的简单排序不是依赖。也就是说,无法保证订单1的测试将在下一次测试运行之前完成。如果您需要,它是一个请求的功能,但尚未实现。

OTOH,它看起来不像你真的想要测试订购。你想要做的事情在我看来就像是一次性设置方法的工作而不是测试。事实上,设置,测试和拆解之间的依赖关系是目前NUnit中唯一存在的依赖关系,因此您应该尝试按照安装模型的方式制定依赖关系要求。

在你的情况下,我相信你想要一个OrderAttribute或几个。如果需要它的测试都在一个命名空间中,那么可以将fixture放置在所有命名空间之外,以便在程序集中的任何其他位置或特定命名空间中运行。它可能看起来像这样:

SetUpFixture

我留下了你的所有代码,虽然我不确定我理解你为什么要关闭并处理驱动程序。你的测试不需要它吗?处置可以转移到[SetUpFixture] public class Initiate { [OneTimeSetUp] public void Initiate_ChromeDriver_2() { IWebDriver driver = new ChromeDriver(); driver.Navigate().GoToUrl(<url>); driver.WaitForPageLoad(); driver.Quit(); driver.Dispose(); } } 方法。

© www.soinside.com 2019 - 2024. All rights reserved.