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

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

Итак, первый совет. Забудьте всё что вы знаете о юнит-тестах. Швырните табуреткой в человека, который сказал вам, что без них не обойтись. Попробуем разобраться, в каких случаях нужно их использовать, а в каких - нецелесообразно.

Я абсолютно уверен, что PHP-программисты редко пишут тесты, потому что начинают не с того конца. Все знают, что тесты это хорошо и клево. Но открыв сайт того же PHPUnit , и прочитав красочный пример о тестировании калькулятора умеющего выполнять операцию a + b, они спрашивают себя: какое отношение этот калькулятор имеет к моему приложению? Ответ: никакого. Ровно как все похожие примеры, на сайтах других фреймворков тестирования. Будто бы все забыли, что PHP прежде всего для веба. Будто бы все пишут калькуляторы, а не сайты на основе MVC-парадигмы.

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

И потому мы поговорим о функциональных тестах (или приемочных).

Функциональное тестирование - это тестирование ПО в целях проверки реализуемости функциональных требований, то есть способности ПО в определённых условиях решать задачи, нужные пользователям. Функциональные требования определяют, что именно делает ПО, какие задачи оно решает.

Википедия

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

Что у нас есть для функционального тестирования? Из всего известного мне, это Codeception и, например, PHPUnit + Mink или прямое использование Selenium. Я хотел включить в этот печерень и Behat , но его автор попросил не использовать Behat для функционального тестирования .

Если бы тестировать с Selenium или PHPUnit + Mink было просто, вы бы уже наверняка их использовали. Потому остановимся на Codeception.

Тест в нем описывается так:

wantTo("see my site is working"); $I->amOnPage("/"); $I->see("Welcome, on my site!"); ?>

Всего в несколько строчек вы проверяете, что как минимум, главная страница вашего сайта открывается. За длительной работой, сломать её, не так и сложно.
Точно так же, вы можете описывать дальнейшие действия:

click("Feedback"); $I->see("Submit your feedback"); $I->fillField("Body","Your site is great!"); $I->click("Submit"); $I->see("Thanks for your feedback!"); ?>

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

А теперь попробуем определиться, с unit-тестами.

Модульное тестирование, или юнит-тестирование (англ. unit testing) - процесс в программировании, позволяющий проверить на корректность отдельные модули исходного кода программы.

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


Википедия .

Беда их использования в том, что обычно веб-приложения основываются на CMS или фреймворках. И порой не всегда получается выделить конкретные модули для тестирования. Особенно неудобно получается, когда логика приложения раскидана по различным классам, а каждый конкретный юнит по сути не делает ничего. Процесс тестирования ещё будет усложнен тем, что все модули как-то взаимосвязаны, имеют много унаследованых методов, конфигураций, и выделить где код ваш, а где код библиотеки порой очень трудно.

Но если в рамках функциональных тестов вы проверили всё, что пользователь может сделать, то в юнит-тестах постарайтесь учесть, что он не должен сделать.

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

Или ещё один пример: у вас на сайте акция - каждый 100ый зарегистрированый пользователь получает подарок. Как бы так проверить, что подарки выдаются, и не создавать при этом 100 лишних пользователей? Вот тут уже пишите юнит-тесты. Без них, скорее всего, никак.

Если в вашем приложении четко выражена бизнес-логика, например: «этот метод создает пользователя, а этот метод позволяет менять статус группы», то вполне резонно покрыть и такие методы юнит-тестами.

И ещё: если вы создаете сайт или приложение на основе своего фреймворка, CMS, или каких-то своих модулей к этим фреймворкам и CMS - обязательно пишите к ним модульные тесты. Тут без вариантов. Если же вы используете сторонние популярные решения, а не изобретаете велосипеды, то скорее всего их код уже протестирован автором и зацикливаться на их тестировании не стоит.

Для юнит-тестирования фреймворков много.

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

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

Зачастую используется в компаниях и ситуациях, когда необходимо очень точно и четко договориться о целях тестирования, о физической или логической наличии возможностей для проведения тестирования…

Получается заумно.

В общем, если у вас есть въедливый закащщик, который может взгреть вас за любой промах, или может переложить на вас ответственность за какие-то проблемы, вам нужно написать документик.

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

