Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
Сайт для тестирования TestHub

Задача

Примечание: раньше тут были другие условия задачи. Их можно найти в предыдущих ревизиях этого задания по ссылке https://gist.github.com/codedokode/8733007/e8e73b0255b3d899cb4e17dc9446fe694a8f5f7c

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

  • Предлагаемые технологии: фреймворк (Symfony 2 (сложнее, но интереснее) или Yii2), MySQL, шаблонизатор Twig, ORM Doctrine
  • Время выполнения: все зависит от тебя, но я бы смотрел на 4-6 недель
  • Уровень: продвинутый новичок
  • Требуемые знания: PHP, ООП, HTML/CSS, SQL, основы JS

Для проверки, что сайт работает правильно, мы будем использовать автоматизированное тестирование (у меня есть урок на эту тему).

Порядок выполнения

Так как задача большая, то ты можешь захотеть делать ее по частям. Можно выбрать такой порядок:

  • создание и прохождение тестов без регистрации
  • покрыть это тестами
  • просмотр статистики и результатов
  • покрыть тестами
  • регистрация/логин
  • покрыть тестами
  • продвинутая статистика, экспорт/импорт
  • покрыть тестами

Описание сайта

Вот вайрфреймы для страниц: https://gomockingbird.com/mockingbird/#l0bk13j . Дизайна пока нет, есть только такие наброски, из которых видно какие страницы должны быть на сайте и что на них расположено. Далее я опишу их подробнее:

/ - Главная. Содержит информацию о сервисе, кнопки для входа/регистрации и список из нескольких самых популярных за последний месяц тестов. Для теста выводятся теги (темы), число прошедших и число пробовавших сдать тест.

/tests - Список тестов. Содержит список всех тестов на сайте, с постраничным отображением. Кликнув на тему, можно отобразить только тесты из этой темы (при этом она будет вписана в поле поиска). Есть поле поиска, в которое можно ввести тему или слово из названия теста, для отображения только тестов на эту тему или содержащих слово в названии (можно подумать над тем, чтобы искать не только в названии, но и в описании теста). Поле ввода поддерживает автодополнение названий тем.

/new - Создать тест. Начальная страница для создания теста (эта же страница используется для редактирования тестов). Мы не требуем регистрации для того, чтобы создавать тесты (но если человек, создавший тест анонимно, зарегистрируется, тест должен перенестись в его аккаунт). Для создания теста надо указать обязательное название, небязательные теги-темы (работает автодополнение названий тем), необязательное ограничение по времени. Можно добавить предисловие (с возможностью форматирования в wysiwyg редакторе).

Теги (темы) — можно указать любые, через запятую, при этом все введенные теги собираются в таблицу и используются для автодополнения. Регистр букв в теге не имеет значения, «физика» и «Физика» — один тег (возможно стоит их принудительно переводить в нижний регистр). Если теги различаются только знаками пунктуации, то же самое (теги могут содержать только знаки дефис, запятая, точка (не в конце названия)).

Ниже расположен редактор вопросов. Можно добавить любое число вопросов, каждый вопрос может быть олного из нескольких типов:

  • один ответ из списка
  • несколько вариантов из списка
  • ввод числа (с указанием допустимой погрешности)
  • ввод текста (можно указать несколько вариантов ответа, которые будут считаться правильными)

Для вопроса указывается число баллов за ответ на него, варианты ответа.

Вопросы можно переупорядочивать. Так как вопросы большие и таскать их неудобно, можно при попытке перетащить вопрос выводить слева уменьшенный список номеров, на который можно перетащить сам вопрос. Также. можно разрешить редактировать номер вопроса для этой цели.

Один из вопросов находится в редиме редактирования, другие вопросы просто выводятся (с указанием числа баллов и отмеченным правильным ответом). Клик по неактивному вопросу переводит его в режим редактирования.

Желательно проверять правильность заполнения полей до отправки формы на сервер, например, если не заполнено название, то клик по кнопке «Создать тест» должен прокручивать страницу к нему и выводить рядом сообщение о том, что это обязательное поле.

После нажатия кнопки «Создать тест», если все правильно, пользователь попадает на страницу публикации теста.

/publish/NNNстраница публикации теста. Здесь, если пользователь не зарегистрирован, мы рассказываем ему о преимуществах регистрации и предлагаем быструю регистрацию.

