Заранее прошу прощения за то, если напишу что-то невнятное. Я новичок в автотестах. Сейчас пишу в ProtractorJS+Jasmine. Проблема в том, что для каждого прогона всех тестов должны браться новые тест-дата: Фамилия, имя, отчество, почта, пол, другие данные, общей численностью 30 шт. Вручную их все заносить как-бы не разумно. Подскажите, пожалуйста, какие использовать команды для этого? Требуется что бы тест каждый раз подгружал новый “пакет” данных из файла txt/json (или любой другой), при этом не использовал (или удалял) ранее использованный. По достижению конца в файле тест-дата, выводилось соответствующее сообщение. Используемые языки: JS, nodeJS.
P.S.: БД чистить не предоставляется возможным в виду специфичности продукта.
Хм, интересная штука! Благодарю! Только сомневаюсь что она мне поможет. В моем продукте на фронте есть проверки каждого поля на валидность (спец. символы, укр алфавит, формулы ИНН). Просто так от балды не прокатит.
Возможно я бы смирился с тем, что бы вручную менять, но вот особенно это бесит когда занимаюсь созданием тестов, когда каждый раз прогоняя и видя что не работает, приходится постоянно вставлять новые данные и следить за тем, что бы они н еповторялись.
Почему это не поможет, эта штука поддерживает создание своих собственных данных на основе их методов, называется mixin. Вы можете сами формировать данные по вашим правилам, рекомендую внимательнее ознакомится с этой библиотекой. вот как примерно выглядит:
var chance = require('chance').Chance();
// generate random user
chance.mixin({
'customer': function() {
return {
title: chance.pick(['Mr', 'Ms']),
first: chance.first(),
last: chance.last(),
name: function () {
return this.first + ' ' + this.last
},
email: chance.email(),
birthday: moment(chance.birthday()).format('DD.MM.YYYY'),
country: chance.pick([// your countries]),
inn: //your function-generator for inn,
};
}
});
// then use it in tests
describe('User', function () {
it('should register new user', function () {
var customer = chance.customer();
......
})
});
У меня еще была потребность запускать мои тракторные тесты многопоточно, потому я дополнительно перед тестами стартовал маленький nodejs сервер который по http отдавал юзера, и принимал назад когда он уже не нужен. Если у тебя тесты в один поток тебе это не нужно. Попробуй воспользоватся функциями beforeEach и afterEach, и доставать юзера перед тестами. Простейший пример, я не переусложнял, чисто чтобы описать суть -
Сам json файл может выглядеть как угодно, вот пример:
module.exports.config = {
// остальная конфигурация...
onPrepare: function () {
//читаем и парсим json файл
let users = require('./test.json').users
console.log(users)
beforeEach(()=> {
//перед каждым тестом вытаскиваем свежего юзера из списка
let user = users.pop()
console.log('Got user:', user)
browser.params.login = user.login;
browser.params.password = user.password;
})
}
}
Дальше в самом тесте все мега просто, когда вы делаете логин - берите параметры из browser.params:
describe('Suite name', ()=> {
it('Test name', ()=> {
new LoginPage().login(browser.params.login, browser.params.password)
})
it('Test name1', ()=> {
new LoginPage().login(browser.params.login, browser.params.password)
})
it('Test name2', ()=> {
new LoginPage().login(browser.params.login, browser.params.password)
})
})
Если хочется это использовать - обязательно нужно обрабатывать ситуацию когда .pop() уже выбрал всех юзеров, и если используется паралелизация - то это не сработает - каждый поток будет читать файл отдельно от остальных.
А почему не использовать var name = partOfNameFromJSON + Date.now()?
Можно пробегаться по JSON брать первое имя => добавлять дату => использовать в тесте => переходим ко второмуб снова берем, снова добавляем дату, снова юзаем в тестах. Т.к. дата в милисекундах каждый раз будет новое значение.
Это, если нам таки нужны хоть какие-то данные из json файла.
А если нет, тогда еще проще var name = ‘AutomationTestPersonName’ + Date.now();
Все зависит от того, какую задачу вы хотите решить с помощью json файла?