it-swarm.com.ru

Используя Селен IDE со случайными значениями

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

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

42
Toby Hede

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

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

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

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

48
Thilo

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

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

Gmail делает возможным, чтобы все, что использует псевдонимы, например [email protected], автоматически переходили на ваш адрес [email protected]

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

29
corbacho

Вы можете добавить пользователя 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>
21
RajendraChary

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

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

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

5
afternoon
<tr>
<td>store</td>
 <td>javascript{Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 8)}</td>
<td>myRandomString</td>
</tr>
2
Jonathan Conibeer

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

javascript{['brie','cheddar','swiss'][Math.floor(Math.random()*3)]}
2
TomG

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

1
bast

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

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

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

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

1
agileadam

Вот еще один вариант на примере 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>
0
lhoess

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

0
djangofan

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

<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
andrew lorien

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, если вы хотите выполнить phase (1)]
  • Теперь внутри вашего алгоритма фаззинга итерируйте сначала значения Rand_STEP, затем при каждой такой итерации повторяйте Rand_FIELD, а затем, наконец, повторяйте Rand_VALUE.

Смотрите мой другой ответ о тесте фаззинга, тестировании селена и белого/черного ящика

0
CuongHuyTo