Также, предлагаем указать email для отправки уведомлений о прохождении теста. По идее, этот email надо бы подтверждать (мы не хотим рассылать письма на неподтвержденные адреса, чтобы не попасть в спамеры), но пока можно сделать без подтверждения. Если пользователь зарегистрирован, то тут выводится его email, и он может указать другой или очистить поле.

На этот email выслается напоминание со всей нужной информацией и ссылками после публикации теста, чтобы пользователь всегда мог иметь их под рукой.

Ниже выводится крупная заметная ссылка на прохождени теста, которую легко скопировать и опубликовать в соцсетях (для особо ленивых сделаны кнопки) или отправить по почте. При публикации ссылки в соцсети должно выводиться название теста, название сайта «Пройти тест «XXX» на сайте testhub», ссылка для перехода и логотип сайта. Если не боишься трудностей, можно также (через публикацию картинки) выводить число прошедших тест и средний балл.

Также, есть ссылка «просмотреть», по которой можно увидеть как тест будет выглядеть для ученика.

Еще ниже выводится ссылка просмотра результатов тестов (она высылается после публикации на почту, чтобы не забыть ее). Если пользователь зарегистрирован, то он всегда может увидеть результаты в своем аккаунте, а если нет то только имея ссылку.

Ниже находится ссылка «перейти к списку моих тестов». Она выводится для зарегистрированных пользователей.

/registerстраница регистрации. Почти на каждой странице есть ссылка на нее. При этом надо сохранять исходный URL, откуда пришел пользователь, и после регистрации, возвращать его на ту же страницу. Также, надо перенести в аккаунт все созданные им анонимно тесты и результаты тестов.

Для регистрации требуется Email (подтверждение не обязательно, но письмо для подтверждения высылается. Для неподтвержденного email могут не работать некоторые функции, например отправка уведомлений на почту), имя (которое отображается на сайте) и пароль (не разрешаем вводить слишком простые вроде 123456).

Также, пользователь может зарегистрироваться через соцсети (первый вход через соцсеть и есть регистрация). Если соцсеть не отдает email пользователя, то показываем окошко или страницу с предложением его ввести (можно отказаться). У одного пользователя может быть несколько аккаунтов соцсетей (а также вход через email + пароль), это надо предусмотреть в архитектуре БД, но делать склеивание аккаунтов пока не треуется (но можно и сделать если хочется).

Зарегистрировавшись, пользователь получает аккаунт, в котором собраны все созданные тесты, результаты их прохождения и пройденные пользователем тесты.

/login - страница входа на сайт. Ссылка «войти с паролем», которая есть почти на каждой странице, ведет сюда (как альтернатива, можно сделать вместо перехода на страницу открытие всплывающего окна, это будет неплохо). После логина пользователь перенаправляется на ту же страницу, откуда пришел.

Стоит предусмотреть защиту от перебора паролей ограничением попыток ввода пароля с одного IP в одну единицу времени.

Также, войти можно через соцсети, при этом первый вход по сути является регистрацией.

Если пользователь забыл пароль, он может ввести email и получить ссылку. Пользователь, у которого нет пароля и который вошел через соцсети, может таким способом задать пароль (если конечно он указал email при регистрации).

/test/NNNNвходная страница теста. На ней выводится название, описание теста, правила его сдачи и краткая статистика, а ниже находится кнопка «Начать тест». По нажатию на нее начинается тест и отсчет времени.

/test/NNN/question - страница вопроса теста. Показывается сколько осталось времени, текущий вопрос и дается возможность ответить на него. Можно возвращаться к предыдущим вопросам. Можно не отвечать на вопрос. Контроль времени должен вестись на сервере, чтобы его нельзя было обойти.

/test/NNN/resultстраница результатов теста. Показывает число набранных баллов. Если пользователь не зарегистрирован, то предлагается ввести имя, под которым он будет виден в таблице результатов у преподавателя. Также, тут находится возможность быстро загрегистрироваться.

Если преподаватель разрешил это, можно перейти на страницу просмотра списка неправильных и правильных ответов.

Личный кабинет

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

Результаты и списки отображаются в виде таблиц. Таблицы можно сортировать по доступным колонкам и фильтровать с помощью строки поиска.