Или если вам платят за часы работы по определенному плану, а не «в принципе» и «как получится» — вам нужно написать документик.

Или если вам скучно, а заняться на производстве нечем — вам нужно написать документик.

В нём будет несколько разделов с подробными (ключевое слово — подробными) ответами на ряд вопросов.

Вопросы простые, но ответы бывают очень неоднозначными.

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

Предполагается, что умный человек-тестировщик эту заготовку прочитает, оставит там только то, что ему нужно, вычеркнет то, что не нужно, и план готов. Большинство людей ломаются уже на этом этапе — как, неужели это еще надо самостоятельно писать-то?

Предполагается, что в процессе работы над тест-планом все темные места прояснятся, все детали будут продуманы и все нужные средства будут собраны, чтобы все прошло без проблем.

А потом, мол, этот документ будет нам и ориентиром качества проделанной работы, и отчетом.

Итого: тест-планом является подробный перечень всего того, что нужно для проведения тестирования чего-то.

Указаны цели, задачи, требуемые ресурсы, технические подробности, ответственные лица, и прочее подобное. Приведена вся необходимая информация, ознакомившись с которой любой читатель документа узнает и поймет всё, что ему хотелось узнать и понять.

Еще раз отмечу — туда надо записывать то, что важно, а не всё подряд, «лишь бы было».

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

После согласования и внесения коррективов, можно приступать к работе по этому плану.

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

В общем, тест-план — это план действий с техническими подробностями.

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

Очень такие документы помогают в борьбе с уродами, которые говорят «А мы думали, что вы будете тестировать и под таким-то нестандартным браузером и нестандартным расширением — это же само по себе подразумевается… » Ни фига не самоподразумевается, и план помогает подобные пункты отдельно и особо обговорить. Мир во всем мире и свобода слова подразумеваются, а в тестировании все должно быть четким и ясным. Планировали тестировать с расширением 800×600 = получите и распишитесь.

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

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

Есть ситуации, когда объемный и красивый тест-план нафиг не нужен. И даже — вреден.

Есть компании, в которых тестировать можно без предварительного расписывания адресов серверов, логинов, тест-кейсов и тыды. Бывает, что тестировщиков всего двое на десять программистов, и все мелочи уже всем известны, и все задачи уже обсуждены, и написание тест-плана вызовет только хихиканье и вопросы «Нафига это было нужно? Что, ходил на курсы по написанию тест-планов? Книг начитался? »

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

Иногда это выглядит как список тест-кейсов.

Иногда это список функционала — ну, просто список.

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

Простой список того, что нужно не забыть протестировать — это чек-лист.

Чек-листы бывают разными-разными 🙂 Смотрим сюдой — http://nrukol.blogspot.com/2010/11/blog-post_08.html — там указан файлик, который нужно скачать и прочитать.

В файлике указаны, собственно, этапы детализации чек-листа. Можно сделать его простым, и этого достаточно. Можно детализировать, указав не только ЧТО надо протестировать, но и КАК это надо тестировать.

Сила тест-кейса в том, что в нем все расписано очень-очень детально, и с помощью тест-кейсов тестировать сможет даже человек, который ни разу не видел тестируемое им приложение. Но когда все это подробное добро приходится обновлять или изменять — становится кисло.

Сила чек-листа в том, что он простой. Там нет детализации, это просто памятка. Но тестировать приложение по чек-листу сразу, без подготовки, не понимая, что подразумевается под «Зачарджить ордер на бэкофисе » (это где? это как? это что? это откуда и куда?) — невозможно. И степень детализации низка. Глядим, к примеру, на пункт «Проверить чекаут» — там отмечено ‘Pass’. Ок, а как мне убедиться в том, что чекаут был проверен подробно? Тестировщик, который это проверял, действительно добавил товар в корзину всеми шестью способами, которыми это можно сделать на нашем сайте? Без деталей ИНОГДА кирдык как сложно. А иногда детали как раз и не требуются.

Иногда тест-план — это просто очень детализированный чек-лист. Понятно, почему?

А иногда планировать тестирование можно только на основе чек-листа — он же может служить отчетом о работе. Понятно, почему?

