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.测试报告(虽然自带的报告很丑,但可以经过二次开发,还是挺漂亮的,哈哈)

 

posted @ 2017-08-11 16:30  wujuan  阅读(933)  评论(0编辑  收藏  举报