ttools
тестированиеfake-dataemailразработка

Как генерировать фейковые 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.net
  • test.com, test.org
  • invalid, 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 — он выдаёт гарантированно уникальные строки. А для создания безопасных паролей к тестовым аккаунтам подойдёт генератор паролей.

Комбинируя эти инструменты, вы быстро наполните тестовую базу правдоподобными данными без риска задеть реальных пользователей.

Инструменты по теме