1

testNG / Maven / Springs RestTemplate を使用して HTTP REST アプリケーションをテストするためのプロジェクトをセットアップしました。

私はそれを使用して機能テストを行い、REST アプリケーションへの複数の呼び出しがスイート内に含まれており、ユーザー プロセスを模倣しています。

これはうまくいっています。

認証がオンになっていることを知っておいてください。

質問はtestNGでこれを行う方法ですか? テスト スイートに (1 回だけ) ログインするにはどうすればよいですか。

@BeforeSuite を使用して loginpage を呼び出し、ログインして、他のすべてのリクエストに必要な Cookie を取得できます。しかし、この Cookie をどこに保存すれば、すべてのテスト ケースで追加できるのでしょうか? もちろん、Cookieを追加するには、テストにコードを追加する必要があると思われます....しかし、どうすればそれを取得できますか?

@parameter と @dataprovider を調べましたが、あまり役に立たないようです...

どんな助け/提案も大歓迎です。

4

3 に答える 3

0

ログインを委任してSpring Securityいて、バックエンドが状態を保存しない場合(つまり、分離された要求のみを承認する場合)、それをテストする必要はありません。これは、テストで認証(Cookieの取得)を無効にできることを意味します。このようにして、テスト自体を承認から切り離します。

しかし、これをしたくない場合。また、スイートでテストを整理する場合は、プライベートメンバーを設定できます。Cookieがheader auth応答に含まれます。

@TestSuite
public void mySuite {

    private String cookie;

    @BeforeSuite public void login() {
         // Obtain cookie
         this.cookie = cookie;
    }
 ////// Rest of suite

それを見る別の方法は、テストの一部としてログインを実行することです。

私はそれをもっとエレガントにする方法を他に知りません。

于 2012-12-15T23:20:50.890 に答える
0

シングルトンソリューションは、将来のテストの並列化を妨げるため、やや手間がかかります。

この問題を解決する方法はいくつかあります。1つは、ITestContextインスタンスを@ BeforeSuite / @ BeforeTestおよび@BeforeClass構​​成メソッドに渡し、すべてのインスタンスのテストコンテキストを介してパラメーターを配置/取得することです。

public class Test {

    /** Property Foo is set once per Suite */
    protected String foo;

    /** Property Foo is set once per Test */
    protected String bar;

    /**
     * As this method is executed only once for all inheriting instances before the test     suite starts this method puts
     * any configuration/resources needed by test implementations into the test context.
     *
     * @param context test context for storing test conf data
     */
    @BeforeSuite
    public void beforeSuite(ITestContext context) {
        context.setAttribute("foo", "I was set in @BeforeSuite");
    }

    /**   
     * As this method is executed only once for all inheriting instances before the test starts this method puts any
     * configuration/resources needed by test implementations into the test context.
     *
     * @param context test context for storing test conf data
     */
    @BeforeTest(alwaysRun = true)
    public void beforeTest(ITestContext context) {
        context.setAttribute("bar", "I was set in @BeforeTest");
    }

    /**
     * This method is run before the first method of a test instance is started and gets all required configuration from
     * the test context.
     *
     * @param context test context to retrieve conf data from.
     */
    @BeforeClass
    public void beforeClass(ITestContext context) {
        foo = (String) context.getAttribute("foo");
        bar = (String) context.getAttribute("bar");

    }
}

このソリューションは、@ BeforeSuite / Test/Classメソッドが実際のテスト実装のスーパークラスにある場合でも機能します。

于 2012-12-17T09:34:21.440 に答える
0

実行可能なソリューションを作成しました。

私が行ったことは、シングルトン オブジェクトと @dataprovider を使用して、テストにデータを取得することです。データ プロバイダーはシングルトン オブジェクトを作成します。シングルトン オブジェクトは、その作成時にログイン ページを呼び出し、さまざまなテストからの呼び出しのたびに Cookie 情報を返します。

ちょっとハックかもしれませんが、うまくいきます。

于 2012-12-16T21:01:36.203 に答える