3

私は、GUI 自動化テストでより優れたワークフロー制御を実装することに取り組んでいます。そして、私は最初にdependsOnから始めましたが、1つのテストが失敗すると、残りのスイート全体が実行されないという欠点がすぐにわかりました。そのため、'priority=' の使用に切り替えましたが、予期しない動作が見られます。一例:

@Test(priority = 10)
public void login(){...}

@Test(priority = 20, dependsOnMethods = "login")
public void verifyUserLogin() {...}

@Test(priority = 30, dependsOnMethods = "verifyUserLogin")
public void navigateToReportSettings() {...}

@Test(priority = 40, dependsOnMethods = "navigateToReportSettings")
public void verifyGeneralSettings() {...}

@Test(priority = 40, dependsOnMethods = "navigateToReportSettings")
public void verifyReportingPeriod() {...}
...
@Test(priority = 90, dependsOnMethods = "navigateToReportSettings")
public void saveReportSettings() {...}

私がしたいこと:

  1. ログイン。
  2. ユーザーがログインしていることを確認します。
  3. レポート設定ページに移動します。
  4. レポート設定ページで一般設定とレポート期間を確認します (順序は問いません)。
  5. いくつかの変更を加えて保存します。
  6. 重要: 10、20、および 30 は成功するか、残りをスキップする必要があります。40 が失敗した場合は、40 がすべて完了してから 50 に進みます。しかし、成功するためにステップ 40 に依存する必要はありません。

何が起こっている:

  1. ログイン (優先度 10)。
  2. 保存します (優先度 90)。

注: 「グループ」注釈もありますが、ここでは関係ないと思います。優先度と依存関係をうまく組み合わせてワークフローを制御する方法についてのヒントを事前に感謝しますが、依存関係は必要な場合にのみ使用されます。

別のサンプル コードを次に示します。なぜこの順序で実行されているのかわかりません: 出力: 10, 20, 30, 40, etc... 110, //OK 130, 140, 150, 160, // なぜ 120 の優先度がスキップされたのですか? 120、120、120 など... 120 //最後に実行しますか? また興味深いのは、120 のグループに順番に番号を付け直すことができ (121、122、123 など)、それでも最後に実行されることです。

したがって、問題は、'dependsOn' と 'priority =' が一緒にうまく機能しないということです。そして、誰かがこれら2つを自分の環境で動作させているかどうか興味があります. おそらくIntellij IDEAを使用していることを誰が知っていますか? とにかく、後でコストのかかるリファクタリングを避けるために、これをすぐに理解する必要があります! フィードバックをお寄せいただきありがとうございます - JR

@Test(priority = 10, groups = "A")
public void login(){

System.out.println("10");

}


@Test(priority = 20, groups = {"A", "B"})
public void openUserAdministrationTest() {

    System.out.println("20");

}

@Test(priority = 30, groups = {"A", "B"})
public void usersTabTest() {

    System.out.println("30");

}

@Test(priority = 40, groups = {"A", "B"})
public void createUserTabTest() {

    System.out.println("40");

}


@Test(priority = 50, groups = {"A", "B"})
public void userCreationDataEntryTest() {

    System.out.println("50");

}

@Test(priority = 60, groups = {"A", "B", "C"})
public void userRolesTest() {

    System.out.println("60");

}

@Test(priority = 70, groups = {"A", "B"})
public void saveUserTest() {

    System.out.println("70");

}

@Test(priority = 80, groups = {"A", "B"})
public void closeUserAdminAndLogoutTest() {

    System.out.println("80");

}

@Test(priority = 90, groups = "A")
public void loginNavigateToUserAdmin() {

    System.out.println("90");
}

@Test(priority = 100, groups = {"A", "D"})
public void verifyUserSearchUserReturned() {

    System.out.println("100");

}

@Test(priority = 110, groups = {"A", "D"})
public void reOpenNewUserTest() {

    System.out.println("110");

}

@Test(priority = 120, groups = {"A", "E"}, dependsOnMethods = "reOpenNewUserTest")
public void verifyNewUserUserNameTest() {

    System.out.println("120");
}

@Test(priority = 120, groups = {"A", "E"}, dependsOnMethods = "reOpenNewUserTest")
public void verifyNewUserFullNameTest() {

    System.out.println("120");
}

@Test(priority = 120, groups = {"A", "E"}, dependsOnMethods = "reOpenNewUserTest")
public void verifyNewUserDepartmentTest() {

    System.out.println("120");
}

@Test(priority = 120, groups = {"A", "E"}, dependsOnMethods = "reOpenNewUserTest")
public void verifyNewUserPhoneNumberTest() {

    System.out.println("120");
}

