某些测试TestNG中未报告 [英] Certain tests not reporting in TestNG

查看:137
本文介绍了某些测试TestNG中未报告的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用TestNG和硒在Eclipse,Java中。我有测试的方法调用其他方法为它需要执行的操作的支持。我把它们作为测试的一部分,使用标记 @Test

  @BeforeTest
公共无效beforeTest(){
    。driver.manage()窗口()最大()。
}@测试
公共静态无效checkValidity(String []数组,司机的webdriver){
    串partialURL =;
    INT brokenLinks = 0;
    为(中间体X = 1; X&下; array.length; X + = 2){
        partialURL = anonUserSitemapExperience.getPartialURL(驱动程序,数组[X]);
        如果(partialURL.isEmpty()){
            通信System.err.println(链接\\+阵列[X] +\\意为+阵列[X-1] +页或者是损坏或外部网站。);
            brokenLinks ++;
            brokenLinksTot ++;
        }
        其他{
            INT发现= anonUserSitemapExperience.findMatch(数组,array.length,partialURL);
            如果(发现< 1){
                通信System.err.println(一场比赛未找到+阵列[X-1] + +阵列[X] +\\ n+ partialURL\\ n);
                brokenLinks ++;
                brokenLinksTot ++;
            }
        }
    }
    通信System.err.println(\\ n+ brokenLinks +断开链接(S)的/发现\\ n);
}@测试
公共静态无效openDropDowns(webdriver的驱动程序){
    清单< WebElement> dropdownArrows = driver.findElements(By.className(dropdownToggler));
    迭代器< WebElement> ITR = dropdownArrows.iterator();
    而(itr.hasNext()){
        尝试{
            。itr.next()点击();
        }
        赶上(ElementNotVisibleException E){
        }
    }
}@测试
公共静态的String [] createArray(列表< WebElement>名单){
    的String [] = linkArray新的String [则为list.size()* 2];
    INT计数器= 0;
    为(中间体X = 1; X&下; linkArray.length; X + = 2){
        linkArray [X] = list.get(计数器).getAttribute(的href);
        尝试{
            linkArray [X] = linkArray [X] .replaceAll(%C2%AE,®);
            linkArray [X] = linkArray [X] .replaceAll(%20,);
            linkArray [X] = linkArray [X] .replaceAll(%27,');
            linkArray [X] = linkArray [X] .replaceAll(%C 3%的A4,A);
            linkArray [X] = linkArray [X] .replaceAll(%C3%B6,O);
            linkArray [X] = linkArray [X] .replaceAll(%C3%BC,U);
            linkArray [X] = linkArray [X] .replaceAll(%C3%84,A);
            linkArray [X] = linkArray [X] .replaceAll(%C3%96,O);
            linkArray [X] = linkArray [X] .replaceAll(%C3%9C,U);
            linkArray [X] = linkArray [X] .replaceAll(%E2%80%93, - );
            linkArray [X] = linkArray [X] .replaceAll(%E2%84%A2,™);
            linkArray [X] = linkArray [X] .replaceAll(%25,%);
            反++;
        }
        赶上(例外五){
        }
    }
    INT计数器2 = 0;
    为(中间体X = 0; X&下; linkArray.length; X + = 2){
        linkArray [X] = list.get(C2的).getText();
        计数器2 ++;
    }
    返回linkArray;
}@测试
公共无效测试(){
    driver.get(siteUS);
    清单< WebElement> topNavLinks = driver.findElement(By.className(topNavigationMenu))findElements(By.className(menuLink))。
    INT numLinks = topNavLinks.size();
    的String [] = topNavTitlesAndLinks新的String [numLinks * 2];
    topNavTitlesAndLinks = createArray(topNavLinks);
    的System.out.println(补缺标题和链接数组。);
    为(中间体X = 1; X&下; topNavTitlesAndLinks.length; X + = 2){
        driver.get(topNavTitlesAndLinks [X]);
        openDropDowns(驾驶员);
        尝试{
            清单< WebElement>菜单= driver.findElement(By.className(asideNavigationMenu))findElements(By.className(itemLink))。
            的String [] = menuArray新的String [menu.size()* 2];
            menuArray = createArray(菜单);
            checkValidity(menu​​Array,驱动程序);
        }
        赶上(例外五){
            如果(topNavTitlesAndLinks [X-1]。载(牙髓)){
                WebElement元= driver.findElement(By.linkText(根管治疗));
                操作动作=新的动作(驱动器);
                action.moveToElement(元素).perform();
                WebElement子元素= driver.findElement(By.partialLinkText(访问));
                action.moveToElement(子元素);
                action.click();
                action.perform();
                openDropDowns(驾驶员);
                清单< WebElement>菜单= driver.findElement(By.className(asideNavigationMenu))findElements(By.className(itemLink))。
                的String [] = menuArray新的String [menu.size()* 2];
                menuArray = createArray(菜单);
                checkValidity(menu​​Array,驱动程序);
            }
        }
    }
}@AfterTest
公共无效afterTest(){
    driver.close();
    driver.quit();    (发现\\ n总计损坏的链接:+ brokenLinksTot)通信System.err.println;    长的时间2 = System.currentTimeMillis的();
    双时间min =((双)(时间2-时间1)/ 60000);
    INT timeMinTrunc =(int)的时间min;
    双timeSec =(时间min%1)* 60;    的System.out.println(\\ n \\ n所有测试完成了+ timeMinTrunc +分+ timeSec +秒);
}

问题是,当我运行它,我没有得到传球后由测试调用的方法失败。我的输出如下:


  

失败:测试


  
  

SKIPPED:checkValidity


  
  

SKIPPED:openDropDowns


那么,怎样才能让我所有的调用的方法报告呢?


解决方案

  1. 非void的方法是通过TestNG的忽略

  2. 您不应调用的测试方法自己 - 这是TestNG的
  3. 工作
  4. 重写你的测试类,这样的方法 @Test 注释反映您的方案,并按照一排。那么你可以使用任何你想要的helper方法。

例如

  @BeforeClass
前公共无效(){
    //等等等等precondition放在这里
}@Test(优先级= 0)
公共无效的start(){
    //暴躁测试0到这里
}@Test(dependsOnMethods =开始)
公共无效的next(){
    SYSOUT(DoSomething的());
}公共字符串DoSomething的(){
    返回辅助方法,我在一些测试方法称之为;
}

UPD

如果您想要调用400次:

  @dataProvider(NAME =400_links)
公共静态的String [] [] getLinks(){
   //找到自己的方式在这里创建链接
   返回新的String [] [] {{HTTP://富},{HTTP://栏},{HTTP:// XYZ}};
}@Test(的dataProvider =400_links)
公共无效checkAllLinks(字符串连接){
   checkValidityOrWhatever(链接);
}公共无效checkValidityOrWhatever(字符串连接){
   //等等等等HTTP FTW
}

这将启动400次,如果你在提供400链接getLinks()每一次迭代将被TestNG的报告。失败的迭代不会从发射阻止其他调用。

I'm using TestNG and Selenium in Eclipse, in Java. I have a method test that calls the other methods as support for the actions it needs to perform. I have them marked as part of the test using @Test.

@BeforeTest
public void beforeTest() {
    driver.manage().window().maximize();
}

@Test
public static void checkValidity(String[] array, WebDriver driver){
    String partialURL = "";
    int brokenLinks = 0;
    for (int x=1; x<array.length; x+=2){
        partialURL = anonUserSitemapExperience.getPartialURL(driver, array[x]);
        if (partialURL.isEmpty()){
            System.err.println("The link \""+array[x]+"\" intended for the "+array[x-1]+" page is either broken or an external site.");
            brokenLinks++;
            brokenLinksTot++;
        }
        else{
            int found = anonUserSitemapExperience.findMatch(array, array.length, partialURL);
            if (found<1){
                System.err.println("A match was not found for "+array[x-1]+".\n"+array[x]+"\n"+partialURL);
                brokenLinks++;
                brokenLinksTot++;
            }
        }
    }
    System.err.println("\n"+brokenLinks+" broken link(s) was/were found.\n");
}

@Test
public static void openDropDowns(WebDriver driver){
    List<WebElement> dropdownArrows = driver.findElements(By.className("dropdownToggler"));
    Iterator<WebElement> itr = dropdownArrows.iterator();
    while(itr.hasNext()){
        try{
            itr.next().click();
        }
        catch(ElementNotVisibleException e){
        }
    }
}

@Test
public static String[] createArray(List<WebElement> list){
    String[] linkArray = new String[list.size()*2];
    int counter = 0;
    for (int x=1; x<linkArray.length; x+=2){
        linkArray[x] = list.get(counter).getAttribute("href");
        try{
            linkArray[x] = linkArray[x].replaceAll("%C2%AE", "®");
            linkArray[x] = linkArray[x].replaceAll("%20", " ");
            linkArray[x] = linkArray[x].replaceAll("%27", "'");
            linkArray[x] = linkArray[x].replaceAll("%C3%A4", "ä");
            linkArray[x] = linkArray[x].replaceAll("%C3%B6", "ö");
            linkArray[x] = linkArray[x].replaceAll("%C3%BC", "ü");
            linkArray[x] = linkArray[x].replaceAll("%C3%84", "Ä");
            linkArray[x] = linkArray[x].replaceAll("%C3%96", "Ö");
            linkArray[x] = linkArray[x].replaceAll("%C3%9C", "Ü");
            linkArray[x] = linkArray[x].replaceAll("%E2%80%93", "–");
            linkArray[x] = linkArray[x].replaceAll("%E2%84%A2", "™");
            linkArray[x] = linkArray[x].replaceAll("%25", "%");
            counter++;
        }
        catch(Exception e){
        }
    }
    int counter2 = 0;
    for (int x=0; x<linkArray.length; x+=2){
        linkArray[x] = list.get(counter2).getText();
        counter2++;
    }
    return linkArray;
}

@Test
public void test() {
    driver.get(siteUS);
    List<WebElement> topNavLinks = driver.findElement(By.className("topNavigationMenu")).findElements(By.className("menuLink"));
    int numLinks = topNavLinks.size();
    String[] topNavTitlesAndLinks = new String[numLinks*2];
    topNavTitlesAndLinks = createArray(topNavLinks);
    System.out.println("Filled titles and links array.");
    for (int x=1; x<topNavTitlesAndLinks.length; x+=2){
        driver.get(topNavTitlesAndLinks[x]);
        openDropDowns(driver);
        try{
            List<WebElement> menu = driver.findElement(By.className("asideNavigationMenu")).findElements(By.className("itemLink"));
            String[] menuArray = new String[menu.size()*2];
            menuArray = createArray(menu);
            checkValidity(menuArray, driver);
        }
        catch (Exception e){
            if (topNavTitlesAndLinks[x-1].contains("Endodontics")){
                WebElement element = driver.findElement(By.linkText("Endodontics"));
                Actions action = new Actions(driver);
                action.moveToElement(element).perform();
                WebElement subElement = driver.findElement(By.partialLinkText("Access"));
                action.moveToElement(subElement);
                action.click();
                action.perform();
                openDropDowns(driver);
                List<WebElement> menu = driver.findElement(By.className("asideNavigationMenu")).findElements(By.className("itemLink"));
                String[] menuArray = new String[menu.size()*2];
                menuArray = createArray(menu);
                checkValidity(menuArray, driver);
            }
        }
    }
}

@AfterTest
public void afterTest() {
    driver.close();
    driver.quit();

    System.err.println("\nTotal broken links found: "+brokenLinksTot);

    long time2 = System.currentTimeMillis();
    double timeMin =((double)(time2-time1)/60000);
    int timeMinTrunc = (int)timeMin;
    double timeSec = (timeMin%1)*60;

    System.out.println("\n\nAll tests finished in "+timeMinTrunc+" minutes and "+timeSec+" seconds.");
}

Problem is, when I run it, I don't get pass fails from the methods that are called by test. My output is as follows:

FAILED: test

SKIPPED: checkValidity

SKIPPED: openDropDowns

So how can I make all of the called methods report as well?

解决方案

  1. Non-void methods are ignored by TestNG
  2. You should not call test methods yourself - it is a job for TestNG
  3. Rewrite your test class so that methods annotated with @Test reflect your scenario and follow in a row. You can then use any helper methods you want.

E.g.

@BeforeClass
public void before() {
    //blah blah precondition goes here
}

@Test(priority=0)
public void start() {
    // testy test 0 goes here
}

@Test(dependsOnMethods = "start")
public void next() {
    Sysout(doSomething());
}

public String doSomething() {
    return "Helper method which I call in some test method";
}

UPD

If you want to invoke 400 times:

@DataProvider(name = "400_links")
public static String[][] getLinks() {
   // find your own way to create links here
   return new String[][] {{"http://foo"}, {"http://bar"}, ... , {"http://xyz"}};
}

@Test(dataProvider = "400_links")
public void checkAllLinks(String link) {
   checkValidityOrWhatever(link);
}

public void checkValidityOrWhatever(String link) {
   //blah blah http ftw
}

It will be launched 400 times, if you have 400 links provided in getLinks() Every iteration will be reported by Testng. Failed iterations will not stop other invocations from launch.

这篇关于某些测试TestNG中未报告的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