Как генерировать фейковые email-адреса для тестирования
Узнайте, как быстро создать реалистичные тестовые email-адреса для проверки форм и API без засорения реальной почты
При разработке и тестировании приложений постоянно нужны email-адреса: для регистрационных форм, рассылок, API-эндпоинтов. Использовать реальную почту — плохая идея: быстро захламится, а коллеги случайно получат тестовые письма. Генерация фейковых email-адресов решает проблему элегантно: данные выглядят правдоподобно, проходят валидацию, но не засоряют реальные ящики.
Зачем нужны фейковые email-адреса
Тестовые email-адреса используются в нескольких сценариях:
- Модульные и интеграционные тесты — нужны сотни уникальных адресов для проверки регистрации, восстановления пароля, подписок
- Наполнение базы данных — при разработке интерфейсов админки или дашборда удобно работать с реалистичными данными
- Демо-окружения — клиентам показываете прототип с правдоподобными пользователями
- Нагрузочное тестирование — генерируете тысячи адресов для имитации реальной нагрузки
Главное требование: адрес должен пройти валидацию формата (RFC 5322), но не принадлежать реальному человеку.
Структура валидного email-адреса
Email состоит из двух частей, разделённых @:
localpart@domain.com
Локальная часть может содержать:
- Латинские буквы, цифры, точки, дефисы, подчёркивания
- Максимум 64 символа
- Не должна начинаться или заканчиваться точкой
Доменная часть:
- Домен второго уровня и выше (example.com, test.co.uk)
- Только латиница, цифры, дефисы
- Длина до 253 символов
Простейший паттерн для генерации:
const generateEmail = () => {
const names = ['john', 'jane', 'alex', 'maria'];
const domains = ['example.com', 'test.org', 'demo.io'];
const name = names[Math.floor(Math.random() * names.length)];
const domain = domains[Math.floor(Math.random() * domains.length)];
const random = Math.floor(Math.random() * 10000);
return `${name}${random}@${domain}`;
};
console.log(generateEmail()); // maria7834@demo.io
Этого достаточно для базовых кейсов, но для серьёзного тестирования нужны более продвинутые варианты.
Техники генерации правдоподобных адресов
Комбинация имени и фамилии
Реалистичные адреса строятся из реальных имён. Заведите массивы популярных имён и фамилий:
const firstNames = ['james', 'mary', 'robert', 'patricia'];
const lastNames = ['smith', 'johnson', 'williams', 'brown'];
const generateRealisticEmail = () => {
const first = firstNames[Math.floor(Math.random() * firstNames.length)];
const last = lastNames[Math.floor(Math.random() * lastNames.length)];
const separator = ['.', '_', ''][Math.floor(Math.random() * 3)];
const domain = ['gmail.com', 'yahoo.com', 'outlook.com'][Math.floor(Math.random() * 3)];
return `${first}${separator}${last}@${domain}`;
};
console.log(generateRealisticEmail()); // james.smith@gmail.com
Добавление цифр и модификаторов
Для уникальности добавляйте годы рождения, случайные числа или модификаторы:
const addModifiers = (base) => {
const modifiers = [
() => `${base}${Math.floor(Math.random() * 100)}`,
() => `${base}.${Math.floor(1970 + Math.random() * 35)}`,
() => `${base}.dev`,
() => `test.${base}`
];
return modifiers[Math.floor(Math.random() * modifiers.length)]();
};
const email = addModifiers('john.doe'); // john.doe.1987 или test.john.doe
Использование тестовых доменов
Для разработки используйте зарезервированные домены из RFC 2606:
example.com,example.org,example.nettest.com,test.orginvalid,localhost
Эти домены гарантированно не используются в реальности. Либо создайте собственный домен вроде testapp.local.
Массовая генерация для автотестов
При написании автотестов часто нужны массивы уникальных адресов. Функция-генератор:
function* emailGenerator(count) {
const domains = ['example.com', 'test.org'];
for (let i = 0; i < count; i++) {
const timestamp = Date.now();
const random = Math.random().toString(36).substring(7);
const domain = domains[i % domains.length];
yield `user_${timestamp}_${random}@${domain}`;
}
}
// Использование
const emails = [...emailGenerator(100)];
console.log(emails[0]); // user_1704567890123_x7k2p9@example.com
Для тестов на уникальность добавьте проверку через Set:
const uniqueEmails = (count) => {
const set = new Set();
while (set.size < count) {
set.add(`user_${Date.now()}_${Math.random().toString(36).substring(2, 9)}@test.com`);
}
return Array.from(set);
};
Валидация сгенерированных адресов
Перед использованием проверьте адреса регулярным выражением:
const isValidEmail = (email) => {
const regex = /^[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
return regex.test(email);
};
const emails = uniqueEmails(10);
const valid = emails.filter(isValidEmail);
console.log(`Валидных: ${valid.length} из ${emails.length}`);
Для строгой проверки используйте библиотеки вроде validator.js:
import validator from 'validator';
const strictValidation = (email) => {
return validator.isEmail(email, {
allow_utf8_local_part: false,
require_tld: true
});
};
Интеграция в тестовые фикстуры
В популярных фреймворках генерацию встраивают в фикстуры. Пример для Pytest:
import pytest
import random
import string
@pytest.fixture
def fake_email():
def _generate():
username = ''.join(random.choices(string.ascii_lowercase, k=8))
domain = random.choice(['example.com', 'test.org'])
return f"{username}@{domain}"
return _generate
def test_registration(fake_email):
email = fake_email()
response = register_user(email)
assert response.status_code == 200
Для JavaScript/Jest:
const generateTestEmail = () => {
const id = Math.random().toString(36).substring(2, 11);
return `test_${id}@example.com`;
};
describe('User registration', () => {
it('accepts valid email', () => {
const email = generateTestEmail();
const result = validateRegistration(email);
expect(result.valid).toBe(true);
});
});
Готовые инструменты для генерации
Если не хотите писать генератор вручную, используйте готовые решения. Онлайн-генераторы создают массивы email-адресов за секунды — достаточно указать количество и формат.
Для более широких задач пригодятся инструменты вроде генератора случайных данных, который создаёт не только email, но и имена, телефоны, адреса. Если нужно сгенерировать уникальные идентификаторы для тестовых пользователей, попробуйте генератор UUID — он выдаёт гарантированно уникальные строки. А для создания безопасных паролей к тестовым аккаунтам подойдёт генератор паролей.
Комбинируя эти инструменты, вы быстро наполните тестовую базу правдоподобными данными без риска задеть реальных пользователей.