Таблицу можно экспортировать (скачать) в форматах CSV, XLS, XML, JSON, TXT (просто текстовый список). При этом они будут отсортированы и отфильтрованы так же, как отсортирована таблица на экране (об этом должно выводиться предупреждение).

В меню справа цифры вроде (+2) показывают число новых (с момента последнего просмотра результатов) результатов тестов. Выводятся несколько тестов с наибольшим числом новых результатов.

Должна быть ссылка для выхода из личного кабинета.

/stat/result/NNNрезультаты сдачи теста. Выводится список учеников, сдавших тест, дата, число попыток, набранные баллы. По умолчанию сортируется по убыванию даты. Для каждого результата можно просмотреть подробности (список отвеченных/неотвеченных вопросов и потраченное время), аннулировать результаты, дать дополнительные попытки.

Результаты можно фильтровать по имени (выводятся все имена, содержащие введенную строку), числу баллов (выводятся все результаты с равным или выше указанного числа баллов или ниже, если введено число в форме < 200) или дате (при вводе конструкций вроде 2014-01-01, > 01.12.2014).

Надо подумать, как рассказать пользователю о возможностях фильтра. Можно показывать подсказку при установке курсора в поле, можно выводить кнопки «до даты», «после даты», вставляющие нужные конструкции в поле.

Таблицу можно сортировать по дате, имени, числу баллов, числу попыток.

/stat/passedсданные мной тесты. Выводится список сданных ранее тестов, по умолчанию сортируется по убыанию даты. Для каждого теста можно просмотреть подробности, если преподаватель это разрешил.

Фильтровать можно по названию, дате, числу баллов.

/stat/resultsсписок созданных мной тестов. Отображается список тестов и число новых непросмотренных результатов. По умолчанию список сортируется по числу новых результатов, а далее по дате последней сдачи теста.

Дополнительные задачи:

Импорт/экспорт

Cделать импорт тестов из популярных форматов Moodle XML и Moodle GIFT. Moodle — это популярная open source платформа для создания электронных курсов. Это позволит нам переманить преподавателей, которые уже сделали тесты в этой системе.

Ссылки:

Сделать импорт из WebCT: http://glow.williams.edu/help.php?file=formatwebct.html&module=quiz

Сделать экспорт тестов в форматах Moodle XML, GIFT, DOC, TXT. Последние 2 нужны на случай когда преподаватель хочет послать тест например на утверждение. В них должно быть название теста, описание, время на прохождение и макс. число баллов, вопросы, варианты ответов, прямоугольники для ввода/выбора ответа (в случае если файл распечатать).

Можно дополнительно добавить еще экспорт в PDF.

Печать

Печать теста. Преподаватель может захотеть распечатать тест для заполнения ручкой. Стоит сделать тест компактным (бумагу надо экономить). Вывести на странице необходимо название, опичание теста, время на прохождение, максю число баллов, вопросы, варианты, поля для заполнения.

Печать результатов теста (или любой другой таблицы из личного кабинета). Надо скрыть лишние элементы страницы, оставив только таблицу с данными. Постарайся сделать ее компактной, чтобы не тратить бумагу. При этом таблица дложна быть отсортирована и отфильтрована в соответствии с выбранными настройками (об этом должно быть выведено предупреждение).

Настройки профиля

Сделать возможность редактировать имя, email, менять пароль.

Улучшенные вопросы

Возможность оформлять текст вопроса в редакторе, добавлять картинки перетаскиванием, а также прикладывать аудио/видео.

Сделать поддержку MathML + редактор для вставки формул в вопросы и варианты ответов. Сделать поддержку какого-нибудь языка разметки для химических формул.

Адаптивная верстка

Сделать верстку для удобного просмотра сайта на маленьких (мобильных) экранах.

Достижения

Возможность после прохождения теста запостить результаты в соцсеть.

Подсказки по реализации

Все формы (а также ссылки вроде разлогинивания) должны быть защишены от CSRF токеном.

Старайся максимально использовать возможности фреймворка, а не писать велосипед. Например, формы, гриды, защиту от CSRF, модели, миграции БД.

На странице списка тестов можно использовать jQuery UI Autocomplete для автодополнения тем (а может быть и названий тестов?).

Для поиска тестов достаточно использовать SQL запрос вроде name LIKE '%квантовая%' AND name LIKE '%физика%', если тестов будет немного, если много (и тебе хочется сделать посложнее), то стоит сделать полнотекстовый поиск или подключить Sphinx.