@Test(priority = 120, groups = {"A", "E"}, dependsOnMethods = "reOpenNewUserTest")
public void verifyNewUserEmailTest() {

    System.out.println("120");
}

//      Note: password and active verified by user login

@Test(priority = 120, groups = {"A", "E"}, dependsOnMethods = "reOpenNewUserTest")
public void verifyNewUserActiveCheckedTest() {
    System.out.println("120");
}

@Test(priority = 120, groups = {"A", "E"}, dependsOnMethods = "reOpenNewUserTest")
public void verifyNewUserLanguageTest() {

    System.out.println("120");
}

@Test(priority = 120, groups = {"A", "E"}, dependsOnMethods = "reOpenNewUserTest")
public void verifyNewUserDateFormatTest() {

    System.out.println("120");
}

@Test(priority = 120, groups = {"A", "E"}, dependsOnMethods = "reOpenNewUserTest")
public void verifyNewUserNumberFormatTest() {

    System.out.println("120");
}

@Test(priority = 120, groups = {"A", "E"}, dependsOnMethods = "reOpenNewUserTest")
public void verifyNewUserReportingPeriodTest() {

    System.out.println("120");
}

@Test(priority = 120, groups = {"A", "E"}, dependsOnMethods = "reOpenNewUserTest")
public void verifyNewUserReportingPeriodExampleTest() {

    System.out.println("120");
}

@Test(priority = 120, groups = {"A", "E"}, dependsOnMethods = "reOpenNewUserTest")
public void verifyNewUserReferencePeriodTest() {

    System.out.println("120");
}

@Test(priority = 120, groups = {"A", "E"}, dependsOnMethods = "reOpenNewUserTest")
public void verifyNewUserReferencePeriodExampleTest() {

    System.out.println("120");
}

@Test(priority = 120, groups = {"A", "E"}, dependsOnMethods = "reOpenNewUserTest")
public void verifyNewUserShowAnnotationsCheckedTest() {
    System.out.println("120");
}

@Test(priority = 130, groups = {"A", "C"})
public void verifyNewUserRoleTest() {

    System.out.println("130");
}


@Test(priority = 140, groups = {"A", "C"})
public void verifyNewUserFunctionalRoleTest() {

    System.out.println("140");

}

@Test(priority = 150, groups = {"A", "C"})
public void verifyUserAdminCloseAndLogoutTest() {

    System.out.println("150");

}

@Test(priority = 160, groups = {"A", "C"})
public void verifyUserLogin() {

    System.out.println("160");

}

これははるかに単純な例ですが、単純に優先順位を破る方法も示しています。

@Test(priority = 10)
public void test10(){
    System.out.println("10");
}

@Test(priority = 20, dependsOnMethods = "test10")
public void test20() {
    System.out.println("20, depends on 10");
}

@Test(priority = 30, dependsOnMethods = "test20")
public void test30() {
    System.out.println("30, depends on 20");
}

@Test(priority = 40, dependsOnMethods = "test10")
public void test40() {
    System.out.println("40, depends on 10");
}

実行する必要があります: 10、20、30、40。実行: 10、20、40、30。

4

3 に答える 3

2

優先度を指定せず、一緒に依存します。テストをグループ化できます。 たとえば、次のようにできます。

@Test(priority = 10, groups = { "10" })
public void test10() {
    System.out.println("10");
}

@Test(dependsOnMethods = "test10", groups = { "10" })
public void test20() {
    System.out.println("20, depends on 10");
}

@Test(dependsOnGroups = { "10" })
public void test30() {
    System.out.println("30, depends on 20");
}

@Test(dependsOnMethods = "test30")
public void test40() {
    System.out.println("40, depends on 10");
}

実行する必要があるための2番目のこと(成功するか、残りをスキップします)

一部のメソッドが失敗した場合でも、依存するメソッドの後に常に実行されます。これは、テスト メソッドが特定の順序で実行されることを確認したいだけで、それらの成功が他のメソッドの成功に依存しない場合に役立ちます。@Test アノテーションに「alwaysRun=true」を追加すると、弱い依存関係が得られます。

メソッドが失敗に依存していて、そのメソッドに強く依存している場合 (alwaysRun=false がデフォルト)、それに依存するメソッドは FAIL ではなく SKIP としてマークされます。スキップされたメソッドは、最終レポートでそのように報告されます (HTML では赤でも緑でもない色で)。スキップされたメソッドは必ずしも失敗とは限らないため、これは重要です。

于 2016-10-27T07:10:01.507 に答える