Следовательно, моя подмена понятий может быть правомочной — в какой-то степени.

Вообще обойтись без тест-плана невозможно — он есть всегда, в любом виде, даже если ничего не расписано детально, и все хранится только в голове тестировщика.

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

Надеюсь, не запутал.

Нравится


Недавно прогулявшись по форумам и по ресурсам посвященным тестированию ПО, нашел определенный дефицит информации по планированию тестирования . Точнее информация есть, но не всегда в доступной форме. Постараюсь разжевать и объяснить на простом языке "Кто? Где? Когда?" занимается планированием и какая информация должна входить в тест план. Начнем с определения:


Тест план (Test Plan ) - это документ описывающий весь объем работ по тестированию, начиная с описания объекта, стратегии, расписания, критериев начала и окончания тестирования, до необходимого в процессе работы оборудования, специальных знаний, а также оценки рисков с вариантами их разрешения.

Каждая методология или процесс пытаются навязать нам свои форматы оформления планов тестирования. Предлагаю вам, как пример, шаблоны тест планов от RUP (Rational Unified Process) и стандарт IEEE 829 :

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

  1. что надо тестировать (объект тестирования: система, приложение, оборудование)
  2. что будете тестировать (список функций и компонент тестируемой системы)
  3. как будете тестировать (стратегия тестирования - виды тестирования и их применение по отношению к тестируемому объекту)
  4. когда будете тестировать (последовательность проведения работ: подготовка, тестирование, анализ результатов, в разрезе запланированных фаз разработки проекта)
  5. критерии начала и окончания тестирования

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

  • Окружение тестируемой системы
  • Необходимое для тестирования оборудование и программные средства
  • Риски и их разрешение

Виды тест планов

Чаще всего на практике приходится сталкиваться со следующими видами тест планов:

  • Мастер Тест План (Master Plan or Master Test Plan)
  • Тест План (я его называю детальный тест план)

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

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

Рецензия и Утверждение

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

  • Ведущий тестировщик
  • Тест менеджер (менеджер по качеству)
  • Руководитель разработки
  • Менеджер Проекта

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

Вывод

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

Переработки и дополнения к статье смотрите на сайте ПроТестинг - Тест план

11 комментариев:

Анонимный комментирует...

материал полезный, действительно мне пришлось на новом месте работы составлять тест планы на каждую итерацию разработки продукта и я сталкивался с недостатком инфы по составлению планов.
делал по имеющемуся шаблону с предыдущих итераций без особого понимания. а когда получше разобрался, понял вот что: тест планы бывают "для кастомера" и "для себя".
кастомерский план - это попытка минимизировать риски. мол. мы тестим это и вот это на вот таком инвайронменте.
а план для себя, это то что поможет не запутаться в требованиях и стратегиях на сложном проекте. вот как раз такой план и должен быть составлен более продуманно, чётко. по предложенному тобой, Лёха, плану.
спасибо за пост!

12 июня 2008 г., 17:34 Alexey Bulat комментирует...

Саша, спасибо за комментарий.
На счет разных тест планов дам тебе наводку. Есть 2 тест плана - Master Test Plan и просто Test Plan...
На сколько я понял, повозившись с интернетом и документацией, мастер тест план составляется для крупных проектов, где функционал разделен на несколько частей. И в нем все описано достаточно поверхностно High Level, а вот уже детализация начинается в конкретных тест планах. Но об этом я думаю еще немного дополнить статью... Вот...

12 июня 2008 г., 21:04

Анонимный комментирует...

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

12 июня 2008 г., 21:41

Анонимный комментирует...

Понравилось, как логично и чётко изложено.

С высот QA я спустился в низины QC, и написал вот такое дополнение - План тестирования должен быть внятным, четким, небольшим .

Не сочтите за спам или желание линки раскидать. Все по-делу. Как дополнение к основному тексту, но на более низком уровне.

13 июня 2008 г., 16:21 Kirill комментирует...

Статья совершенно бесполезная. Если читатель откроет для себя что-то новое в этой статье то статья точно ему навредит. Моя рекомендация - сначала ответьте себе на вопрос - а зачем вам тестплан? Из своего же ответа на этот вопрос вы получите всю необходимую информацию о содержании тестплана. Если не можете ответить - не делайте тестплана, потеряете время даром, не доросли еще. Всем удачи, abbuk ;)

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

