2

私は Rational Functional Tester (Java) にかなり慣れていませんが、大きなブランクが 1 つあります。アジャイル開発環境にあるアプリケーションがあるため、新しいインターフェイスがオンラインになると、一部の画面が変化する可能性があります。

このため、テスト スクリプトをモジュール化しようとしています。例: ログイン スクリプト、検索スクリプト、およびログアウト スクリプトが必要です。

次に、これらをつなぎ合わせます(疑似コード)

Call Script components.security.Login;
Call Script components.search.Search;
//verification point
Call Script components.security.Logout;

テスト スクリプトを個別のチャンク (機能単位) に分割することで、変化にうまく適応できると思います。ログイン スクリプトが変更された場合は、アプリケーション内のスクリプトごとに1 回修正または再記録します。

次に、そのスクリプトを「TestSituation_001」と呼びます。いくつかの異なるデータ プールを参照する必要があります。この例では、User データプール (superUser データプールではなく) と TestSituation_001 データプール、または場合によっては他のデータプールも同様です。検証ポイントは、そのチェックに状況データプールを使用します。

さて、これは私が理想的な世界でそれを行う方法です. 現時点で私を悩ませているのは、子スクリプトに親スクリプトを継承させるために、まったく別のことをする必要があるように見えるということです。

だから私の質問はこれらです:

  1. 子スクリプトが呼び出しスクリプトのデータ プールを継承しないのはなぜですか?
  2. どうすれば彼らにそれをさせることができますか?
  3. これが機能する方法について、私は不十分な仮定をしていますか?
  4. 3 が当てはまる場合、どうすればもっとうまくやれるでしょうか?

余談ですが、Java を機能させるためにハッキングしてもかまいません。

ありがとう!

4

1 に答える 1

2

私は自分の問題を解決しました。興味のある方はこちらをご覧ください:

public abstract class MyTestHelper extends RationalTestScript
{

    protected void useParentDataPool() {
        if(this.getScriptCaller() != null) {
            IDatapool dp = this.getScriptCaller().getDatapool();
            IDatapoolIterator iterator = DatapoolFactory.get().open(dp, "");
            if(dp != null && iterator != null) {
                //if the datapool is not null, substitute it for the current data pool
                this.dpInitialization(dp, iterator);
            }                           
        }
    }

}

これも同じイテレータを使用します。楽しい狩り…

実際、熟考の末、特定のスクリプトがルート呼び出しスクリプトの DataPool を使用するようにするメソッドを作成しました。再び、それを必要としている人たちに幸せな狩りを…

/*
 * preconditions:  there is a parent caller
 * postconditions: the current script is now using the same datapool / datapool iterator as the root script
 */
protected void useRootDataPool() {
    //if there is no parent, then this wouldn't work so return with no result;
    if(this.getScriptCaller() == null) return;

    //assume that we're at the root node to start
    RationalTestScript root = this;
    while(root.getScriptCaller() != null) {
        root = root.getScriptCaller();
    }

    //if this node is the root node, no need to continue.  the default attached datapool will suffice.
    if(this.equals(root)) return;

    //get the root's data pool (which would be the parent's parent and so on to the topmost)
    IDatapool dp = root.getDatapool();
    if(dp != null) {
        //check to make sure that we're not trying to re-initialize with the same datapool (by name)
        //if we are, then leave
        if(dp.getName().equals(this.getDatapool().getName())) return;

        //this basically says "give me the iterator already associated to this pool"
        IDatapoolIterator iterator = DatapoolFactory.get().open(dp, "");
        //if we have an iterator AND a data pool (from above), then we can initialize
        if(iterator != null) {
            //this method is never supposed to be run, but this works just fine.
            this.dpInitialization(dp, iterator);
            //log information
            logInfo("Using data pool from root script: " + root.getScriptName());
        }
    }
}
于 2010-07-24T08:23:10.923 に答える