Использование Selenium IDE со случайными значениями - PullRequest
44 голосов
/ 02 октября 2008

Можно ли создавать тесты Selenium с помощью плагина Firefox, который использует случайно сгенерированные значения для проведения регрессионных тестов?

Полная история: Я хотел бы помочь моим клиентам выполнить приемочное тестирование, предоставив им набор тестов, использующих некоторые смарты для создания случайных (или, по крайней мере, псевдослучайных) значений для базы данных. Одна из проблем с моими тестами Selenium IDE на данный момент заключается в том, что они имеют предопределенные значения, что делает некоторые типы тестирования проблематичными.

Ответы [ 12 ]

48 голосов
/ 02 октября 2008

Прежде всего, Selenium IDE довольно ограничен, вам следует подумать о переходе на Selenium RC, который может работать на Java, Perl, Ruby или некоторых других языках.

Используя только Selenium IDE, вы можете встраивать выражения JavaScript для получения параметров команды. Вы должны быть в состоянии ввести случайное число в текстовое поле, например:

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

Обновление: Вы можете определить вспомогательные функции в файле с именем "user-extensions.js". См. Селен Справочник .

29 голосов
/ 01 сентября 2010

(на основании ответа Тило) Вы можете смешивать литералы и случайные числа следующим образом:

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

Gmail делает возможным, чтобы все, что использует псевдонимы, например, joe+testing@gmail.com, попадало на ваш адрес joe@gmail.com

Умножение * 11111, чтобы дать вам больше случайных значений, чем от 1 до 9 (в примере Thilo)

21 голосов
/ 25 апреля 2010

Вы можете добавить пользователя exentions.js для получения случайных значений.

Скопируйте приведенный ниже код и сохраните его как расширение .js (randomgenerator.js) и добавьте его в расширения ядра Selenium (SeleniumIDE -> Параметры ---> вкладка "Общие")

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>
5 голосов
/ 10 февраля 2011

Вот решение в одну строку для генерации случайной строки букв в JS:

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

Полезно для вставки в Selenium IDE.

2 голосов
/ 22 апреля 2015
<tr>
<td>store</td>
 <td>javascript{Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 8)}</td>
<td>myRandomString</td>
</tr>
2 голосов
/ 31 марта 2011

Однострочник для случайного выбора из небольшого набора альтернатив:

javascript{['brie','cheddar','swiss'][Math.floor(Math.random()*3)]}
1 голос
/ 02 июня 2012

Понимая пост Раджендрахари выше, я потратил некоторое время на написание нового расширения Selenium IDE.

Мое расширение позволит пользователю заполнить переменную текстом lorem ipsum. Есть несколько настраиваемых параметров, и это превращается в симпатичную небольшую команду. Вы можете сделать что-то вроде «5 words | wordcaps | nomarks», чтобы сгенерировать 5 слов lorem ipsum с прописной буквы без знаков препинания.

Я подробно объяснил установку и использование, а также предоставил полную кодовую базу здесь

Если вы посмотрите на код, вы получите представление о том, как создать аналогичную функциональность.

1 голос
/ 11 апреля 2011

Я немного улучшил функцию 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;} }

0 голосов
/ 07 декабря 2016

Еще одно решение, которое я скопировал и вставил в сотни тестов:

<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). Эти переменные могут затем использоваться в вашем комплекте для установки, тестирования и удаления тестовых данных. И поскольку переменные используют дату, а не случайное число, вы можете отлаживать свой набор тестов, ища объекты, которые имеют общую дату.

0 голосов
/ 21 мая 2013

Math.random может быть «достаточно хорошим», но на практике Случайный класс часто предпочтительнее Math.random (). При использовании Math.random числа, которые вы получаете, могут на самом деле не быть полностью случайными. Книга «Эффективное Java, второе издание» охватывает это в пункте № 47.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...