ランダムに生成された値を使用して回帰テストを行うFirefoxプラグインを使用してSeleniumテストを作成することはできますか?
詳細:データベースのランダムな(または少なくとも擬似ランダムな)値を作成するために、いくつかのスマートを使用する一連のテストを提供することで、クライアントが受け入れテストを行うのを支援したいと思います。私のSelenium IDEテストの現時点での問題の1つは、それらが事前定義された値を持っていることです。
まず、Selenium IDEはかなり制限されています。SeleniumRCへの切り替えを検討する必要があります。これは、JavaまたはPerlまたはRubyまたはその他の言語。
Selenium IDEのみを使用して、JavaScript式を埋め込み、コマンドパラメーターを導出できます。次の例のように、テキストフィールドに乱数を入力できるはずです。
type fieldName javascript{Math.floor(Math.random()*11)}
更新:「user-extensions.js」というファイルにヘルパー関数を定義できます。 Selenium Reference を参照してください。
(Thiloの回答に基づく)このようにリテラルと乱数を混在させることができます:
javascript{"joe+" + Math.floor(Math.random()*11111) + "@gmail.com";}
Gmailでは、エイリアスを使用するすべてのもの、たとえば[email protected]
はあなたの住所に行きます[email protected]
* 11111を乗算して、1〜9よりもランダムな値を与えます(Thiloの例)
ユーザー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>
JSでランダムな文字列を生成する1行のソリューションを次に示します。
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".split("").filter(function(e, i, a) { return Math.random() > 0.8 }).join("")
Selenium IDEに貼り付けるのに便利です。
<tr>
<td>store</td>
<td>javascript{Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 8)}</td>
<td>myRandomString</td>
</tr>
少数の選択肢からランダムに選択するためのワンライナー:
javascript{['brie','cheddar','swiss'][Math.floor(Math.random()*3)]}
関数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;} }
上記のRajendraCharyの投稿を理解しながら、新しいSelenium IDE=拡張機能を作成するのに少し時間を費やしました。
私の拡張機能により、ユーザーは変数にlorem ipsumテキストを入力できます。多くの設定可能なオプションがあり、それは素敵な小さなコマンドに変わりました。 「5ワード|ワードキャップ|ノーマーク」などの操作を行うと、句読点なしで、すべて大文字で5つのlorem ipsumワードを生成できます。
完全なコードベースはこちら を提供するだけでなく、インストールと使用方法を徹底的に説明しました。
コードを覗いてみると、同様の機能を構築する方法がわかります。
Gmailの例の別のバリエーション:
<tr>
<td>runScript</td>
<td>emailRandom=document.getElementById('email');console.log(emailRandom.value);emailRandom.value="myEmail+" + Math.floor(Math.random()*11111)+ "@gmail.com";</td>
<td></td>
</tr>
Math.randomは「十分」ですが、実際には、Math.random()よりもランダムクラスの方が望ましい場合があります。 Math.randomを使用すると、取得する数値は実際には完全にランダムではない場合があります。本「Effective Java Second Edition」は、アイテム#47でこれをカバーしています。
数百のテストにコピーして貼り付けたもう1つのソリューション:
<tr>
<td>store</td>
<td>javascript{var myDate = new Date(); myDate.getFullYear()+"-"+(myDate.getMonth()+1)+"-"+myDate.getDate()+"-"+myDate.getHours()+myDate.getMinutes()+myDate.getSeconds()+myDate.getMilliseconds();}</td>
<td>S_Unique</td>
</tr>
<tr>
<td>store</td>
<td>Selenium Test InternalRefID-${S_Unique}</td>
<td>UniqueInternalRefID</td>
</tr>
<tr>
<td>store</td>
<td>Selenium Test Title-${S_Unique}</td>
<td>UniqueTitle</td>
</tr>
<tr>
<td>store</td>
<td>SeleniumEmail-${G_Unique}@myURL.com</td>
<td>UniqueEmailAddress</td>
</tr>
各テストスイートは、一連の変数を設定することから始まります(大きなスイートの場合は、Set_Variables.htmlのような個別のファイルを使用します)。これらの変数をスイート全体で使用して、テストデータを設定、テスト、および削除できます。また、変数は乱数ではなく日付を使用するため、日付を共有するオブジェクトを探すことでテストスイートをデバッグできます。
Selenium RCは、次のことができるという点で、Selenium IDEよりもはるかに自由度が高くなります。
Selenium IDEを使用してフィールドにランダムな値を入力する方法を尋ねましたが、Selenium RCを使用してフィールドにランダムな値を生成して入力する方法について他の人から回答がありました。テスト段階(1)に分類されます:「特定のフィールドに任意の値を入力してください」。
Selenium RCを使用すると、フェーズ(2)および(3)を簡単に実行できます。Java、PHP、CSharp、Ruby、Perl、Pythonなどのサポートされている言語でプログラミングを行うことにより、任意の実行ステップでフィールドをテストできます。
フェーズ(2)および(3)を実行する手順は次のとおりです。
my other answer ファジングテスト、Seleniumおよびホワイト/ブラックボックステストについてを参照してください。