Testng优势
选择Testng的理由:
1.可指定执行顺序, dependsOnMethods 属性来应对测试的依赖性问题。
2.·参数化1:轻轻松松从XML中得到参数
@BeforeClass public void startTest(ITestContext context) { this.testContext = context; String browserName = context.getCurrentXmlTest().getParameter("browserName"); driver = new SeleniumUtils(); timeOut = Integer.parseInt(context.getCurrentXmlTest().getParameter("timeOut")); sleepTime = Integer.valueOf(context.getCurrentXmlTest().getParameter("sleepTime")); waitMillisecondsForAlert = Integer .valueOf(context.getCurrentXmlTest().getParameter("waitMillisecondsForAlert")); webUrl = context.getCurrentXmlTest().getParameter("testurl"); driver.openBrowser(browserName, webUrl, timeOut); } <suite name="Suite" parallel="none"> <parameter name="browserName" value="chrome" /> <parameter name="testurl" value="http://*********8080/****" /> <parameter name="sleepTime" value="800" /> <!-- 页面元素10秒不出现超时时间 --> <parameter name="timeOut" value="20" /> <!-- 这个是等待alert弹出的时间 单位毫秒 --> <parameter name="waitMillisecondsForAlert" value="40000" />
3.参数化二:@DataProvider,封装Excel、xml、JSON
封装数据:
/** * 测试数据提供者 - 方法 */ @DataProvider(name = "testData") public Iterator<Object[]> dataFortestMethod() throws IOException { String moduleName = null; // 模块的名字 String caseNum = null; // 用例编号 String className = this.getClass().getName(); int dotIndexNum = className.indexOf("."); // 取得第一个.的index int underlineIndexNum = className.indexOf("_"); // 取得第一个_的index if (dotIndexNum > 0) { String packagename = className.substring(0, className.lastIndexOf("."));// 得到整个包名 moduleName = packagename.substring(packagename.lastIndexOf(".") + 1); ; // 取到模块的名称 } if (underlineIndexNum > 0) { String caseName = className.substring(className.lastIndexOf(".") + 1);// 得到类名 caseNum = caseName.substring(caseName.indexOf("_") + 1, caseName.indexOf("_") + 4); // 取到用例编号 } // 将模块名称和用例的编号传给 ExcelDataProvider ,然后进行读取excel数据 return new ExcelDataProvider(moduleName, caseNum); }
引用:
@Test(dataProvider = "testData") public void login(Map<String, String> data) { LoginPage.login(data.get("USERNAME"), data.get("PASSWORD"), data.get("CODE")); LoginPage.checkUserName(data.get("EXP_RESULT")); }
4.测试报告(虽然自带的报告很丑,但可以经过二次开发,还是挺漂亮的,哈哈)