2011-03-03 2 views
5

私はtestngとセレンを使ってWebアプリケーションをテストしています。テストは主にアプリのいくつかのページを開き、各ページに固有のいくつかのアクティビティを実行することから成ります。だから私は "オープンページ"テストを実行し、そのテストのデータプロバイダとして使用される抽象メソッドを定義する抽象基本クラスを持っています。次に、データプロバイダの実装を提供するいくつかの拡張クラスがあり、基本クラスとは別のいくつかの異なるテストがあります。私はすべてのクラスが含まれているtestsuite.xmlを持っています。これは私の日食から実行されます。TestNGテストをスキップする - なぜですか?

問題は、テスト実行を開始すると、testngはすべてのオブジェクトの基本クラスでテストを実行しますが、拡張するクラス内の他のすべてのテストをスキップします。なぜ誰が知っていますか?

基本クラス:

public abstract class BaseWebAppPageTest { 

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

    protected abstract String[][] getMenuLink(); 

} 

そして、いくつかの拡張クラス:

すべての情報は非常にクラスと、私が使用するXMLの一部である、ここで、情報を完了するには...

を理解されるであろう

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> 

答えて

9

TestNGのテストをスキップしている様々な理由があります。最も一般的なのは、あなたが依存するメソッド(例えば、testOpenまたはcreateCorrect)が何らかの方法で失敗したことです。

冗長レベルを10に設定し、ここに出力するか、testng-usersメーリングリストに貼り付けることをお勧めします。

+0

これは、実際にdataSourceにスローされたエラーを見つけるのに役立ちました。 –

-1

ほとんどの場合、他のテストの結果に依存するか、タイムアウトが設定されているか、設定によってテストがスキップされます。

@afterMethodsまたは@afterClassに設定した場合は、一度コメントアウトしてスクリプトを再実行する価値があります。

すべてのテストで優先順位を設定し、すべてのテストが特定のテストに依存している場合は、@beforeMethodまたは@beforeClassに収まるようにしてください。

2

あなたは関係なく、/依存方法の良否のクラスを拡張してテストを実行したい場合、あなたは常にこのようなクラスを拡張でテストのために「真alwaysRun =」を追加することができますが:

@Test (dependsOnMethods = { "testOpen"}、のdataProvider = "getCreateData" alwaysRun =真

2

Iが過去にこの問題を持っていた私はテスト内部@BeforeMethodの2つの注釈、いずれかを持っているときことを見出し.classとbasetest.classの中の1つです。ところで、どちらも違いはありましたが、依然として衝突が発生し、テストが実行されずにスキップされてしまいます。 結論:@Before、@Afterのいずれかを複数持っていないことを確認してください。

0

testNGメソッドでパラメータを取り込むが、実行中に渡されない場合は、テストもスキップされます。 私は最近、この問題に直面したので、もう一度チェックしてください。

0

複数の理由が考えられますが、コードを確認した後、ブラウザにexeを正しく設定していることを確認してください。あなたのパスにchromedriver.exeが必要です。

System.setProperty("webdriver.chrome.driver", System.getProperty("user.dir")+ 
       "\\src\\main\\resources\\chromedriver.exe"); 
関連する問題