如何在使用订单属性时利用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()是一个扩展名。
输出:
但是......灯具在Parallelizable程序集下以完全随机的顺序运行,忽略了order属性。
我读了这么多帖子。但我似乎无法让我的测试正确订购。
我试过了:
提前致谢!
修改:
这是一个已知问题: #2521
任何解决方法?
编辑2:不是问题。阅读查理的评论如下。
答案 0 :(得分:2)
OrderAttribute
控制测试开始的顺序WRT在同一级别的其他测试。在您的示例中,fixture将在相同名称空间中的任何其他灯具之前开始运行。
当然,夹具上的属性对夹具中的测试用例的运行没有影响。
订单功能仅在不涉及并行性时才提供测试的完整排序。使用单个执行线程,首先启动的测试必须在下一个启动之前完成。但是对于多个执行线程,这已不再适用。
假设您在同一级别进行了三次测试,订单值为1,2和3.如果有三个或更多执行线程,则三个可以开始:1,2,3!它们并行运行。
IOW,NUnit提供的简单排序是不依赖。也就是说,无法保证在下一次测试运行之前,订单1的测试将完成。如果你想要它,它是一个请求的功能,但尚未实现。
OTOH,它看起来不像你真的想要测试订购。你想要做的事情在我看来就像是一次性设置方法的工作而不是测试。事实上,设置,测试和拆解之间的依赖关系目前是NUnit中存在的唯一依赖关系,因此您应该尝试按照设置模型的方式制定您的依赖关系要求。在你的情况下,我相信你想要一个SetUpFixture
或几个。如果需要它的测试都在一个命名空间中,那么可以将fixture放置在所有命名空间之外,以便在程序集中的任何其他位置或特定命名空间中运行。它可能看起来像这样:
[SetUpFixture]
public class Initiate
{
[OneTimeSetUp]
public void Initiate_ChromeDriver_2()
{
IWebDriver driver = new ChromeDriver();
driver.Navigate().GoToUrl(<url>);
driver.WaitForPageLoad();
driver.Quit();
driver.Dispose();
}
}
我留下了你的所有代码,虽然我不确定我理解你为什么要关闭并处理驱动程序。你的测试不需要它吗?处置可以转移到OneTimeTearDown
方法。