编写TestNG的最佳方法测试一个测试取决于另一个测试的输出

时间:2011-12-22 20:43:58

标签: testing testng

我有一个 TestA ,它执行对多个Web服务的调用(由@DataProvider提供)并验证每个Web服务的状态。

TestB 然后验证 TestA 成功运行所产生的输出的其他属性。

要使用 TestNG 运行这些测试,我尝试了两种方法:

  1. 使用@Factory生成从TestA输出创建的测试类,但工厂似乎在任何测试之前创建,例如 TestA 正在运行
  2. 要将TestA的输出存储在输出集合中,让TestA以更高的优先级运行TestB,然后让TestB使用DataProvider从输出集合中检索其结果。这有效,与this type of approach类似,只是它使用优先级而不是DependsOn,如果任何运行的TestA失败,它将跳过TestB。
  3. 问题

    如果 1 以上,是否可以根据测试的输出动态生成并运行新的测试类(如Factory所做的那样)?

    如果没有,上面的情况 2 ,推荐的TestNG方式,还是有更好的方法呢?

    更新 我还在TestNG users group上问过这个问题,因为Cedric建议

2 个答案:

答案 0 :(得分:2)

你所要求的内容实际上不可能如上所述:TestNG需要在初始化时知道​​所有测试类,以便它可以正确计算排序,即使你用工厂创建这些类。

但是,有很多方法可以通过不运行不依赖于第一次测试输出的测试来实现您想要的目标。

例如,testA可以生成一个空集合,以便testB将接收零数据来运行。

如果您需要更多帮助,请发布一些特定代码(并随时给testng用户发送电子邮件以继续讨论)。

答案 1 :(得分:0)

测试应该使用自己的夹具相互独立,以便易于维护,自包含和理由。如果您的场景包含两个Web服务调用(流程测试),其中第一次调用的响应充当第二次调用的输入,然后确保在setUp()方法中进行第一次调用,以便第二次调用的fixture是显式的。