Для реализации редактора вопросов можно попробовать обойтись HTML формой + дополнительными скриптами. Например, для перетаскивания вопросов попробовать jQuery UI Sortable или jQuery UI draggable. Сама информация в вопросах сохраняется в видимых или скрытых полях и отправляется на сервер как обычная форма. Проверку правильности надо сделать как на клиенте, яваскриптом, так и на сервере. Желательно, чтобы описания полей брались из одного источника, а не дублировались.

Реализовать переход вопроса из редактируемого в обычное состояние можно за счет средств CSS, стилизовать поля ввода и textarea в неактивном вопросе так, чтобы они выглядели как обычный текст.

У меня еще есть альтернативная идея, сделать редактор вопросов на явакрипте с использованием библиотеки вроде Knockout. Тогда список вопросов будет загружаться и сохраняться на сервер в виде JSON-массива, но я не уверен что это будет проще (но с другой стороны, научишься c knockout работать). Это потребует хороших знаний JS.

В базе данных логично сделать одну таблицу для тестов, одну для вопросов и может быть еще одну для вариантов ответов и связать их внешними ключами.

Поля ввода, которые позволяют вводить форматированный текст, надо реализовать на основе какого-нибудь (желательно нетяжелого) wysiwyg-редактора. Если редактор состоит из кучи мелких файлов, надо изучить докуменатцию и освоить автоматическую их сборку, иначе страница будет грузиться очень медленно. Естественно, HTML который вводится в это поле, может содержать что угодно, потому на сервере надо его очистить от опасных конструкций. Для этого можно использовать мощную библиотеку HTMLPurifier или встроенный в Yii (если он используется) HTML-фильтр.

Как реализовать перенос созданных анонимно тестов в аккаунт после регистрации? Очень просто, можно выдавать каждому гостю сайта уникальный id в куках. Как только он создает или проходит тест, мы создаем анонимного пользователя в таблице и привязываем к нему тест или результаты. Соответственно, когда он зарегистрируется, мы просто добавляем этому анонимному пользователю имя и возможность логиниться на сайт, а все тесты остаются в аккаунте. Таким образом нам удается с одной стороны отказаться от обязательной регистрации, с другой не терять созданные тесты.

Отдельная тема — регистрация. Вот какие особенности стоит учесть:

  • у пользователя может быть не указан email (если он вошел через соцсеть)
  • у пользователя может не быть пароля, при этом войти через форму логина невозможно
  • у пользователя может быть несколько аккаунтов соцсетей + вход через пароль (хотя возможности пока такой нет, но предусмотреть это стоит)
  • есть анонимные пользователи, которые не могут войти на сайт, но к которым привязываются тесты и результаты

Для реализации этого стоит сделать 2 таблицы: пользователи и внешние аккаунты.

Для реализации входа через соцсети надо иметь аккаунт и зарегистрировать там приложение. Если ты не хочешь их заводить, проще всего реализовывать вход через twitter — там вроде ничего кроме email не требуется, в facebook/vk придется подтвердить телефон.

Если соцсеть отдает больше данных, чем нам требуется, стоит сохранить их на будущее (вдруг завтра мы добавим аватарки?).

Не указывай токены и id приложений в коде или конфигах, которые ты выгружаешь в репозиторий.

Когда ты будешь реализовывать вход через внешние сети, постарайся сделать все в стиле ООП, например, HTTP-клиент сделать в виде отдельного объекта, а не встраивать в код, и писать так, чтобы без изменений систему входа можно было перенести на любой другой сайт. Тогда тестировать эту систему потом будет гораздо легче.

Многие сервисы сейчас используют протокол OAuth (или OAuth 2) для входа через них, но каждый немного по-своему. Это упрощает жизнь разработчикам. Если соцсеть предоставляет возможность получить email, не забудь его попросить.

Ссылки на описание API:

Также, раньше был еще протокол OpenID, который позволял пользователю хранить информацию о себе не в соцсетях, а на своем сервере и авторизовываться через id вроде user@server.example.com, но он как я понимаю, так и не взлетел, используется мало где, а люди предпочли сдать свои данные соцсетям.

Статьи:

