TestNg的部分注解解释.

tech2022-09-16  77

简介

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(); }

@Test详解,将类或方法标记为测试的一部分。

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(); }

dataProvider的详解

//示例中对数据已经做了封装 private static final Object[][] dataList = CaseDataProvider.getCaseDataByDataClassFileName(MaterialTypeMaintenanceSuccessData.class, 1); @BeforeMethod private void beforeMethod() { //基础信息 click("基础信息"); //点击部门 click("物料类型维护"); pause(3000); } //首先你需要提供数据,DataProvider()需要的是一个二维数组类型的数据,在上面的代码中我已经提前准备了,在这里直接调用即可 @DataProvider() private static Object[][] dp() { return dataList; } //这里的dependsOnMethods代表若要执行当前方法必须先正确执行对应的依赖的方法 //priority是用来控制用例的顺序的,从0开始.默认不写的话就是0.description是对此方法的描述.allure报告中可以显示这个描述. @Test(priority = 2, description = "物料类型添加物料名称", dataProvider = "dp", dependsOnMethods = {"case_01_materialtypemaintenance_add_success"}) private void case_02_materialtypemaintenance_add_success(MaterialTypeMaintenanceSuccessData mats) { XXXXXXXX } }
最新回复(0)