2011-03-03 11 views
5

Estoy probando una aplicación web con prueba y selenio. Las pruebas consisten principalmente en abrir varias páginas de la aplicación y realizar algunas actividades específicas para cada página. Así que tengo una clase base abstracta que realiza la prueba de "página abierta" y define un método abstracto que se utiliza como proveedor de datos para esa prueba. Luego hay varias clases que se extienden y que proporcionan implementación para el proveedor de datos, y que tienen varias pruebas diferentes además de la de la clase base. Tengo un testsuite.xml donde están todas las clases, que es lo que ejecuto desde mi eclipse.TestNG omitiendo pruebas: ¿por qué?

El problema es que cuando inicio la ejecución de la prueba, testng ejecuta la prueba en la clase base para todos los objetos, pero omite sistemáticamente todas las demás pruebas en las clases que se extienden. ¿Alguien sabe por qué? Cualquier información será muy apreciado ...

Para completar la información, aquí están algunas de las clases y el xml que utilizo: clase

Base:

public abstract class BaseWebAppPageTest { 

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

    protected abstract String[][] getMenuLink(); 

} 

Y algunas clases se extienden:

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

} 

Y, por último, la 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> 

no hay excepción ni ninguna razón en la salida a saltar esas pruebas. No estoy realmente seguro de la salida mencionas, así que voy a pegar aquí el contenido de la generada "myWebAppTest.xml" con los resultados de las pruebas:

<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> 

Respuesta

9

Hay varias razones por las cuales se TestNG saltarse las pruebas , el más común es que un método del que dependes (por ejemplo, testOpen o createCorrect) falló de alguna manera.

Sugiero configurar el nivel detallado en 10 y pegar el resultado aquí o en la lista de correo de usuarios de testng.

+0

Esto realmente ayudó a encontrar el error arrojado para dataSource. –

-1

Principalmente omite aquellas pruebas que dependen del resultado de otras pruebas o que tienen algún tiempo de espera configurado o debido a configuraciones.

Si ha configurado @afterMethods o @afterClass, valdría la pena comentarlas una vez y volver a ejecutar el script.

Lo que puede hacer es establecer la prioridad con todas sus pruebas y si todas sus pruebas dependen de una prueba determinada, guarde eso en @beforeMethod o @beforeClass que le quede.

2

Si desea ejecutar las pruebas en la extensión de las clases, independientemente de la pasa/no pasa de los métodos en función, siempre se puede añadir 'alwaysRun = true' para las pruebas en las clases que se extienden de esta manera:

@test (dependsOnMethods = { "testOpen"}, dataProvider = "getCreateData", alwaysRun = true)

2

he tenido este problema en el pasado y descubrí que cuando tengo 2 anotaciones de @BeforeMethod, una dentro de la prueba .class y uno dentro de una basetest.class. Ambos, por cierto, hicieron algo diferente, aún así ocurrió una colisión, lo que impidió que las pruebas se ejecutaran y eventualmente omitieran. En pocas palabras: compruebe que no tiene múltiples @Before, @ After de ningún tipo.

0

Las pruebas también se omiten si está tomando los parámetros en el método testNG, pero no se están aprobando durante la ejecución. Hace poco me enfrenté a este problema, así que solo vuelva a verificarlo.

0

Puede haber varias razones para esto, pero después de ver su código noté una cosa, solo asegúrese de haber configurado el navegador exe correctamente, como para ejecutar sus pruebas en Chrome necesitaría chromedriver.exe en su camino.

System.setProperty("webdriver.chrome.driver", System.getProperty("user.dir")+ 
       "\\src\\main\\resources\\chromedriver.exe"); 
Cuestiones relacionadas