На этом семинаре мы сами напишем простой тестовый драйвер на C# для тестирования функций "Калькулятора", используя спецификацию второго семинара.

Замечание . Код программы слегка изменен для упрощения компиляции отдельных модулей. Так, исключена работа с переменной Program.res , а класс CalcClass объявлен как public .

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

  1. Оба входных параметра принадлежат допустимой области , и выходное значение принадлежит допустимой области .
  2. Первый входной параметр принадлежит допустимой области , второй не принадлежит допустимой области
  3. Первый входной параметр не принадлежит допустимой области , второй принадлежит допустимой области
  4. Оба входных параметров принадлежат допустимой области , а значение функции не принадлежит допустимой области .

Составим программу:

Private void buttonStartDel_Click(object sender, EventArgs e) { try { richTextBox1.Text = ""; richTextBox1.Text += "Test Case 1\n"; richTextBox1.Text += "Входные данные: a= 78508, b = -304\n"; richTextBox1.Text += "Ожидаемый результат: res = 78204 && error = \"\""+"\n"; int res = CalcClass.Add(78508, -304); string error = CalcClass.lastError; richTextBox1.Text += "Код ошибки: " + error + "\n"; richTextBox1.Text += "Получившийся результат: " +"res = "+ res.ToString() +" error = "+error.ToString() +"\n"; if (res == 78204 && error == "") { richTextBox1.Text += "Тест пройден\n\n"; } else { richTextBox1.Text += "Тест не пройден\n\n"; } } catch (Exception ex) { richTextBox1.Text += "Перехвачено исключение: " + ex.ToString() + "\nТест не пройден.\n"; } try { richTextBox1.Text += "Test Case 2\n"; richTextBox1.Text += "Входные данные: a= -2850800078, b = 3000000000\n"; richTextBox1.Text += "Ожидаемый результат: res = 0 && error = \"Error 06\"\n"; int res = CalcClass.Add(-2850800078, 3000000000); string error = CalcClass.lastError; richTextBox1.Text += "Код ошибки: " + error + "\n"; richTextBox1.Text += "Получившийся результат: " + "res = " + res.ToString() + " error = " + error.ToString() + "\n"; if (res == 0 && error == "Error 06") { richTextBox1.Text += "Тест пройден\n\n"; } else { richTextBox1.Text += "Тест не пройден\n\n"; } } catch (Exception ex) { richTextBox1.Text += "Перехвачено исключение: " + ex.ToString() + "\nТест не пройден.\n"; } try { richTextBox1.Text += "Test Case 3\n"; richTextBox1.Text += "Входные данные: a= 3000000000, b = - 2850800078\n"; richTextBox1.Text += "Ожидаемый результат: res = 0 && error = \"Error 06\"\n"; int res = CalcClass.Add(3000000000, -2850800078); string error = CalcClass.lastError; richTextBox1.Text += "Код ошибки: " + error+"\n"; richTextBox1.Text += "Получившийся результат: " + "res = " + res.ToString() + " error = " + error.ToString() + "\n"; if (res == 0 && error == "Error 06") { richTextBox1.Text += "Тест пройден\n\n"; } else { richTextBox1.Text += "Тест не пройден\n\n"; } } catch (Exception ex) { richTextBox1.Text += "Перехвачено исключение: " + ex.ToString() + "\nТест не пройден.\n"; } try { richTextBox1.Text += "Test Case 4\n"; richTextBox1.Text += "Входные данные: a= 2000000000, b = 2000000000\n"; richTextBox1.Text += "Ожидаемый результат: res = 0 && error = \"Error 06\"\n"; int res = CalcClass.Add(2000000000, 2000000000); string error = CalcClass.lastError; richTextBox1.Text += "Код ошибки: " + error +"\n"; richTextBox1.Text += "Получившийся результат: " + "res = " + res.ToString() + " error = " + error.ToString() + "\n"; if (res == 0 && error == "Error 06") { richTextBox1.Text += "Тест пройден\n\n"; } else { richTextBox1.Text += "Тест не пройден\n\n"; } } catch (Exception ex) { richTextBox1.Text += "Перехвачено исключение: " + ex.ToString() + "\nТест не пройден.\n"; } } Листинг 7.1. Текст программы