Также, есть сервисы вроде ulogin, которые предосталвяют простой вход через соцсети добавлением скрипта на страницу. Не используй их. Во-первых, так ты ничему не научишься, во-вторых, они следят за твоими посетителями (даже если они не логинятся), и подгружают кучу сомнительных ифреймов в страницу (найди какой-нибудь сайт с такой системой и посмотри сам инспектором).

Для взаимодействия с API нужно отправлять HTTP-запросы. Используй какую-нибудь готовую библиотеку, например Guzzle сейча популярен.

На фейсбуке ты можешь для тестов входа через сайт создавать специальных фейковых пользователей — это удобно.

Для вывода таблиц с результатами в твоем фреймворке наверняка что-то есть. В Yii есть grid, в Symfony 2 есть какой-нибудь сторонний плагин.

Для работы с XML при экспорте/импорте стоит использовать DOM XML или SimpleXML. При экспорте давай нормальные имена файлам, например Основы физики.txt или Результаты теста Основы физики (c фильтром).xls, а не бессмысленный набор цифр. Сам подумай, удобно ли когда у тебя полная папка файлов типа test_sdas4d423asd.txt?

Для экспорта в XLS стоит использовать https://github.com/PHPOffice/PHPExcel (там еще есть библиотека для чтения/записи DOC https://github.com/PHPOffice/PHPWord ).

Для экспорта в PDF можно использовать либо wkhtmltopdf (он конвертирует HTML в PDF) либо DOMPDF: http://habrahabr.ru/post/190364/

Тестирование

Если ты не писал раньше тесты, у меня есть урок по ним и по используемым для этого инструментам: https://gist.github.com/codedokode/a455bde7d0748c0a351a .

Разумеется, такой сложный сайт надо покрыть тестами (иначе как проверить что все работает? Вручную прокликивать десятки кнопок и ссылок?). Чтобы помочь тебе, я составил примерный план тестирования. Он большой и сложный, но как иначе научиться тестировать? У тебя же есть голова, подумай как сделать это с минимумом усилий.

Юнит- и интеграционные тесты

  • Проверить что число баллов при сдаче теста считается правильно
  • Проверить что «самые популярные за месяц» тесты считаются правильно

