48

是否可以使用 Firefox 插件创建 Selenium 测试,该插件使用随机生成的值来帮助进行回归测试?

完整的故事: 我想帮助我的客户进行验收测试,为他们提供一套测试,这些测试使用一些智能来为数据库创建随机(或至少是伪随机)值。目前我的 Selenium IDE 测试的问题之一是它们具有预定义的值——这使得某些类型的测试出现问题。

4

12 回答 12

48

首先,Selenium IDE 相当有限,您应该考虑切换到 Selenium RC,它可以由 Java 或 Perl 或 Ruby 或其他一些语言驱动。

仅使用 Selenium IDE,您可以嵌入 JavaScript 表达式来派生命令参数。您应该能够在文本字段中输入随机数,例如:

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

更新:您可以在名为“user-extensions.js”的文件中定义帮助函数。请参阅硒参考

于 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 中生成随机字母字符串的单行解决方案:

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

用于粘贴到 Selenium IDE 中。

于 2011-02-10T15:40:36.920 回答
2

用于从一小组备选方案中随机选择的单线:

javascript{['brie','cheddar','swiss'][Math.floor(Math.random()*3)]}
于 2011-03-31T13:49:33.880 回答
2
<tr>
<td>store</td>
 <td>javascript{Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 8)}</td>
<td>myRandomString</td>
</tr>
于 2015-04-22T19:45:48.083 回答
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

这是 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 回答
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
  • [最终,创建一个随机变量来控制输入某个字段的值,比如 RAND_VALUE,如果你想做阶段 (1)]
  • 现在,在你的模糊算法中,首先遍历 RAND_STEP 的值,然后在每次这样的迭代中,遍历 RAND_FIELD,最后遍历 RAND_VALUE。

请参阅我关于模糊测试、Selenium 和白/黑盒测试的其他答案

于 2012-05-18T11:16:07.263 回答
0

Math.random 可能“足够好”,但在实践中,Random 类通常比 Math.random() 更可取。使用 Math.random ,你得到的数字实际上可能不是完全随机的。“Effective Java Second Edition”一书在 Item #47 中对此进行了介绍。

于 2013-05-20T20:46:51.813 回答
0

另一种解决方案,我已将其复制并粘贴到数百个测试中:

<tr>
    <td>store</td>
    <td>javascript{var myDate = new Date(); myDate.getFullYear()+&quot;-&quot;+(myDate.getMonth()+1)+&quot;-&quot;+myDate.getDate()+&quot;-&quot;+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)。然后可以在整个套件中使用这些变量来设置、测试和删除测试数据。由于变量使用日期而不是随机数,您可以通过查找共享日期的对象来调试您的测试套件。

于 2016-12-07T05:34:05.827 回答