TestNG:哪种方法更好?登录一次并运行所有测试 (@BeforeSuite) 或在每次测试之前登录 (@BeforeTest)

Zis*_*ska 5 testng selenium-webdriver

方法#1:每次测试前登录:

优点:

  1. 每个测试都是一个不同的会话,如果一个测试导致浏览器崩溃,则只有该测试失败,不会影响其他测试。
  2. 可以进行并行测试。

缺点:

  1. 如果登录失败(因为 AUT 已关闭或登录功能有错误),我们仍然在每次测试之前调用它。但这是一个小问题,因为这可以通过创建一个测试登录功能的测试来解决,并且如果失败则可以中止整个套件。

APRROACH#2:登录一次并运行所有测试:

优点:

  1. 您不必处理如此多的浏览器窗口,因为您只需要打开一个

缺点:

  1. 如果测试导致浏览器崩溃,我们可以在下一次测试开始之前恢复吗?
  2. 我们可以并行运行 1 个以上的测试吗?

尽管这两种方法各有利弊,但我仍然不确定哪种方法是最好的。在每次测试之前作为单独的会话登录真的很浪费资源吗?不涉及数据库连接。我发现 APPROACH#1 的唯一潜在问题是,由于每个测试都是 Java 进程,因此有可能因过多的并发 Java 进程而导致系统过载。

Sai*_*fur 3

答案是,你决定。

但是,这是我的观点:

@BeforeSuite风险太大且不现实,因为 UI 测试是测试世界中最脆弱的。登录过程失败的原因有数千种。特别是如果您从 CI 服务器或通过其他一些自动化过程自动运行这些测试,您的完整测试套件将不会执行。

我相信@BeforeTest太多余了,尽管有时您只需要刷新环境并返回到已知状态。除了那些场景我也不会这样做。

到目前为止,据我所知@BeforeClass是最好的方法。因为,每个测试类只运行一次,登录一次并执行所有测试。您可以与@BeforeTest结合使用,将环境重置为已知状态,以便其他测试知道从哪里开始