48

ランダムに生成された値を使用して回帰テストを行う Firefox プラグインを使用して Selenium テストを作成することは可能ですか?

ストーリー全体: データベースのランダムな (または少なくとも疑似ランダムな) 値を作成するためにいくつかのスマートを使用する一連のテストを提供することで、クライアントが受け入れテストを行うのを支援したいと考えています。現時点での私の Selenium IDE テストの問題の 1 つは、事前定義された値があることです。これにより、一部のタイプのテストが問題になります。

4

12 に答える 12

48

まず、Selenium IDE はかなり制限されているため、Java、Perl、Ruby、またはその他の言語で駆動できる Selenium RC への切り替えを検討する必要があります。

Selenium IDE だけを使用して、JavaScript 式を埋め込んでコマンド パラメーターを取得できます。テキスト フィールドに乱数を入力できるはずです。たとえば、次のようになります。

type fieldName javascript{Math.floor(Math.random()*11)}

更新:「user-extensions.js」というファイルでヘルパー関数を定義できます。Selenium リファレンスを参照してください。

于 2008-10-02T12:54:38.710 に答える
31

(Thiloの回答に基づく) 次のように、リテラルと乱数を組み合わせることができます。

javascript{"joe+" + Math.floor(Math.random()*11111) + "@gmail.com";}

Gmailを使用すると、たとえばエイリアスを使用するすべてのものが自動的joe+testing@gmail.comにあなたのアドレスに送信されますjoe@gmail.com

* 11111を乗算して、1から9よりもランダムな値を取得します(Thiloの例)

于 2010-09-01T08:19:31.010 に答える
22

ユーザー exentions.js を追加して、ランダムな値を取得できます。

以下のコードをコピーして .js 拡張子 (randomgenerator.js) として保存し、Selenium コア拡張 (SeleniumIDE-->Options--->general タブ) に追加します。

Selenium.prototype.doRandomString = function( options, varName ) {

    var length = 8;
    var type   = 'alphanumeric';
    var o = options.split( '|' );
    for ( var i = 0 ; i < 2 ; i ++ ) {
        if ( o[i] && o[i].match( /^\d+$/ ) )
            length = o[i];

        if ( o[i] && o[i].match( /^(?:alpha)?(?:numeric)?$/ ) )
            type = o[i];
    }

    switch( type ) {
        case 'alpha'        : storedVars[ varName ] = randomAlpha( length ); break;
        case 'numeric'      : storedVars[ varName ] = randomNumeric( length ); break;
        case 'alphanumeric' : storedVars[ varName ] = randomAlphaNumeric( length ); break;
        default             : storedVars[ varName ] = randomAlphaNumeric( length );
    };
};

function randomNumeric ( length ) {
    return generateRandomString( length, '0123456789'.split( '' ) );
}

function randomAlpha ( length ) {
    var alpha = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split( '' );
    return generateRandomString( length, alpha );
}

function randomAlphaNumeric ( length ) {
    var alphanumeric = '01234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split( '' );
    return generateRandomString( length, alphanumeric );
}

function generateRandomString( length, chars ) {
    var string = '';
    for ( var i = 0 ; i < length ; i++ )
        string += chars[ Math.floor( Math.random() * chars.length ) ];
    return string;
}

使い方

Command                Target     Value
-----------           ---------   ----------
randomString           6           x
type                username       ${x}

上記のコードは 6 文字の文字列を生成し、変数 x に代入します

HTML 形式のコードは次のようになります。

<tr>
    <td>randomString</td>
    <td>6</td>
    <td>x</td>
</tr>
<tr>
    <td>type</td>
    <td>username</td>
    <td>${x}</td>
</tr>
于 2010-04-25T18:59:35.583 に答える
5

JSでランダムな文字列を生成するための1行のソリューションは次のとおりです。

"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".split("").filter(function(e, i, a) { return Math.random() > 0.8 }).join("")

