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