TestNG 教程:什么是注释和框架 Selenium
什么是 TestNG?
TestNG 是一个自动化测试框架,其中 NG 代表“下一代”。 TestNG 受启发 JUnit 使用注释(@)。 TestNG 克服了缺点 JUnit 旨在让 端到端测试 简单。
运用 TestNG,您可以生成适当的报告,并且可以轻松了解有多少测试用例通过、失败和跳过。您可以单独执行失败的测试用例。
例如:
- 假设您有五个测试用例,每个测试用例都编写了一个方法(假设该程序是使用主方法编写的,没有使用 testNG)。当您首先运行此程序时,三种方法执行成功,而第四种方法失败。然后纠正第四种方法中存在的错误,现在您只想运行第四种方法,因为前三种方法无论如何都执行成功。如果不使用,这是不可能的 TestNG.
- 这款 TestNG in Selenium 提供了一个选项,即 test-output 文件夹中的 testng-failed.xml 文件。如果您只想运行失败的测试用例,则意味着您运行此 XML 文件。它将仅执行失败的测试用例。
除了上述概念,你还将学到更多 TestNG,比如有什么优势 TestNG,如何使用@test注释创建测试方法,如何将这些类转换为测试套件文件并通过eclipse以及从命令行执行。
为何使用 TestNG - Selenium?
默认 Selenium 测试无法生成正确的测试结果格式。使用 TestNG in Selenium,我们就可以生成测试结果。
桥梁 Selenium 用户使用这个 朱尼特 因为它的优点。 TestNG但我们只关注最重要的部分,我们可以用在 Selenium. 以下是 Selenium TestNG:
- 以适当的格式生成报告,包括运行的测试用例数、通过的测试用例数、失败的测试用例数和跳过的测试用例数。
- 通过将多个测试用例转换为 testng.xml 文件,可以更轻松地对它们进行分组。在其中,您可以确定应首先执行哪个测试用例。
- 只需使用名为“调用计数”的关键字,即可多次执行相同的测试用例而无需循环。
- 使用testng,你可以在多个浏览器上执行多个测试用例,即跨 浏览器测试.
- 这款 TestNG 框架可以轻松地与以下工具集成 TestNG Maven、Jenkins 等
- 测试中使用的注释非常容易理解,例如:@BeforeMethod,@AfterMethod,@BeforeTest,@AfterTest
- WebDriver 没有生成报告的原生机制。 TestNG 可以生成如下所示的可读格式的报告。
- TestNG 简化了测试的编码方式。我们的测试中不再需要静态主方法。操作顺序由易于理解的注释来规范,这些注释不需要方法是静态的。
- 未捕获的异常将自动由 TestNG 无需提前终止测试。这些异常在报告中被报告为失败步骤。
的优点 TestNG 超过 JUnit
有三个主要优点 TestNG 超过 JUnit:
- 注释更容易理解
- 测试用例可以更容易地分组
- 可以进行并行测试
什么是注解 TestNG?
中的注释 TestNG 是可以控制如何执行其下方方法的代码行。它们总是以 @ 符号开头。一个非常早期和快速的 TestNG 示例如下所示。
稍后将在“注释使用”一节中讨论注释。 TestNG”所以如果你不明白以上内容也没关系 TestNG 这只是一个例子。现在需要注意的是, TestNG 比 JUnit.
并行运行测试的功能可在 TestNG 但不在 JUnit, 所以 TestNG 框架更受测试人员的青睐 Selenium 格。
如何编写测试用例 TestNG?
步骤1) 编写您的业务逻辑并插入 TestNG 代码中的注释。
步骤2) 添加更多信息,如类名、组名、包名等
步骤3) 运行 TestNG.
使用创建测试用例 TestNG 注释
现在,我们将学习如何使用 TestNG 中的注释 Selenium:
在创建测试用例之前,我们应该先设置一个新的 TestNG 项目 Eclipse 并将其命名为“FirstTestNG项目”。
设置一个新的 TestNG 项目
步骤1: 单击文件 > 新建 > Java 项目
步骤2: 键入“FirstTestNG项目”作为项目名称,然后单击下一步。
步骤3: 我们现在将开始导入 TestNG 将库添加到我们的项目中。单击“库”选项卡,然后单击“添加库…”
步骤4: 在添加库对话框中,选择“TestNG”,然后单击“下一步”。
步骤5: 单击完成。
你应该注意到 TestNG 包含在图书馆列表中。
步骤6: 我们现在将添加包含 Selenium API。这些文件位于 Java 我们从 https://www.selenium.dev/downloads/ 当我们安装时 Selenium 和 Eclipse 在前面的章节中。
然后,导航到您放置 Selenium JAR 文件。
添加外部 JAR 后,您的屏幕应该如下所示。
步骤7: 单击“完成”并验证我们的第一个TestNG项目可见于 Eclipse的包资源管理器窗口。
如何创建一个新的 TestNG 测试文件
现在我们已经完成了项目设置 TestNG 教程,让我们创建一个新的 TestNG 文件中。
步骤1: 单击“src”并选择其他。
右键单击“src”包文件夹,然后选择新建>其他…
步骤2: 选择 TestNG 类。
点击 TestNG 文件夹并选择“TestNG 类”选项。单击下一步。
步骤3: 输入值。
在相应的输入框中输入下面所示的值,然后单击“完成”。请注意,我们已将我们的 Java 归档为“第一TestNG文件”。
步骤4: 模板已创建。
Eclipse 应该自动为我们的 TestNG 文件如下所示。
我们的第一个编码 TestNG 测试用例示例
现在让我们创建我们的第一个 测试用例 这将检查 Mercury Tours 的主页是正确的。请按照以下所示输入您的代码 TestNG 示例:
package firsttestngpackage; import org.openqa.selenium.*; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.*; public class firsttestngfile { public String baseUrl = "http://demo.guru99.com/test/newtours/"; String driverPath = "C:\\geckodriver.exe"; public WebDriver driver ; @Test public void verifyHomepageTitle() { System.out.println("launching firefox browser"); System.setProperty("webdriver.gecko.driver", driverPath); driver = new FirefoxDriver(); driver.get(baseUrl); String expectedTitle = "Welcome: Mercury Tours"; String actualTitle = driver.getTitle(); Assert.assertEquals(actualTitle, expectedTitle); driver.close(); } }
请注意下列事项。
- TestNG 不需要您有 main() 方法。
- 方法不必是静态的。
- 我们使用了@Test注释。 @Test 用于表明其下的方法是一个测试用例。在本例中,我们已将 verifyHomepageTitle() 方法设置为我们的测试用例,因此我们在其上方放置了一个“@Test”注释。
- 由于我们在 TestNG,我们需要导入包 org.testng.annotations.*。
- 我们使用了 Assert 类。 Assert 类用于执行验证操作 TestNG。要使用它,我们需要导入 org.testng.Assert 包。
你可能在一个测试用例中拥有多个测试用例(因此,多个@Test注释) TestNG 文件中。稍后将在“注释在 TestNG设立的区域办事处外,我们在美国也开设了办事处,以便我们为当地客户提供更多的支持。“
运行测试
要运行测试,只需运行文件即可 Eclipse 像平常一样 Eclipse 将提供两个输出 - 一个在控制台窗口中,另一个在 TestNG 结果窗口。
检查由以下人员创建的报告 TestNG
控制台窗口 Eclipse 给出我们的测试用例结果的文本报告,而 TestNG 结果窗口为我们提供了一个图形。
生成 HTML 报告
TestNG 能够生成 HTML 格式的报告。
步骤1: 运行我们的第一次之后TestNG在上一节中创建的文件,右键单击项目名称(第一个TestNG在项目资源管理器窗口中单击“项目”(Project),然后单击“刷新”选项。
步骤2: 请注意,已创建“test-output”文件夹。展开它并查找 index.html 文件。此 HTML 文件是最近一次测试运行的结果报告。
步骤3: Double-单击该index.html文件以在其中打开它 Eclipse的内置网络浏览器。重新运行测试后,您可以随时刷新此页面,只需按 F5 即可,就像在普通网络浏览器中一样。
注释用于 TestNG
在上一节中,我们介绍了 @Test 注释。现在,我们将学习更高级的注释及其用法。
多个测试用例
我们可以在一个注释中使用多个@Test注释 TestNG 文件。默认情况下,被@Test注释的方法按字母顺序执行。参见下面的代码。虽然c_test、a_test和b_test方法在代码中没有按字母顺序排列,但它们将按字母顺序执行。
运行此代码,并在生成的index.html页面上单击“按时间顺序视图”。
参数
如果您希望以不同的顺序执行方法,请使用参数“priority”。 参数是修改注释功能的关键字.
- 参数需要您为其分配一个值。方法是在参数旁边放置一个“=”,然后跟上值。
- 参数括在一对括号中,位于注释之后,如下面的代码片段所示。
TestNG 将执行优先级从低到高的 @Test 注释。优先级值不必连续。
这款 TestNG HTML 报告将确认方法是根据优先级的升序值执行的。
多个参数
除了“优先级”之外,@Test 还有另一个参数“alwaysRun”,只能设置为“true”或“false”。 要在单个注释中使用两个或多个参数,请用逗号分隔它们 如下图所示。
@Test(priority = 0, alwaysRun = true)
@BeforeTest 和 @AfterTest
@测试前 | 该注解下的方法将被执行 在第一个测试用例之前 TestNG 文件. |
@测试后 | 该注解下的方法将被执行 在所有测试用例之后 TestNG 文件被执行. |
考虑下面的代码。
package firsttestngpackage; import org.openqa.selenium.*; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.*; public class firsttestngfile { public String baseUrl = "http://demo.guru99.com/test/newtours/"; String driverPath = "C:\\geckodriver.exe"; public WebDriver driver ; @BeforeTest public void launchBrowser() { System.out.println("launching firefox browser"); System.setProperty("webdriver.gecko.driver", driverPath); driver = new FirefoxDriver(); driver.get(baseUrl); } @Test public void verifyHomepageTitle() { String expectedTitle = "Welcome: Mercury Tours"; String actualTitle = driver.getTitle(); Assert.assertEquals(actualTitle, expectedTitle); } @AfterTest public void terminateBrowser(){ driver.close(); } }
应用上面表格和代码所呈现的逻辑,我们可以预测方法的执行顺序是:
- 1st – 启动浏览器()
- 2nd – 验证主页标题()
- 3rd – 终止浏览器()
注释块的位置可以互换,而不会影响其执行的时间顺序。让我们通过 TestNG 示例并尝试重新排列注释块,以使您的代码看起来类似于下面的代码。
package firsttestngpackage; import org.openqa.selenium.*; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.*; public class firsttestngfile { public String baseUrl = "http://demo.guru99.com/test/newtours/"; String driverPath = "C:\\geckodriver.exe"; public WebDriver driver ; @AfterTest //Jumbled public void terminateBrowser(){ driver.close(); } @BeforeTest //Jumbled public void launchBrowser() { System.out.println("launching firefox browser"); System.setProperty("webdriver.gecko.driver", driverPath); driver = new FirefoxDriver(); driver.get(baseUrl); } @Test //Jumbled public void verifyHomepageTitle() { String expectedTitle = "Welcome: Mercury Tours"; String actualTitle = driver.getTitle(); Assert.assertEquals(actualTitle, expectedTitle); } }
运行上面的代码,注意
@BeforeMethod 和 @AfterMethod
@前方法 | 该注解下的方法将被执行 在每个测试用例中的每个方法之前. |
注释: | 该注解下的方法将被执行 在每个测试用例中的每个方法之后。 |
In Mercury 旅游,假设我们想验证下面两个链接的目标页面的标题。
我们的测试流程如下:
- 转到主页并验证其标题。
- 单击“注册”并验证其目标页面的标题。
- 返回主页并验证其是否仍然具有正确的标题。
- 单击“支持”并验证其目标页面的标题。
- 返回主页并验证其是否仍然具有正确的标题。
下面的代码说明了如何使用@BeforeMethod 和 @AfterMethod 来有效地执行上面提到的场景。
package firsttestngpackage; import org.openqa.selenium.*; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.*; @Test public class firsttestngfile { public String baseUrl = "http://demo.guru99.com/test/newtours/"; String driverPath = "C:\\geckodriver.exe"; public WebDriver driver; public String expected = null; public String actual = null; @BeforeTest public void launchBrowser() { System.out.println("launching firefox browser"); System.setProperty("webdriver.gecko.driver", driverPath); driver= new FirefoxDriver(); driver.get(baseUrl); } @BeforeMethod public void verifyHomepageTitle() { String expectedTitle = "Welcome: Mercury Tours"; String actualTitle = driver.getTitle(); Assert.assertEquals(actualTitle, expectedTitle); } @Test(priority = 0) public void register(){ driver.findElement(By.linkText("REGISTER")).click() ; expected = "Register: Mercury Tours"; actual = driver.getTitle(); Assert.assertEquals(actual, expected); } @Test(priority = 1) public void support() { driver.findElement(By.linkText("SUPPORT")).click() ; expected = "Under Construction: Mercury Tours"; actual = driver.getTitle(); Assert.assertEquals(actual, expected); } @AfterMethod public void goBackToHomepage ( ) { driver.findElement(By.linkText("Home")).click() ; } @AfterTest public void terminateBrowser(){ driver.close(); } }
执行此测试后,您的 TestNG 应报告以下序列。
简而言之,@BeforeMethod 应该包含你需要运行的方法 before 每个测试用例,而@AfterMethod应该包含你需要运行的方法 after 每个测试用例。
概要 TestNG 注释
@BeforeSuite:注释的方法将在该套件中的所有测试运行之前运行。
@AfterSuite:注释的方法将在该套件中的所有测试运行完毕后运行。
@测试前:注释的方法将在运行属于标签内的类的任何测试方法之前运行。
@测试后:被注释的方法将会在标签内的类所属的所有测试方法运行完之后运行。
@BeforeGroups:此配置方法将在其之前运行的组列表。此方法保证在调用属于这些组中任何一个的第一个测试方法之前不久运行。
@AfterGroups:此配置方法将在之后运行的组列表。此方法保证在调用属于这些组中任何一个组的最后一个测试方法后立即运行。
@课前:注释的方法将在调用当前类中的第一个测试方法之前运行。
@下课以后:注释的方法将在当前类中所有测试方法运行完之后运行。
@前方法:注释的方法将在每个测试方法之前运行。
注释::注释的方法将在每个测试方法之后运行。
@测试:注释的方法是测试用例的一部分
总结
- TestNG 是一个 测试 能够使 Selenium 测试更容易理解并生成易于理解的报告。
- 主要优点 TestNG 超过 JUnit 以下是。
- 注释更易于使用和理解。
- 测试用例可以更容易地分组。
- TestNG 让我们能够创造 并行测试.
- 控制台窗口 Eclipse 生成基于文本的结果,而 TestNG 窗口更有用,因为它为我们提供了测试结果的图形输出以及其他有意义的细节,例如:
- 每种方法的运行时间。
- 方法执行的时间顺序
- TestNG 能够生成基于 HTML 的报告。
- 注释可以像平常一样使用参数 Java TestNG 方法。
- TestNG Dataprovider 是一种将参数传递到测试函数的方法,它在一次执行中传递测试用例中的不同值。