SeleniumWebdriver + TestNG:并行执行多个类的testNg执行中的错误行为

时间:2018-09-01 13:00:28

标签: maven selenium-webdriver testng

设置和说明:

  1. 共有2个测试类:1. HomepageTest&SignIntest

  2. 这些测试类下的方法具有组和优先级 **目标是使用组运行这些测试 Scebario1:当我使用Threadcount = 1时;

以下是行为:

1.1。执行时,它会启动首页>执行Hometest的优先级1>然后启动

  

然后执行SignIntest的priority1

     
    

此后,它将执行HomepageTest的priority2和SigninTest的priority2,依此类推。

  

1.2。执行完成后,它将关闭1个浏览器(主页),但无法关闭另一个浏览器(SigninPage)

方案2:当我使用threadcount = 2时:

行为: 2.1。它会同时打开2个浏览器。在一个浏览器中,它会启动URL(等待10秒),而在另一浏览器中,它不会启动任何URL(在整个测试过程中保持空白)

2.2:执行与上述1.1相同 执行少量测试后,另一个第三浏览器启动。.执行后,该第三浏览器关闭

完成但剩余2个浏览器(BlankBrowser和带有URL的Brwser)保持打开状态

2.3执行完成后,它将关闭1个浏览器,但无法关闭没有启动URL的浏览器

问题1:为什么执行不是基于组的。它在1.1中提到的优先级基础上运行,看起来不正确。

理想情况下,它应该执行testClass1的Group1&2 然后应该关闭该浏览器,然后启动第二个浏览器并运行Group1&2测试,然后关闭该浏览器

问题2:为什么无法关闭1浏览器。我使用窗口句柄对活动窗口进行计数,计数返回1,而应为2

问题3:当线程计数= 2时,为什么它启动空白浏览器(如2.1中所述)

1 个答案:

答案 0 :(得分:0)

我认为您在混合使用组和优先级,并且尝试使用错误的工具来实现目标。而且您还有一些可能在一个线程环境中工作的额外代码,但由于并行环境本质上是异步的,因此无法在并行环境中工作。

答案1:

  • 组:仅提供测试方法的分组(按功能,相似性或功能)。
  • 优先级:只是优先级,它是一种排序方式。 TestNG会看到优先级并自动对测试进行排序,因为您有2个具有最高优先级的测试,它将首先运行它们。
  • 分组用于管理多个测试用例的执行,但是按分组,假设您只需要运行功能A测试,它们都属于组A,因此您可以运行组A。
  • 在组级别上没有实现排序,因为这没有意义。分组是分组,而不是排序。 (例如:您看到一群狗,并且看到它是一群狗,而不是狗A,狗B,狗C等某种命令)
  • 注意:如果同一类中的测试之间存在某种依赖关系,则并行运行TestNG将并行运行组,因为它们的依赖关系导致无法并行运行测试。

答案2:

  • 如果浏览器保持打开状态,那是因为您的代码没有关闭它。也许您应该检查打开一个新实例的次数以及关闭它的次数。
  • 在您的第一种情况下,我怀疑您正在打开多个浏览器实例,但您使用的是同一WebDriver来管理它,而不是关闭创建的第二个实例。
  • WebDriver不仅会自动弹出一个新的浏览器实例。您需要创建一个实例才能使用它。同样,WebDriver不仅会自行关闭浏览器实例,还需要使用代码将其关闭。

答案3:

  • 寻找答案2。

以供将来参考:TestNG或SeleniumWebDriver不会出现这种不稳定的行为,也不会两者结合在一起。这是所有质量检查工程师使用的最常见的测试工具组合。我的公司有线程数= 16的并行测试,并且它们都能正常工作。

请记住,测试代码应针对并行性进行优化,您不能只运行针对同步环境设计的常规旧测试。