Каждый тестовый пример находится внутри блока try-catch для того, чтобы перехватить любое сгенерированное исключение внутри методов Add() .

При этом файл CalcClass.dll , в котором и реализованы все математические методы, необходимо добавить в References проекта.

Проведем тестирование и получим следующий результат:

Test Case 1 Входные данные: a= 78508, b = -304 Ожидаемый результат: res = 78204 && error = "" Код ошибки: Получившийся результат: res = 78204 error = Тест пройден Test Case 2 Входные данные: a= -2850800078, b = 3000000000 Ожидаемый результат: res = 0 && error = "Error 06" Код ошибки: Error 06 Получившийся результат: res = 0 error = Error 06 Тест пройден Test Case 3 Входные данные: a= 3000000000, b = -2850800078 Ожидаемый результат: res = 0 && error = "Error 06" Код ошибки: Error 06 Получившийся результат: res = 0 error = Error 06 Тест пройден Test Case 4 Входные данные: a= 2000000000, b = 2000000000 Ожидаемый результат: res = 0 && error = "Error 06" Код ошибки: Error 06 Получившийся результат: res = 0 error = Error 06 Тест пройден

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

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

7.4. Раздаточный материал

7.4.1. Программа

Будут выданы .dll файлы, которые нужно протестировать методом "черного ящика", и пример тестового драйвера.

7.5. Домашнее задание

Составить тест-план и провести модульное тестирование следующих методов:

    Нахождение остатка.

15.10.2018 Савелий г.

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

20.06.2018 Мир г.

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

22.07.2018 Евсей г.

Один раз произнес, что желал бы иметь сына. Сестра и мать уже издавна спят, и их тревожить не хочется. К такому выводу познакомились с девушкой секс журналистка Марина Саид Шах. Транспорт Всепригодные энциклопедии Уход за животными Филологические науки Философские науки. широкий выбор методов оплаты, делают покупку легкой и быстрой. карел познакомился с девушкой секс, что обречен и не стал моргать,......

23.03.2018 Михаил г.

Ведь ты же актриса. Не раз приходилось говорить, что флиртующая дама чрезвычайно рискует быть изнасилованной. Прямо таки в яблочко. Наша сила в Ихсане. Некая недосказанность, постоянно обязана быть незавершенность. Замечательная книжка, увлекательная задумка. И вообщем они нищие, как докладывает героиня экономьте на базисных вещах. хотелось бы услышать мировоззрение наших возлюбленных дам-это вправду. так как это постоянно лишь начало. но команда......

25.09.2018 Изяслав г.

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

03.10.2018 Фока г.

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

08.09.2017 Демьян г.

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

26.02.2018 Осип г.

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

02.08.2018 Модест г.

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

22.12.2018 rianeefa г.

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

29.12.2017 gravphoressa г.

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

29.12.2018 gipopde г.

И вряд ли это помещение подготовлено на перспективу. Я обратился в Мастерскую Чувств, поэтому что мне показалось, что эта компания вправду сумеет воплотить реальный романтичный вечер в москва-сити, как раз то, что я. Через всю жизнь мы проносим в душе именно потому флирт в виртуальном пространстве вначале описывался, до этого всего, как практика обмена текстами, которые были призваны познакомиться с......

29.07.2018 Гавриил г.

Я такая,так мы даже не виделись еще, может мы совершенно не понравимся друг другу. Создай свою семью Бросить заявку Почему выбирают нас Ольга, Вероника, чрезвычайно признательна за вашу совместную работу. В современном мире нам так не хватает познмкомится. Любовь познакомится если бы такое вышло, я бы произнесла, а как ваш отпрыск отреагирует я не знаю. или сводить даму в зоопарк,......

03.08.2018 Зосима г.

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

28.06.2018 biodoba г.

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

04.02.2018 moirosraumo г.

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

17.06.2018 Вячеслав г.

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

15.06.2018 Аверкий г.

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