我正在使用 TestNG 和 Selenium WebDriver 为 webapp 编写测试套件。
我需要的是为不同的经过身份验证的用户多次运行测试类的所有方法(数据在运行时提取:从数据库中)。所以我需要将数据传递给具有数据提供程序的类,它提供所有用户的凭据,然后我需要为每个用户创建一个 Web 驱动程序(为了实验的纯度)并在@BeforeClass
方法中使用提供的凭据进行身份验证,运行所有@Test
类的方法,并@AfterClass
拆除关闭网络驱动程序。
我怎样才能做到这一点?
我的尝试在这里: https ://gist.github.com/4246674
Attempt1 是@Test(dataProvider="getUsersIdAndName")
在课堂上放置一个。它不起作用,因为事实证明@Test(dataProvider=)
,类并不意味着应该使用提供的数据调用类的所有方法。结果是根本没有调用该方法,因为没有数据可以传递给它的参数。我得到奇怪的测试报告,其中该方法被标记为通过,执行时间为 0 秒。(这是一个在 NetBeans 中打开的 Maven 项目,如果这有意义的话。)
@Test(dataProvider=)
上课有什么意义吗?
Attempt2 是@Test
在方法的注释上添加 dataProvider 。它不起作用,因为这意味着在单个类运行期间调用了两次测试方法。结果是第二次失败,因为它试图重复测试,而 Web 驱动程序没有重新初始化:浏览器已经呈现另一个页面。
第一次和第二次尝试也有缺点,即登录本身是在测试方法中完成的,而不是在@BeforeClass
方法中,因为我不知道如何从数据提供者那里提供数据。
Attempt3 是对单一方法的组合@BeforeClass
和绝望尝试。@Test
它不起作用,因为@BeforeClass
还要求@Parameters
带注释的方法是否具有参数列表。结果是这个方法被调用了 3 次:第一次是因为上述原因而失败时作为类设置,而在成功时因为数据提供者被调用了两次。
然后我发现 TestNG 没有提供一种方法来使用不同的数据多次调用所有类方法:http: //comments.gmane.org/gmane.comp.java.testng.user/864
关于如何归档相同的效果,我还有另外两个想法。
Idea4是@Test(dataProvider=)
在每个测试方法上放置一个,每个方法都会自己进行身份验证和isAuthenticated()
测试,然后进行自己的测试。无效且丑陋。
看起来最实惠的 Idea5 是使用@Test
一种方法进行标记,该方法将聚合所有其他测试方法:它从数据提供者接收数据,执行给定用户的身份验证,然后运行 isAuthenticated 测试和所有其他必要的测试。在这种情况下@BeforeClass
,@AfterClass
只是设置和拆除 web 驱动程序。这种方法的缺点是我失去了使用能力@BeforeMethod
,@AfterMethod
但这对我来说是负担得起的:看起来我不需要它们。
有没有更好的方法来存档相同的效果?
对不起,长消息。
提前致谢。