Браузерные тесты

  • Создание теста (так как тут используется JS то некоторые тесты возможно надо писать c его поддержкой)
    • Проверить добавление одного нового вопроса
    • Проверить переключение типа вопроса
    • Проверить что при переключении типа вопроса варианты ответа не теряются
    • Проверить добавление/удаление/перемещение вариантов ответа
    • Попробовать неправильно заполнить свойства теста
    • Попробовать неправильно заполнить свойства вопроса
    • Проверить что удаление вопроса работает
    • Проверить что изменение порядка вопросов работает
    • Проверить работу кнопок «добавить предисловие», «убрать ограничение времени»
    • Проверить сохранение теста с вопросами всех возможных типов
    • Проверить сохранение тегов
    • Проверить автодополнение тегов
  • Редактирование теста
    • Проверить что можно открыть редактирование теста из БД
    • Проверить удаление/добавление/перемещение вопросов с сохранением
    • Проверить удаление/добавление/перемещение вариантов ответа с сохранением
    • Проверить изменение свойств вопроса с сохранением
    • Проверить изменение типа вопроса с сохранением
    • Проверить изменение свойств теста с сохранением
  • Публикация теста
    • Проверить для зарегистрированного пользователя подставляется его email и выводится ссылка «мои тесты», а для гостя нет
    • Проверить что введенный email (а также пустой email) сохраняется
    • Проверить что выводится рабочая ссылка на тест и просмотр резуьтатов
    • Проверить что работает ссылка на предпросмотр теста
    • Проверить что кнопки шаринга не вызывают JS-ошибок и вызывают появление окон или еще чего-нибудь
    • Проверить что работает кнопка быстрой регистрации
    • Проверить что преподаватель получает email уведомление со ссылками
  • Входная страница теста
    • Проверить что выводится название, описание, автор теста
    • Проверить что выводится верная статистика по тесту
    • Проверить кнопку «Начать тест»
  • Сдача теста
    • Проверить что вопросы показываются
    • Проверить что ответы сохраняются
    • Проверить что можно перемещаться вперед/назад не теряя введенных ответов
    • Проверить что время учитывается
    • Проверить что нет JS ошибок
  • Результат теста
    • Проверить что показывается число набранных баллов
    • Проверить что можно ввести и сохранить имя
    • Проверить что для авторизованного пользователя имя не спрашивается и нельзя сохранить даже прямой отправкой аякс-запроса
    • Проверить работу кнопки быстрой регистрации
    • Проверить что если разрешено, показана ссылка просмотра ошибок
    • Проверить что если запрещено, просмотреть ошибки в тесте нельзя
  • Главная
    • Проверить что выводится список популярных за последний месяц тестов
  • Тесты
    • Проверить что можно искать тесты по тегу
    • Проверить что можно искать тесты по части названия
    • Проверить постраничную навигацию в сочетании с поиском
  • Регистрация
    • Проверить что регистрация возможна
    • Проверить ввод неправильных данных в форму
    • Проверить что после регистрации пользователь залогинен
    • Проверить что после регистрации пользователь перенаправляется на исходную страницу
    • Проверить что тесты и результаты сдачи переносятся в аккаунт пользователя
    • Проверить что высылается письмо со ссылкой подтверждения email
    • Проверить что ссылка подтверждения работает
  • Логин
    • Проверить логин при вводе правильных данных
    • Проверить форму логина на неправильных данных
    • Проверить что после логина пользователь перенаправляется на исходную страницу
    • Проверить что кнопка вход через соцсети открывает нужное окно
    • Проверить вход через соцсети если возможно сделать это с заглушкой
    • Проверить если возможно что первый вход через соцсети работает как регистрация
    • Проверить если возможно что email спрашивается если соцсеть его не отдала
    • Проверить разлогинивание
  • Восстановление пароля
    • Проверить можно выслать письмо со ссылкой
    • Проверить ввод неправильного email
    • Проверить что ссылка восстановления пароля работает
    • Проверить что ссылка восстановления пароля работает ограниченное время
    • Проверить что ссылка восстановления пароля работает только один раз
  • Личный кабинет
    • Проверить что неавторизованный пользователь не может попасть в ЛК
    • Проверить что неавторизованный пользователь может смотреть результаты своего теста по ссылке
    • Проверить что выводится список сдавших тест
    • Проверить постраничную навигацию в сочетании с сортировкой и фильтром (что фильтр/сортировка не сбрасывается)
    • Проверить что сортируется список сдавших тест
    • Проверить что фильтруется список
    • Проверить что экспортируется список с учетом фильтра и сортировки
    • Проверить вывод дополнительной информации в сайдбаре
  • Smoke тесты
    • Обойти страницы и проверить отстутвие битых ссылок
    • Обойти страницы и проверить отсутствие JS ошибок
    • Обойти страницы и проверить отсутствие JS ошибок при нажатии любых кнопок, установки курсора в поле, ввода любых символов, отправке форм

Сайт использует внешние сервисы (соцсети). Нехорошо в тестах взаимодействовать с ними без надобности, надо подумать как заменить их (и отправляемые ими данные) заранее заготовленными заглушками.

Дизайн

Пока не сделан. Вот наброски:

Нагрузочное тестирование

Интересно изучить, как сделать, чтобы сайт мог выдержать большой поток посетителей? Тогда надо наполнить базу сущностями, и протестировать его с помощью Apache Benchmark или, что лучше, Siege. Возможно, где-то стоит запрос оптимизировать, где-то кеш добавить.

Заполнение базы

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

Я вижу примерно такой вариант:

yiic fill students:90 teachers:5 tests:7 questions:200 results:35

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

Источники данных для генератора:

UPD: есть библиотека faker https://github.com/fzaninotto/Faker которая все это умеет генерировать (в случае использования Doctrine — сразу заполнять сущности), так что списки ниже тебе наверно не понадобятся.

Имена:

Фамилии:

email — можно сгенерировать в fakenamegenerator или как-нибудь самому, из имен например.

Названия тестов: http://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B0%D0%BA%D0%B0%D0%B4%D0%B5%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D0%B4%D0%B8%D1%81%D1%86%D0%B8%D0%BF%D0%BB%D0%B8%D0%BD

Попробуй сделать списки (не знаю, в каком формате — можно txt файл с значениями на отдельных строках, или json) исходных данных и прикрутить генератор. Совсем сильно заморачиваться не надо, главное чтобы мы могли заплнить базу правдоподобными значениями.

Вот пример моего генератора случайных текстов: https://github.com/codedokode/board-test-scripts

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment