1

以下の私の状況:

私はいくつかのテストケースを持っています:

  • ユーザーがサイトにログオンします。
  • ユーザーがホームページを開きます。
  • ユーザーにはいくつかの情報が表示されますが、それほど重要ではありません。テーブルやdivなどです。
  • ユーザーはヘルプデスクページに移動します。
  • ユーザーはCustomPageに移動します。
  • ユーザーはページにいくつかのカスタム情報を表示します。
  • そしてますます他の場合。

私のタスクは、Selenium DriverとJUnitを介して、さまざまなユーザー(admin1、admin2、userWithoutAccessなど)でこのすべてのケースをテストすることです。

しかし、現在、私のタスクに有効な解決策はありません:(

例えば:

public class HelpDeskPageTest
{
    private static WebDriver driver;

    HelpDeskPage helpDeskPage;

    @BeforeClass
    public static void setUpClass()
    {
        driver = new FirefoxDriver();
        Utils.logon(driver, "admin", "1234");
    }

    @AfterClass
    public static void tearDownClass()
    {
      driver.quit();
    }

    @Before
    public void setUp()
    {
        helpDeskPage = HelpDeskPage.open(driver);
    }

    @Test
    public void helpDeskPageIsOpen()
    {
        assertTrue(channelBrowserPage.getTitle().equals("Google: Internal HelpDesk"));
    }
}

このコードは何をしますか?このコードは、ユーザー管理者がヘルプデスクページを開くことができるかどうかをテストするだけです。また、HelpDeskPageTestクラスには、ヘルプデスクページでの管理アクションをテストする他の多くのテストメソッドを含めることができます。それはすべて大丈夫です。

あなたは私に尋ねることができます:それで、あなたはどこで問題を見ましたか?以下の私の答え:

  1. 他のユーザーに対して同じ機能をテストしたい場合(例:) admin2。どうすればいいですか?HelpDeskPageTestForAdmin2名前: 、modify@BeforeClass メソッド(ログインとして)で同じテストクラスを作成し、admin2他のすべてのコードをHelpDeskPageTest?からコピーする必要があります。しかし、これはDRYの原則に直接違反しています!どうすればこの状況を回避できますか?
  2. サイトには多くの異なるページが含まれています(Login, Home, HelpDesk, CustomPage1, CustomPage2...)。別のページでは、別のテストクラス(、、)LoginPageTestを作成しました。すべてのテストクラスは互いに独立しています。その結果、インスタンス化するメソッド(> 10秒)に多くの時間を費やしています。とても長いです!この時間遅延を回避するにはどうすればよいですか?すべての精巣内でインスタンスをどのように共有しますか?HomePageTestHelpDeskPageTest@BeforeClassWebDriver

JUnitは私の問題をどのように解決できますか?

4

4 に答える 4

2

for sure you need some kind of parameterization. which one, depends on what exactly do you need. if you want to run all methods from your test class with the same set of parameters then you need @Parameters. then you can have your arguments, e.g. "admin", "adminPassword" and each method will be run with those parameters accessible.

if however you need each method with different set of parameters then: if you know all parameters at compile time, check zohhak. if you want parameters from file or other provider, check junitParams

于 2012-12-24T16:01:43.043 に答える
0

Junit で TestNg として動的に渡すことにより、異なるデータでテストを繰り返すことができます。

パラメータ化されたクラスを使用すると、それを実現できます。

たとえば、以下の投稿を参照してください。

http://isagoksu.com/2009/development/agile-development/test-driven-development/using-junit-parameterized-annotation/

于 2012-12-24T15:00:11.367 に答える
0

JUnit でパラメータ化されたテストを使用してこれを行うことができますが、JUnit 4.11以降を使用する必要があります。ここで私が作った例を見ることができます。

Gradle を使用すると、ビルドの依存関係は次のようになります。

dependencies {
    // stored at: %HOMEPATH%/.gradle/caches/artifacts-14/filestore
    compile group: 'org.sikuli', name: 'sikuli-api', version: '1.0.+'
    compile group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '2.+'
    compile group: 'commons-collections', name: 'commons-collections', version: '3.+'
    compile group: 'junit', name: 'junit', version: '4.+'
    compile group: 'commons-lang', name: 'commons-lang', version: '2.+'
    compile group: 'commons-io', name: 'commons-io', version: '2.+'
}
于 2012-12-24T19:44:04.440 に答える