SeleniumIDEへの貼り付けに便利です。

于 2011-02-10T15:40:36.920 に答える
2

選択肢の小さなセットからランダムに選択するためのワンライナー:

javascript{['brie','cheddar','swiss'][Math.floor(Math.random()*3)]}
于 2011-03-31T13:49:33.880 に答える
1

関数 generateRandomString を少し改善しました。FF がクラッシュしたときに、同じ乱数を再び使用できるのは良いことです。

基本的に、自分で文字列を入力するよう求められます。何も入力しないと生成されます。

function generateRandomString( length, chars ) { var string=prompt("Please today's random string",''); if (string == '') {for ( var i = 0 ; i < length ; i++ ) string += chars[ Math.floor( Math.random() * chars.length ) ]; return string;} else { return string;} }

于 2011-04-11T09:26:29.250 に答える
1

上記の RajendraChary の投稿を理解しながら、新しい Selenium IDE 拡張機能を作成することに時間を費やしました。

私の拡張機能では、ユーザーは変数に lorem ipsum テキストを入力できます。多くの設定可能なオプションがあり、それは素敵な小さなコマンドになっています。「5 words|wordcaps|nomarks」のようなことを実行して、句読点なしですべて大文字の 5 つの lorem ipsum 単語を生成できます。

インストールと使用法を徹底的に説明し、ここで完全なコードベースを提供しました

コードをざっと見てみると、同様の機能を構築する方法がわかります。

于 2012-06-02T15:13:36.440 に答える
0

Math.random は「十分」かもしれませんが、実際には、Random クラスは Math.random() よりも望ましいことがよくあります。Math.random を使用すると、得られる数値は実際には完全にランダムではない場合があります。本「Effective Java Second Edition」では、アイテム #47 でこれについて説明しています。

于 2013-05-20T20:46:51.813 に答える
0

Selenium RC では、次のことができるという点で、Selenium IDE よりもはるかに自由度が高くなります。

  • (1) 特定のフィールドに任意の値を入力します
  • (2) 特定の HTML フォームでテストするフィールドを選択します
  • (3) 実行順序/ステップを選択して、特定のフィールド セットをテストします。

Selenium IDE を使用してフィールドにランダムな値を入力する方法を尋ねたところ、他の人が Selenium RC を使用してフィールドにランダムな値を生成して入力する方法に答えました。それはテスト フェーズ (1) に分類されます: 「特定のフィールドに任意の値を入力します」。

Selenium RC を使用すると、フェーズ (2) と (3) を簡単に実行できます。Java、PHP、CSharp、Ruby、Perl、Python などのサポートされている言語でプログラミングを行うことにより、任意の実行ステップで任意のフィールドをテストします。

フェーズ (2) と (3) を実行する手順は次のとおりです。

  • 簡単に繰り返し処理できるように、HTML フィールドのリストを作成します。
  • RAND_STEP など、ステップを制御する確率変数を作成します。
  • フィールドを制御する確率変数を作成します。たとえば、RAND_FIELD とします。
  • [最終的に、フェーズ (1) を実行する場合は、RAND_VALUE など、特定のフィールドに入力された値を制御する確率変数を作成します]
  • ここで、ファジング アルゴリズム内で、最初に RAND_STEP の値を反復し、次に各反復で RAND_FIELD を反復し、最後に RAND_VALUE を反復します。

ファジング テスト、Selenium およびホワイト/ブラック ボックス テストに関する他の回答を参照してください。

于 2012-05-18T11:16:07.263 に答える
0

gmail の例の別のバリエーション:

<tr>
  <td>runScript</td>
  <td>emailRandom=document.getElementById('email');console.log(emailRandom.value);emailRandom.value=&quot;myEmail+&quot; + Math.floor(Math.random()*11111)+ &quot;@gmail.com&quot;;</td>
 <td></td>
</tr>
于 2012-03-14T19:09:00.067 に答える