TestNG使用提供的数据多次运行所有类方法,初步执行@BeforeClass



我正在使用TestNG和Selenium WebDriver为Web应用程序编写一个测试套件。

我需要的是为不同的已验证用户多次运行测试类的所有方法(数据是在运行时从数据库中提取的)。因此,我需要将数据传递给具有数据提供程序的类,该类提供所有用户的凭据,然后对于每个用户,我需要创建一个web驱动程序(为了实验的纯粹性),并使用@BeforeClass方法中提供的凭据进行身份验证,运行该类的所有@Test方法,并制作一个@AfterClass拆卸关闭web驱动程序。

我该怎么做?

我的尝试如下:https://gist.github.com/4246674

尝试1是在类上放置@Test(dataProvider="getUsersIdAndName")。它不起作用,因为事实证明,类上的@Test(dataProvider=)并不意味着该类的所有方法都应该用提供的数据调用。结果是根本没有调用该方法,因为没有数据可以传递给它的参数。我得到了一份奇怪的测试报告,其中这个方法被标记为通过,执行时间为0秒。(如果这有意义的话,这是一个在NetBeans中打开的Maven项目。)

课堂上的@Test(dataProvider=)有什么意义吗?

尝试2是在方法的@Test注释上添加dataProvider。它不起作用,因为这意味着测试方法在单个类运行期间被调用两次。结果是,第二次它失败了,因为它试图在web驱动程序没有重新初始化的情况下重复测试:浏览器已经呈现了另一个页面。

此外,第一次和第二次尝试登录本身是在测试方法中完成的,而不是在@BeforeClass方法中,这也有缺点,因为我不知道如何向它提供来自数据提供商的数据。

Attempt3是在单一方法上结合@BeforeClass@Test的绝望尝试。它不起作用,因为如果带注释的方法有参数列表,@BeforeClass也需要@Parameters。结果是,该方法被调用了三次:第一次是由于上述原因而失败时作为类设置调用,第二次是成功时由于数据提供程序调用。

然后我发现,TestNG并没有提供一种用不同数据多次调用所有类方法的方法:http://comments.gmane.org/gmane.comp.java.testng.user/864

关于如何归档相同的效果,我还有另外两个想法。

Idea4是在每个测试方法上放置一个@Test(dataProvider=),每个方法将自己执行身份验证和isAuthenticated()测试,然后执行自己的测试。无效且丑陋。

看起来最实惠的Idea5是用@Test标记只有一个方法可以聚合所有其他测试方法:它从数据提供商接收数据,由给定用户执行身份验证,然后运行isAuthenticated测试和所有其他必要的测试。在这种情况下,CCD_ 16和CCD_。这种方法的缺点是我失去了使用@BeforeMethod@AfterMethod的能力,但这对我来说是负担得起的:看起来我不需要它们。

有没有更好的方法来归档同样的效果?

抱歉发了很长的信息。

提前谢谢。

您可以尝试探索Factory以满足您的需求。Factory将允许您运行带有不同数据的类的@Test注释的所有方法。在这种情况下,您可以在beforecast中初始化您的网络驱动程序。此处解释。

好的,让我根据我在testNG和webdriver方面的经验来回答您的问题。

Q。类上的@Test(dataProvider=)是否有任何意义
A。不是。dataProvider是一个方法级注释,而不是类级注释。如前所述。它应该是一个以Object[][]格式为Test方法提供数据的方法。

Q。如何实现您提到的场景?(假设我理解你的场景..)
A.你应该使用@BeforeMethod而不是@BeforeClass来实例化webdriver对象。通过这种方式,您可以为每个方法创建不同的WD对象。dataProvider可以将多个数据传递给isAuthenticated()方法。如果你想在类级别传递配置文件,你可以保留@BeforeClass,其中只有属性文件加载逻辑。这样,整个类的属性文件将加载一次。显然,您还应该使用@AfterMethod来关闭webdriver对象。

最新更新