TestNG пропуск тестов - почему? - PullRequest
8 голосов
/ 03 марта 2011

Я тестирую веб-приложение с testng и селеном.Тесты в основном состоят из открытия нескольких страниц приложения и выполнения некоторых действий, специфичных для каждой страницы.Итак, у меня есть абстрактный базовый класс, который выполняет тест «открытой страницы» и который определяет абстрактный метод, который используется в качестве поставщика данных для этого теста.Кроме того, существует несколько расширяющих классов, которые обеспечивают реализацию для поставщика данных и имеют несколько различных тестов, кроме базового класса.У меня есть файл testsuite.xml, в который включены все классы, и это то, что я запускаю из своего затмения.

Проблема в том, что когда я запускаю выполнение теста, testng запускает тест в базовом классе для всех объектов, но систематически пропускает все остальные тесты в расширяющихся классах.Кто-нибудь знает почему?Любая информация будет очень ценится ...

Для полноты информации, вот некоторые из классов и xml, которые я использую:

Базовый класс:

public abstract class BaseWebAppPageTest {

    @Test(dataProvider="getMenuLink")
    public void testOpen(String menulink){
        GenericPageActions.openPage(TestingContext.getSelenium(), menulink);
    }

    protected abstract String[][] getMenuLink();

}

Инекоторые расширяющие классы:

TestLanguages:

public class TestLanguages extends BaseWebAppPageTest{

    @Test(dependsOnMethods={"testOpen"}, dataProvider="getCreateData")
    public void testCreateCorrect(String code, String description, String textDirection, String flag){
        Selenium selenium = TestingContext.getSelenium();
        LanguagesManagementActions.create(selenium, code, description, textDirection, flag);
    Assert.assertTrue(selenium.isTextPresent("Successfully created language"));
    }

    @Test(dependsOnMethods={"testCreateCorrect"}, dataProvider="getCreateData")
    public void testFilter(String code, String description, String textDirection, String flag){
        Selenium selenium = TestingContext.getSelenium();
        LanguagesManagementActions.filterTable(selenium, 2, code, 30000);
    Assert.assertTrue(selenium.getXpathCount("xpath=//span[.='"+code+"']").intValue() == 1);
    }

    @Test(dependsOnMethods={"testCreateCorrect"}, dataProvider="getCreateData")
    public void testModify(String code, String description, String textDirection, String flag){
        Selenium selenium = TestingContext.getSelenium();
        LanguagesManagementActions.modify(TestingContext.getSelenium(), code, description, textDirection, flag);
        Assert.assertTrue(selenium.isTextPresent("Successfully updated language"));
    }

    @Override
    @DataProvider
    protected String[][] getMenuLink() {
        return(TestingContext.getDataReader().getTableArray("openviewpage", "MULTILINGUAL_LANGUAGES"));
    }

    @DataProvider
    protected String[][] getCreateData() {
        return(TestingContext.getDataReader().getTableArray("multilingualcreate", "LANGUAGES"));
    }

}

TestTranslations:

public class TestTranslations extends BaseWebAppPageTest{

@Test(dependsOnMethods={"testOpen"}, dataProvider="getCreateData")
public void createCorrect(String code, String targetLanguage, String translation){
    Selenium selenium = TestingContext.getSelenium();
    TranslationsManagementActions.create(selenium, code, targetLanguage, translation);
    Assert.assertTrue(selenium.isTextPresent("Successfully created translation"));
}

@Test(dependsOnMethods={"createCorrect"}, dataProvider="getCreateData")
public void update(String code, String targetLanguage, String translation){
    Selenium selenium = TestingContext.getSelenium();
    TranslationsManagementActions.update(selenium, code, targetLanguage, translation);
    Assert.assertTrue(selenium.isTextPresent("Successfully updated translation"));
}

@Test(dependsOnMethods={"createCorrect"}, dataProvider="getCreateData")
public void filter(String code, String targetLanguage, String translation){
    Selenium selenium = TestingContext.getSelenium();
    TranslationsManagementActions.filterTable(selenium, 2, code, 30000);
    Assert.assertTrue(selenium.isElementPresent("xpath=//span[.='"+translation+"']"));
}

@Override
@DataProvider
protected String[][] getMenuLink() {
    return(TestingContext.getDataReader().getTableArray("openviewpage", "MULTILINGUAL_TRANSLATIONS"));
}

@DataProvider
protected String[][] getCreateData() {
    return(TestingContext.getDataReader().getTableArray("multilingualcreate", "TRANSLATIONS"));
}

}

И, наконец, TestSuite.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
    <suite name="WebAppSuiteTest" parallel="none">
      <parameter name="selenium.host" value="localhost" />
      <parameter name="selenium.port" value="5555" />
      <parameter name="selenium.browser" value="*firefox3 C:\\Documents and Settings\\dgarcia\\Local Settings\\Application Data\\Mozilla Firefox\\firefox.exe" />
      <parameter name="selenium.url" value="http://localhost:8080/standard-webapp-war/home.seam" />
      <parameter name="selenium.timeout" value="1000000" />
      <parameter name="test.data.filepath" value="src\\test\\resources\\datatest_.xls" />

  <test name="standard" preserve-order="true" >
    <classes>
        <class name="com.standard.webapp.common.TestingContext" />      
        <class name="com.standard.webapp.login.TestLogin"/>
        <class name="com.standard.webapp.TestLanguages"/>
        <class name="com.standard.webapp.TestTranslations"/>
        </class>
    </classes>
  </test>
</suite>

нет никаких исключений и никаких причин на выходе пропустить эти тесты.Я не совсем уверен в выводе, о котором вы упомянули, поэтому я вставлю сюда содержимое сгенерированного myWebAppTest.xml с результатами тестов:

<testsuite hostname="SP2L0044" name="com.sicpa.standard.dms.webapp.selenium.common.BaseWebAppPageTest" tests="14" failures="0" timestamp="4 Mar 2011 08:45:57 GMT" time="27.141" errors="0">
  <testcase name="testLoginLoadHome" time="2.188" classname="com.sicpa.standard.dms.webapp.selenium.login.TestLogin"/>
  <testcase name="testCreateCorrect" time="0.0" classname="com.sicpa.standard.dms.webapp.selenium.multilingual.TestCodes">
    <skipped/>
  </testcase>
  <testcase name="testFilter" time="0.0" classname="com.sicpa.standard.dms.webapp.selenium.multilingual.TestCodes">
    <skipped/>
  </testcase>
  <testcase name="testUpdate" time="0.0" classname="com.sicpa.standard.dms.webapp.selenium.multilingual.TestCodes">
    <skipped/>
  </testcase>
  <testcase name="testView" time="0.0" classname="com.sicpa.standard.dms.webapp.selenium.multilingual.TestCodes">
    <skipped/>
  </testcase>
  <testcase name="testCreateCorrect" time="0.0" classname="com.sicpa.standard.dms.webapp.selenium.multilingual.TestLanguages">
    <skipped/>
  </testcase>
  <testcase name="testFilter" time="0.0" classname="com.sicpa.standard.dms.webapp.selenium.multilingual.TestLanguages">
    <skipped/>
  </testcase>
  <testcase name="testModify" time="0.0" classname="com.sicpa.standard.dms.webapp.selenium.multilingual.TestLanguages">
    <skipped/>
  </testcase>
  <testcase name="createCorrect" time="0.0" classname="com.sicpa.standard.dms.webapp.selenium.multilingual.TestTranslations">
    <skipped/>
  </testcase>
  <testcase name="filter" time="0.0" classname="com.sicpa.standard.dms.webapp.selenium.multilingual.TestTranslations">
    <skipped/>
  </testcase>
  <testcase name="update" time="0.0" classname="com.sicpa.standard.dms.webapp.selenium.multilingual.TestTranslations">
    <skipped/>
  </testcase>
  <testcase name="testOpen" time="2.297" classname="com.sicpa.standard.dms.webapp.selenium.multilingual.TestLanguages"/>
  <testcase name="testOpen" time="12.61" classname="com.sicpa.standard.dms.webapp.selenium.multilingual.TestCodes"/>
  <testcase name="testOpen" time="9.469" classname="com.sicpa.standard.dms.webapp.selenium.multilingual.TestTranslations"/>
</testsuite>

Ответы [ 8 ]

11 голосов
/ 03 марта 2011

Существуют различные причины, по которым TestNG пропускает тесты, наиболее распространенной из которых является то, что метод, от которого вы зависите (например, testOpen или createCorrect), каким-то образом не удался.

Я предлагаю установить подробный уровень 10и вставьте вывод здесь или в список рассылки testng-users.

Если вы используете определение XML, установите подробный уровень следующим образом: <suite name="sweet_suite" verbose="10">.Уровень детализации также может быть установлен с помощью конфигурации кода.

TestNG tng = new TestNG();
XmlSuite suite = new XmlSuite();

suite.setVerbose(10);

// other configuration, add tests to run

List<XmlSuite> suites = new ArrayList<XmlSuite>();
suites.add( suite );
tng.setXmlSuites(suites);
tng.run();
6 голосов
/ 15 марта 2018

Это может быть ошибка в методе DataProvider.

3 голосов
/ 11 августа 2016

Если вы хотите запускать тесты в расширяющих классах независимо от того, пройдены / нет соответствующие методы, вы всегда можете добавить 'AlwaysRun = true' для тестов в расширяющихся классах, например:

@Test(dependsOnMethods={"testOpen"}, dataProvider="getCreateData", alwaysRun = true)
2 голосов
/ 29 ноября 2016

У меня была эта проблема в прошлом, и я обнаружил, что когда у меня есть 2 аннотации @BeforeMethod, одна внутри test.class и одна внутри basetest.class.Оба, между прочим, сделали что-то другое, но все же произошло столкновение - препятствующее выполнению тестов и, в конечном итоге, пропуску.Итог: убедитесь, что у вас нет нескольких @Before, @After любого вида.

0 голосов
/ 28 января 2019

У меня была такая же проблема, тест игнорируется. После перехода на стабильную версию TestNG он начал выполнять тест.

0 голосов
/ 17 февраля 2018

Для этого может быть несколько причин, но, увидев ваш код, я заметил одну вещь: просто убедитесь, что вы правильно установили исполняемый файл браузера, например, для выполнения тестов в Chrome вам понадобится chromedriver.exe на вашем пути.

 System.setProperty("webdriver.chrome.driver", System.getProperty("user.dir")+
                "\\src\\main\\resources\\chromedriver.exe");
0 голосов
/ 31 декабря 2017

Тест также пропускается, если вы берете параметры в методе testNG, но они не проходят во время выполнения. Я недавно столкнулся с этой проблемой, так что просто перепроверьте.

0 голосов
/ 31 июля 2014

В основном пропускаются те тесты, которые зависят от результатов других тестов или с установленным таймаутом или из-за конфигураций.

Если вы установили @afterMethods или @afterClass, стоит прокомментироватьотключите их один раз и снова запустите скрипт.

Что вы можете сделать, так это установить приоритет для всех ваших тестов, и если все ваши тесты зависят от определенного теста, сохраните его в @beforeMethod или @beforeClass, чтокогда-нибудь подходит вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...