TestNG是一个测试框架,旨在简化广泛的测试需求,从单元测试(将一个类与其他类隔离测试)到集成测试(对由多个类,几个程序包甚至几个外部框架组成的整个系统进行测试))。 编写测试通常分为三个步骤:
编写测试的业务逻辑.然后在代码中插入TestNG注解在testng.xml文件或build.xml中添加有关测试的信息(例如,类名,希望运行的组等)。运行TestNG。 示例 @Test()//@Tes注解 将类或方法标记为一个测试用例。 //业务逻辑 private void test1(description = "测试描述"){ maxWindow(driver); String url = "http://192.168.252.208:8099/nem/hc/1000"; driver.get(url); driver.findElement(By.xpath("//*[@id=\"signin-N\"]/div[1]/input")).sendKeys("ttt001"); driver.findElement(By.xpath("//*[@id=\"signin-N\"]/div[2]/input")).sendKeys("admin321"); driver.findElement(By.xpath("//*[@id=\"signin-N\"]/div[4]/a/button")).click(); //点击基础信息 driver.findElement(By.xpath("//*[text()=\"基础信息\"and@class=\"text\"]")).click(); findEle(driver, "//*[@id=\"mu_412\"]/span"); return driver; }TestNG类的配置信息:
@BeforeSuite:带注释的方法将在此套件中的所有测试运行之前运行。 @AfterSuite:带注释的方法将在运行此套件中的所有测试之后运行。 @BeforeTest:带注释的方法将在运行属于标记内的类的任何测试方法之前运行。 @AfterTest:带注释的方法将在所有属于标记内的类的测试方法运行后运行。 @BeforeGroups:此配置方法将在其之前运行的组的列表。保证此方法可以在调用属于这些组中的任何一个的第一个测试方法之前不久运行。 @AfterGroups:此配置方法将在其后运行的组的列表。保证在调用属于这些组中任何一个的最后一个测试方法后不久便可以运行该方法。 @BeforeClass:带注释的方法将在调用当前类中的第一个测试方法之前运行。 @AfterClass:带注释的方法将在当前类中的所有测试方法运行之后运行。 @BeforeMethod:带注释的方法将在每个测试方法之前运行。 @AfterMethod:带注释的方法将在每个测试方法之后运行。 TestNG类父类中注释的行为可以被子类继承。例如,子类中都会用到登录系统则可以抽取这个方法到父类中. 在这种情况下,TestNG保证以继承顺序执行“ @Before”方法(首先是最高父类,然后沿着继承链执行),并以相反顺序执行“ @After”方法(沿继承链向上)。下面一图解释. 流程图实例
示例
@BeforeSuite public void beforeSuite() { logger.info("----开始测试,打开浏览器----"); driver = WebDriverUtils.getChromeDriver(); driver.manage().window().maximize(); loginEman(); } @AfterSuite public void afterSuite() { logger.info("----测试结束,关闭浏览器----"); driver.quit(); }dataProvider 此测试方法的数据提供者的名称。 dataProviderClass 在何处查找数据提供程序。 如果未指定,将在当前测试方法的类或其基类之一上查找数据提供程序。 如果指定了此属性,则数据提供者方法在指定的类上必须是静态的。 dependsOnGroups 此方法所依赖的组的列表。 dependsOnMethods 此方法所依赖的方法列表。 description 说明此方法的说明。 enabled是否启用此类/方法上的方法。 示例
@Test(description = "部门增加", dataProvider = "dp",dataProviderClass = CaseDataProvider.class) private void department_add_success_test_case(DepartmentSuccessData dpd) { WebDriver driver = toBasicInformation(getDriver()); findEle(driver, "//*[contains(text(),'添加')]"); //部门名称 driver.findElement(By.name("dname")).sendKeys("测试数据"); //部门级别 driver.findElement(By.name("dnums")).sendKeys("1"); //下拉框:是否在用 Select select = new Select(driver.findElement(By.name("isuses"))); select.selectByIndex(0); //部门描述 driver.findElement(By.name("remark")).sendKeys("测试数据描述"); Thread.sleep(1000); //保存 findEle(driver, "//*[contains(text(),'保存')]"); Thread.sleep(3000); //弹窗点击确定 driver.findElement(By.xpath("/html/body/div[14]/div[2]/button[2]")).click(); Thread.sleep(1000); driver.quit(); }