tag:blogger.com,1999:blog-39287966764623034382024-03-21T21:13:12.616+03:00Блог KazanQACommКазанское сообщество тестировщиковalexey.chumaginhttp://www.blogger.com/profile/01857219456489660665noreply@blogger.comBlogger136125tag:blogger.com,1999:blog-3928796676462303438.post-38954656407861510142017-09-15T18:06:00.000+03:002017-09-15T18:06:48.209+03:00КоТэ - конференция тестировщиков<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.8px;">О конференции</span><br style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.8px;" /><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.8px;">Тестирование - быстроразвивающаяся область, в которой просто невозможно стоять на месте. То, что всего пару лет назад казалось нормой - уже устарело. То, что является нормой сейчас, пару лет назад ещё просто не существовало!</span><br style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.8px;" /><br style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.8px;" /><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.8px;">Именно поэтому нам, тестировщикам, так важно непрерывно развиваться, внедрять новые техники и подглядывать к коллегам: кто что внедрил? Что у них из этого получилось? Какие из решений я могу привнести в свою ежедневную практику?</span><br style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.8px;" /><br style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.8px;" /><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.8px;">Для обмена опытом, практическими решениями и наработками мы подготовили КоТэ - Онлайн Конференцию Тэстировщиков. Вот только некоторые из причин обязательно поучаствовать в главном онлайн-событии этой осени:</span><br style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.8px;" /><br style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.8px;" /><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.8px;">Короткие доклады по существу. Никакой воды - только практика и работающие решения.</span><br style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.8px;" /><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.8px;">Мастер-классы с заданиями. На них вы сможете заранее ознакомиться с материалами, выполнить практические работы и получить разбор решений уже во время конференции.</span><br style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.8px;" /><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.8px;">Участие из любого места. Вы можете прослушать докладчиков из Москвы, Санкт-Петербурга и Иркутска, не выходя из своего любимого офиса. Или, не вставая с дивана</span><br style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.8px;" /><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.8px;">Конкурсы с призами. Мы подготовили конкурсы для участников конференции как до начала трансляции, так и в каждый день конференции.</span><br style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.8px;" /><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.8px;">Готовы быть в курсе новинок отрасли и познакомиться с самыми активными её участниками? Регистрируйтесь!</span><br style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.8px;" /><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.8px;">Свежие новости</span><br style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.8px;" /><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.8px;">02.07.2017</span><br style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.8px;" /><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.8px;">Определены цены для регистрации на конференцию</span><br style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.8px;" /><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.8px;">Подробнее со стоимостью вы можете ознакомиться в разделе "Условия участия"</span><br style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.8px;" /><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.8px;">22.06.2017</span><br style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.8px;" /><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.8px;">Мы сформировали программу конференции!</span><br style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.8px;" /><span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 12.8px;">Докладчики доделывают аннотации и описания, но мы уже точно знаем, что будет за перечень докладов!</span></div>
alexey.chumaginhttp://www.blogger.com/profile/01857219456489660665noreply@blogger.com1tag:blogger.com,1999:blog-3928796676462303438.post-67025008807121972082015-12-08T14:47:00.000+03:002015-12-08T14:47:29.697+03:00Встреча тестировщиков в Казани<div dir="ltr" style="text-align: left;" trbidi="on">
Дорогие друзья, после перерыва мы организуем встречу Казанского сообщества тестировщиков.<br />
<br />
Встреча состоится <b>15 декабря в 19:30</b> по адресу: <b>Петербургская дом 50, корпус 5</b>, Бизнес-парк "Идея", 4 этаж, офис SmartHead<br />
<br />
на встрече будет два доклада<br />
<br />
<a name='more'></a><br />
1. Введение в управление рисками и зачем это надо "неменеджерам". Игорь Зильберг.<br />
<br />
2. Автоматизация тестирования верстки методом сравнения с эталоном. Эмиль Хуснетдинов.<br />
<br />
<br />
Все вопросы можно задать по номеру 89172855865 (Эмиль)<br />
Ждем встречи с вами.</div>
alexey.chumaginhttp://www.blogger.com/profile/01857219456489660665noreply@blogger.com1tag:blogger.com,1999:blog-3928796676462303438.post-88936213430085559272013-12-18T22:55:00.000+04:002013-12-19T13:11:09.343+04:00Screenshot-based тестинг. Пример кода.<div dir="ltr" style="text-align: left;" trbidi="on">
Работа со скриншотами в тестировании (Screenshot-based ) набирает популярность в последнее время. Появилось несколько статей с описанием принципов работы. В одном из проектов мы тоже использовали работу с картинками.<br />
<br />
<br />
<a name='more'></a>Главная идея такая.<br />
Есть готовая картинка, которую надо найти и узнать ее координаты. Мы снимаем скриншот вебдрайвером и ищем двумя итерациями. Первая итерация проверят сходство по пяти точкам, и если сходство найдено, то проверяются все точки в заданном промежутке (который равен размеру искомому фрагменту).<br />
<br />
Полный листинг кода можно посмотреть на <a href="https://github.com/a-chumagin/ChronoZoom/blob/master/Test/chronozoom20.test/ImageSearchEngine/ImageCoordinateFinder.cs" target="_blank">гитхаб</a><br />
<br />
Так же рекомендую попробовать фремворк AForge (он умеет искать кртинки по неполному сходству т.е. по "похожести").<br />
<br />
<br />
<br /></div>
alexey.chumaginhttp://www.blogger.com/profile/01857219456489660665noreply@blogger.com0tag:blogger.com,1999:blog-3928796676462303438.post-47200090285657539612013-12-16T17:30:00.000+04:002013-12-16T17:30:00.841+04:00С Понедельником!<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjufWABTBTcj8xOs6JPH6ff8bb4nxxzrBAkzD6khPKQmcNMZbDS3WErQVped0zlN2MqtSUdX_-hWKoxx5qlF3n01T4BhHKvQ3YmZ_4X8fBQPUUpANurhx_JNVqnwelQWuHG3XmzLRLhQs4/s1600/Presentation1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="426" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjufWABTBTcj8xOs6JPH6ff8bb4nxxzrBAkzD6khPKQmcNMZbDS3WErQVped0zlN2MqtSUdX_-hWKoxx5qlF3n01T4BhHKvQ3YmZ_4X8fBQPUUpANurhx_JNVqnwelQWuHG3XmzLRLhQs4/s640/Presentation1.jpg" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br /></div>
alexey.chumaginhttp://www.blogger.com/profile/01857219456489660665noreply@blogger.com1tag:blogger.com,1999:blog-3928796676462303438.post-45752208542746532082013-12-10T22:36:00.000+04:002013-12-10T22:36:36.758+04:00Видео с тестовой среды 2013<div dir="ltr" style="text-align: left;" trbidi="on">
Всем привет.<br />
<br />
Те кто не смог посетить данное событие, могут насладиться <a href="http://video.yandex.ru/users/ya-events/collection/132/" target="_blank">видео</a>, за что Яндексу большое спасибо.<br />
<br />
<br /></div>
alexey.chumaginhttp://www.blogger.com/profile/01857219456489660665noreply@blogger.com0tag:blogger.com,1999:blog-3928796676462303438.post-52029670560440288882013-11-30T00:20:00.000+04:002013-11-30T00:20:39.875+04:00Многослойное тестирование<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr">
Многие из нас слышали про <a href="http://jamescrisp.org/2011/05/30/automated-testing-and-the-test-pyramid/" target="_blank">пирамиду автоматического тестирования</a>, я её тоже видел и задался себе вопросом, а что же должно про проверяться на каждом уровне?</div>
<div dir="ltr">
</div>
<a name='more'></a><br />
<b>1. Уровень юнит тестов:</b><br />
<br />
<div>
Юнит тесты можно писать для клиентской(javascript) и серверной части.</div>
<div>
Я рекомендую проверять на этом уровне всю валидацию данных. Например,есть у вас метод, который проверяет валидность почтового адреса при создании пользователя, создайте для него юнит тест (или допишите существующий) и проверьте, что он правильно валидирует. Используйте фремворк Jasmine для тестирования логики клиента и любой из unit для тестирования кода на сервере.</div>
<div dir="ltr">
<br /></div>
<div dir="ltr">
<b>2. Второй уровень это уровень апи или уровень бизнес логики.</b><br />
<b><br /></b></div>
<div dir="ltr">
<div>
Большинство веб приложений не имеют логики на клиенте, они просто отсылают данные на сервер и получают от него ответ.</div>
<div>
Например, на сайте есть два поля и кнопка submit, нажатие на которую выводит сумму двух чисел. Причем числа просто отсылаются на сервер, а в ответ приходит или сумма или ошибка. Эту логику лучше тестировать без UI. Отсылаем запрос сразу к серверу, получаем ответ и сравниваем его с ожидаемым. Так же проверяем, что товар реально списался при покупке, что вернулась ошибка 400, если какое то поле не валидно.</div>
</div>
<div dir="ltr">
<br /></div>
<div dir="ltr">
<b>3. Слой UI. Самый немногочисленные тесты</b><br />
<b><br /></b>
Тут проверяется только взаимодействие с UI: работа контролов, появление попапов, доступность элементов. Следут проверить появление ошибок на UI при успешном ответе от сервера. Проверить workflow пользователя. Что после нажатия на кнопку появилось окно, то что кнопка реально нажимается.<br />
<br />
Эффективных вам тестов</div>
</div>
alexey.chumaginhttp://www.blogger.com/profile/01857219456489660665noreply@blogger.com0tag:blogger.com,1999:blog-3928796676462303438.post-87073744578698028202013-11-29T11:28:00.000+04:002013-11-29T11:28:27.507+04:00Встреча тестировщиков<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Times New Roman'; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Всем привет!</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Times New Roman'; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Times New Roman'; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">6 декабря 2013 года в Казани пройдет 3-я Международная конференция в области управления проектами «Software Project Management Conference». Участниками в том числе будут тестировщики из Казани и Санкт-Петербурга. Поэтому мы приглашаем вас на 3-е совместные посиделки с SPB SQA Group (в лице Кати Кирилловой). Поговорим о менеджменте, об организации событий и людей и обо всём, о чём захотят участники.</span></div>
<b id="docs-internal-guid-3621711c-a2c1-8ca4-11d5-44f7d655b9a0" style="font-weight: normal;"><br /><span style="background-color: transparent; color: black; font-family: 'Times New Roman'; font-size: 16px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Times New Roman'; font-size: 16px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Когда: 07.12.2013 (cуббота)</span><span style="background-color: transparent; color: black; font-family: 'Times New Roman'; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> с </span><span style="background-color: transparent; color: black; font-family: 'Times New Roman'; font-size: 16px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">12-00 </span><span style="background-color: transparent; color: black; font-family: 'Times New Roman'; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">и до момента пока все темы не обсудим.</span></div>
<b style="font-weight: normal;"><br /><span style="background-color: transparent; color: black; font-family: 'Times New Roman'; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Times New Roman'; font-size: 16px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Адрес</span><span style="background-color: transparent; color: black; font-family: 'Times New Roman'; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">:</span><a href="http://goo.gl/maps/8azMq" style="text-decoration: none;"><span style="background-color: transparent; color: black; font-family: 'Times New Roman'; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> </span><span style="background-color: transparent; color: #1155cc; font-family: 'Times New Roman'; font-size: 16px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;">Университетская, 14</span></a><span style="background-color: transparent; color: black; font-family: 'Times New Roman'; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> (здание кафе Горожанин), вход со двора, единственное крыльцо с табличкой "Офисный центр", на самый верх 4 этаж.</span></div>
<b style="font-weight: normal;"><br /><span style="background-color: transparent; color: black; font-family: 'Times New Roman'; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span></b>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: 'Times New Roman'; font-size: 16px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Время начала: С 11-45 происходит сбор участников. Само обсуждение начинается примерно в 12-10-12-15, как разговоримся. Это не формальное мероприятие, а дружеская беседа, поэтому можно прийти/уйти в удобное для вас время.</span></div>
<br /><span style="font-family: 'Times New Roman'; font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;"></span><span style="font-family: 'Times New Roman'; font-size: 16px; font-style: italic; vertical-align: baseline; white-space: pre-wrap;">Стоимость: Участие условно-бесплатное. Надо оплатить время пребывания в Циферблате — 2р/минута первый час, 1р/мин следующие часы, т.е. за 2ч надо будет заплатить 180р. Кроме нахождении в пространстве, можно пить чай/кофе и есть печенки в любых количествах:) При желании можно принести еду с собой.</span></div>
alexey.chumaginhttp://www.blogger.com/profile/01857219456489660665noreply@blogger.com0tag:blogger.com,1999:blog-3928796676462303438.post-5751556208180874212013-11-26T21:11:00.000+04:002013-11-26T21:11:41.459+04:00Тестировщик догоняющий или встречающий<div dir="ltr" style="text-align: left;" trbidi="on">
Сегодня пришла мысль, что часто в тестировании приходится догонять разработку, то требования поменяются, а тебя в известность не поставят, то стабильный билд сломается.<br />
<br />
Истина в том, что тестировщик должен не догонять изменения, а встречать их. Так жить легче, вспомните хотя бы игру в футбол. Мяч проще встретить чем догнать.<br />
<br />
И если вы догоняете, то значит, что то пошло нет так и самое время улучшить процесс.<br />
<br />
Поэтому нужно прикладывать усилия, чтобы быть впереди. (вспоминаются слова из Алиса в стране чудес). Конечно, это требует больше усилий, но оно того стоит.<br />
<br />
Тестировщик обязан думать, что будет через 3-4 шага и пытаться оказаться там быстрее разработки. Например, заводя баг, задумайтесь, как вы будете его проверять, напишите автотесты, уточните требования.<br />
<br />
Создавайте тесты перед новой функциональностью, а не после нее. Держите руку на пульсе проекта, что поменяется, когда и как.<br />
<br />
Всегда имейте план Б.<br />
<br />
Ну и боритесь с рутиной!<br />
<br /></div>
alexey.chumaginhttp://www.blogger.com/profile/01857219456489660665noreply@blogger.com8tag:blogger.com,1999:blog-3928796676462303438.post-19438992694795330492013-11-07T09:57:00.000+04:002013-11-07T09:57:30.879+04:00Группа для тестировщиков - Alliance Quality Assurance<div dir="ltr" style="text-align: left;" trbidi="on">
<a href="https://pp.vk.me/c616027/v616027502/d7b/4jmdghF9ChA.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://pp.vk.me/c616027/v616027502/d7b/4jmdghF9ChA.jpg" /></a><br />
<br />
Не так давно мои друзья из Нижнего Н<br />
<br />
овгорода создали виртуальный клуб для тестировщиков <a href="https://vk.com/qa_alliance" target="_blank">"Alliance Quality Assurance"</a><br />
<br />
Вот что они сами пишут про свой проект:<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<a name='more'></a><br /><br />
<br />
"Добро пожаловать в "Alliance Quality Assurance". Цель данного проекта- объединение групп, связанных с тестированием и обеспечением качества ПО. Все участники альянса отображаются в меню группы/групп. В Альянс может вступить любая IT группа, связанная с тестирование (даже косвенно), в Альянсе не приветствуются публикации, которые направлены на коммерцию и распространение знаний за деньги."<br />
<br />
Присоединяйтесь, общайтесь, наслаждайтесь!</div>
alexey.chumaginhttp://www.blogger.com/profile/01857219456489660665noreply@blogger.com0tag:blogger.com,1999:blog-3928796676462303438.post-52282323923081481142013-10-09T21:57:00.000+04:002013-10-09T21:57:50.779+04:00Webdriver 2.35 не дружит с Opera<div dir="ltr" style="text-align: left;" trbidi="on">
Боян, но на форумах и в чатах постоянно спрашивают, почему вебрайвер 2.35 не запускает оперу.<br />
<br />
Ответ: в версии 2.35 включена неправильная версия OperaDriver, несовместимая.<br />
<br />
Вот ссылка на ошибку в багтрекере <a href="https://code.google.com/p/selenium/issues/detail?id=6094">https://code.google.com/p/selenium/issues/detail?id=6094</a></div>
alexey.chumaginhttp://www.blogger.com/profile/01857219456489660665noreply@blogger.com0tag:blogger.com,1999:blog-3928796676462303438.post-58529669274046817092013-10-07T14:32:00.000+04:002013-10-07T14:32:13.886+04:00Закладки: Chromedriver downloads<div dir="ltr" style="text-align: left;" trbidi="on">
Чтобы не потерялась.<br />
<br />
Ссылка для скачивания <a href="http://chromedriver.storage.googleapis.com/index.html" target="_blank">chromedriver </a><br />
<br />
<br /></div>
alexey.chumaginhttp://www.blogger.com/profile/01857219456489660665noreply@blogger.com0tag:blogger.com,1999:blog-3928796676462303438.post-46870586028985936512013-10-01T12:34:00.000+04:002013-10-01T12:34:07.312+04:00Получение статуса issue с GitHub<div dir="ltr" style="text-align: left;" trbidi="on">
Продолжая тему про обходные пути в автоматизации начатую <a href="http://blog.zhariy.com/" target="_blank">Дмитрием Жарий</a> (Дима, не знаю как склоняется твоя замечательная фамилия), которую он изложил в своем <a href="http://software-testing.ru/library/testing/general-testing/1611-2012-04-02-07-52-31" target="_blank">докладе</a> и <a href="http://positiveflower.blogspot.ru/" target="_blank">Лены Фалилеевой</a>, которую она описала в свой <a href="http://positiveflower.blogspot.ru/2013/08/tfs.html" target="_blank">статье</a>, выкладываю свое решение "Обходного пути"<br />
<br />
<br />
<a name='more'></a>Наш проект находится на гидхабе, а статусы багов мы помечаем ярлыками (label). Получается, что надо определить есть у ошибки статус "resolved" или нет.<br />
<br />
<br />
У GitHub есть прекрасный API, который прекрасно <a href="http://developer.github.com/v3/issues/" target="_blank">описан </a><br />
<br />
Оправляет GET запрос вида <span style="background-color: #fafafb; color: #393939; font-family: Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; font-size: 12px;">/repos/:owner/:repo/issues/:number </span>получаем полную информацию об ошибке.<br />
<br />
Алгоритм такой:<br />
<br />
1. Посылаем запрос на сервер<br />
2. Получаем ответ и проверяем наличие ярлыка "resolved"<br />
3. Используем результат из п. 2 в тестах.<br />
<br />
Ну и собственно сам код на <a href="https://github.com/a-chumagin/ChronoZoom/blob/master/Test/chronozoom20.test/GitHubIssueWatcher/IssueStatus.cs" target="_blank">GitHub</a><br />
<br />
<br />
<br />
<br /></div>
alexey.chumaginhttp://www.blogger.com/profile/01857219456489660665noreply@blogger.com0tag:blogger.com,1999:blog-3928796676462303438.post-39901161471654727872013-09-13T11:07:00.002+04:002013-09-13T11:07:49.087+04:00Тестирование производительности с помощью Visual Studio Web Performance, часть 6<h2 class="tr_bq" style="text-align: center;">
<b>Test Results</b></h2>
<a href="http://ap-test-team.blogspot.ru/2013/09/visual-studio-web-performance-1.html" target="_blank">В самом начале</a> я говорил, что Web Performance является инструментом с дружественным интерфейсом и вполне возможно разобраться в нем, не пользуясь мануалами, в чем вы, я надеюсь, и убедились при прочтении этого цикла. Тест отчеты не являются исключением и все результаты представляются в удобном виде, будь то графики или таблицы.<br />
<br />
<a name='more'></a><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjm5Dkru8wIQsL2BfLKr5nnYiN3f28UiVeYYpecVMQAikt-1YqkKyTJtTNBbOed_83Ylk6bZEGoOPIij9zMHsqXdYP-9IC2gIhGowb09NwCJ_1xOe24oFy32nk50Rl1ivFIrTGoGBTD1oBB/s1600/2013-09-02_1638_001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="356" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjm5Dkru8wIQsL2BfLKr5nnYiN3f28UiVeYYpecVMQAikt-1YqkKyTJtTNBbOed_83Ylk6bZEGoOPIij9zMHsqXdYP-9IC2gIhGowb09NwCJ_1xOe24oFy32nk50Rl1ivFIrTGoGBTD1oBB/s640/2013-09-02_1638_001.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjf_MH_JflHj_N9gZsXx5Ks5R0bLF7uCRTTgS2bPSkZ-XZXT49J4Fndl1fTlFQDwikhumyMYHjzMA8kvEg_dn56BhS0HDXeBU1s5B67Sobq5RTj2jkRIvD2dxfmsyEFlzyl8ArCYa1AlyXa/s1600/2013-09-02_1638.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="356" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjf_MH_JflHj_N9gZsXx5Ks5R0bLF7uCRTTgS2bPSkZ-XZXT49J4Fndl1fTlFQDwikhumyMYHjzMA8kvEg_dn56BhS0HDXeBU1s5B67Sobq5RTj2jkRIvD2dxfmsyEFlzyl8ArCYa1AlyXa/s640/2013-09-02_1638.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOaCQN7D_dMbNV7ibniQCAKjuc3ZIkmOampitbaESi_391uhzQiVFmIAvYh4vO5Ec8KJpEtpdgp9gNZd5fR_Qtj0ePzqSg_0W-jis1Mjy5uHJaT0i6JOmVisOiYQkeTBMYZc5NFmWVoCNX/s1600/2013-09-02_1640.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="358" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOaCQN7D_dMbNV7ibniQCAKjuc3ZIkmOampitbaESi_391uhzQiVFmIAvYh4vO5Ec8KJpEtpdgp9gNZd5fR_Qtj0ePzqSg_0W-jis1Mjy5uHJaT0i6JOmVisOiYQkeTBMYZc5NFmWVoCNX/s640/2013-09-02_1640.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIaxzGPCFRH3Iqu2JVHVfK7FMNzVOjrxc67m6iKpK1UmNL1Z8uk0tFxe3PaJe_HxukmgK4KxS60eje9ZTkHaln9OKsoltQ64aA56z0sCyvJa2g2jeFCeuiUW7kvG04e1yG4jzf2zI-NuGu/s1600/2013-09-02_1641.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="358" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIaxzGPCFRH3Iqu2JVHVfK7FMNzVOjrxc67m6iKpK1UmNL1Z8uk0tFxe3PaJe_HxukmgK4KxS60eje9ZTkHaln9OKsoltQ64aA56z0sCyvJa2g2jeFCeuiUW7kvG04e1yG4jzf2zI-NuGu/s640/2013-09-02_1641.png" width="640" /></a></div>
<br />
Пара советов:<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<ul>
<li>Если в отчетах содержатся данные, которые вам не нужны - их можно отключить в Counter Settings в тесте. То же самое работает и в обратную сторону, если что-то нужно добавить - это также Counter Settings.</li>
<li>Чтобы сохранить результаты теста одним файлом нужно нажать иконку Export Test Run Results на нижней панели. Результаты сохраняются с расширением trx.</li>
</ul>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicGtvyizD9rL9CHQCcdfcBUiDNIxlvqso1H5EVCRooSxaJa070wBVx-SxDVHhpNOsEDih43vnmuO3Pv9F4lADpK7VBNdpZJWAkxs1-pzNk0Q6uezPqOKzACbmOxd-AaGVqvuHgJ_QKJrgO/s1600/2013-09-02_1649.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="160" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicGtvyizD9rL9CHQCcdfcBUiDNIxlvqso1H5EVCRooSxaJa070wBVx-SxDVHhpNOsEDih43vnmuO3Pv9F4lADpK7VBNdpZJWAkxs1-pzNk0Q6uezPqOKzACbmOxd-AaGVqvuHgJ_QKJrgO/s640/2013-09-02_1649.png" width="640" /></a></div>
<br />
<br />
<ul>
<li>Если вы хотите удалить элементы, сгруппирванные папкой, например, QueryString Parameters или Validation Rules, то нужно удалять каждый элемент внутри по отдельности, при удалении последнего элемента папка пропадет сама. Удалить просто папку возможности нет - такая вот недоработка.</li>
</ul>
<br />
<br />
<div style="text-align: right;">
Вот и всё, на последок хочу сказать, что остался доволен качеством <a href="http://ap-test-team.blogspot.ru/search/label/Visual%20Studio%20Web%20Performance" target="_blank">VS Web Performance</a>.</div>
<div style="text-align: right;">
Также, буду рад, если открыл для вас новый интересный материал.</div>
<br />
<div style="text-align: right;">
Спасибо за внимание.</div>
Anonymoushttp://www.blogger.com/profile/12347773783326015649noreply@blogger.com0tag:blogger.com,1999:blog-3928796676462303438.post-21230431109033349232013-09-13T09:37:00.001+04:002013-09-13T09:37:22.169+04:00С днем программиста!!!<div dir="ltr" style="text-align: left;" trbidi="on">
Дорогие наши программисты - с праздником!!!<br />
Поменьше вам архитектурных ошибок, побольше багов в won't fix и здоровья. счастья, успехов в работе и личной жизни :))))))))))))<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://github-camo.global.ssl.fastly.net/f6fc43efca713c221ffa991d10a8ba204ec1f5f2/687474703a2f2f686162722e686162726173746f726167652e6f72672f706f73745f696d616765732f3665382f3135392f3062662f36653831353930626661383239356334313239343135303633623966666465372e6a7067" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://github-camo.global.ssl.fastly.net/f6fc43efca713c221ffa991d10a8ba204ec1f5f2/687474703a2f2f686162722e686162726173746f726167652e6f72672f706f73745f696d616765732f3665382f3135392f3062662f36653831353930626661383239356334313239343135303633623966666465372e6a7067" /></a></div>
<br />
<br />
<br />
Кстати, День программиста - это официальный праздник!<br />
<br />
<a name='more'></a><br /><br />
<span style="background-color: white; font-family: Arial, sans-serif; font-size: 12px; font-weight: bold; line-height: 16px; margin: 0px; padding: 0px; text-align: justify;">Президент России Дмитрий Медведев подписал 11 сентября указ №1034, подготовленный Министерством связи и массовых коммуникаций Российской Федерации, который устанавливает в России новый официальный праздник – День программиста. </span><br style="background-color: white; font-family: Arial, sans-serif; font-size: 12px; line-height: 16px; margin: 0px; padding: 0px; text-align: justify;" /><br style="background-color: white; font-family: Arial, sans-serif; font-size: 12px; line-height: 16px; margin: 0px; padding: 0px; text-align: justify;" /><span style="background-color: white; font-family: Arial, sans-serif; font-size: 12px; line-height: 16px; text-align: justify;">Согласно этому документу, День программиста будет праздноваться в России на 256-й день года – 13 сентября, а если год високосный – 12 сентября. Число 256 выбрано потому, что это количество целых чисел, которое можно выразить с помощью одного восьмиразрядного байта, а также это максимальная степень числа 2, которая меньше количества дней в году - 365. </span><br />
<span style="background-color: white; font-family: Arial, sans-serif; font-size: 12px; line-height: 16px; text-align: justify;"><br /></span>
<span style="background-color: white; font-family: Arial, sans-serif; font-size: 12px; line-height: 16px; text-align: justify;">Эта дата уже давно стала неофициальным праздником людей, связавших свою профессиональную деятельность с программированием.</span><br />
<div style="text-align: right;">
<span style="background-color: white; font-family: Arial, sans-serif; font-size: 12px; line-height: 16px; text-align: justify;"><a href="http://minsvyaz.ru/ru/news/index.php?id_4=40366" target="_blank">Источник</a></span></div>
<span style="background-color: white; font-family: Arial, sans-serif; font-size: 12px; line-height: 16px; text-align: justify;"><br /></span>
<span style="background-color: white; font-family: Arial, sans-serif; font-size: 12px; line-height: 16px; text-align: justify;"><br /></span></div>
alexey.chumaginhttp://www.blogger.com/profile/01857219456489660665noreply@blogger.com0tag:blogger.com,1999:blog-3928796676462303438.post-85985300046580808442013-09-11T11:11:00.000+04:002013-09-11T11:13:30.866+04:00Тестирование производительности с помощью Visual Studio Web Performance, часть 5<h2 class="tr_bq" style="text-align: center;">
<b>Load Test Plug-in</b></h2>
Итак, у нас есть 2 webtest'а объединенных в один loadtest. <a href="http://ap-test-team.blogspot.ru/2013/09/visual-studio-web-performance-4.html" target="_blank">В прошлых частях</a> я уже приводил примеры для чего может понадобиться плагин, сейчас предлагаю сразу перейти к его созданию.<br />
Как я уже говорил - плагины, это обычные классы, унаследованные от Web Testing, поэтому создаём новый класс в корневой папке проекта. Мы собираемся перегрузить метод Initialize() класса <span style="font-family: inherit;">ILoadTestPlugin</span>, который отвечает за действия перед тестом. Для наглядности поместим внутри абстрактный метод создания пользователя CreateUser(). Получаем следующее.<br />
<br />
<a name='more'></a><br />
<br />
<span style="font-family: Courier New, Courier, monospace;"><span style="color: blue;">using </span>System;</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span style="color: blue;">using </span>System.ComponentModel;</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span style="color: blue;">using </span>Microsoft.VisualStudio.TestTools.LoadTesting;</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"><span style="color: blue;">namespace </span>WebAndLoadTestProject</span><br />
<span style="font-family: Courier New, Courier, monospace;">{</span><br />
<span style="font-family: Courier New, Courier, monospace;"> <span style="color: blue;">public class</span> <span style="color: #3d85c6;">LoadPlugin : ILoadTestPlugin</span></span><br />
<span style="font-family: Courier New, Courier, monospace;"> {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> [<span style="color: #3d85c6;">Description</span>(<span style="color: #783f04;">"Context parameter new user"</span>)]</span><br />
<span style="font-family: Courier New, Courier, monospace;"> <span style="color: blue;">public string</span> ContextParameterNewUser { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;"> <span style="color: blue;">public void</span> Initialize(<span style="color: #3d85c6;">LoadTest </span>loadTest)</span><br />
<span style="font-family: Courier New, Courier, monospace;"> {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> <span style="color: blue;">string </span>newUser = CreateNewUser();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> loadTest.Context.Add(</span><span style="font-family: 'Courier New', Courier, monospace;">ContextParameterNewUser</span><span style="font-family: Courier New, Courier, monospace;">, newUser);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;">}</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: inherit;">Как видно, для того, чтобы переписать </span>Initialize() нужно унаследоваться от класса ILoadTestPlugin. Снаружи мы создали параметр <span style="font-family: 'Courier New', Courier, monospace;">ContextParameterNewUser</span><span style="font-family: inherit;">, внутри получили нового юзера и передали его в тест с помощью </span><span style="font-family: 'Courier New', Courier, monospace;">Context.Add</span><span style="font-family: inherit;">. </span>Теперь нужно сбилдить проект и перейти в loadtest. Далее, вызвать контекстное меню корневого элемента (LoadTest1) -> Add Load Test Plug-in. В открывшемся окне вы увидите на выбор ваши load плагины.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKPSb2Y-tj_i00RI5AgYJDDHiHKIr-_BFUtQmIAc6cYxlxS4NpOKowbTUJkMK144vGbu8XKF5hnvguPm4sUcuVnLeY42ISQReIkOXZBnEKfbxPeUeJKCzGUp3RuJgbdApNsmKD9HfNvCKf/s1600/2013-09-02_1550.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="346" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKPSb2Y-tj_i00RI5AgYJDDHiHKIr-_BFUtQmIAc6cYxlxS4NpOKowbTUJkMK144vGbu8XKF5hnvguPm4sUcuVnLeY42ISQReIkOXZBnEKfbxPeUeJKCzGUp3RuJgbdApNsmKD9HfNvCKf/s640/2013-09-02_1550.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Так же как и в webtest объявляем глобальную переменную, которую получаем из плагина ContextParameterNewUser = NewUser.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1wU7X1sKGfZGdcgsfkS3_uuY1OBtHw2-ZklUVQ9lC0bRJEj4woXlwK_-sgZ2orxdNKEp4jAz9JlMLQyviH7x6MDbW4GmYA8FR3lYamSXuNUzZeR0iq10KvFDgVcqY-7xZIvlklQPm2DI7/s1600/2013-09-02_1553.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="346" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1wU7X1sKGfZGdcgsfkS3_uuY1OBtHw2-ZklUVQ9lC0bRJEj4woXlwK_-sgZ2orxdNKEp4jAz9JlMLQyviH7x6MDbW4GmYA8FR3lYamSXuNUzZeR0iq10KvFDgVcqY-7xZIvlklQPm2DI7/s640/2013-09-02_1553.png" width="640" /></a></div>
<br />
Здесь начинается самое интересное. Нужно передать значение NewUser в один из тестов, но в loadtest нет возможности его подставить в те места, где оно нужно. Методом проб и ошибок выяснилось, что достаточно просто объявить эту переменную в loadtest и в webtest подставить её в нужное место в двойных фигурных скобках. Т.е. мы уже определили её в loadtest (скриншот выше) как NewUser и теперь переходим в WebTest2 и подставляем.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNj-KtzkwMC3E7IU_j5GNLNRlUFp3kd6qXriYh99icSjMoKLZ_cVRAbnnXcguQer7dfU8pXRUMI7EAifmhDOh30eeMZbCNXnyydAZS5Hwo1H9SJ0tYi3nLdG_QzDgejTMQpwRU4xcMpois/s1600/2013-09-02_1601.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="346" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNj-KtzkwMC3E7IU_j5GNLNRlUFp3kd6qXriYh99icSjMoKLZ_cVRAbnnXcguQer7dfU8pXRUMI7EAifmhDOh30eeMZbCNXnyydAZS5Hwo1H9SJ0tYi3nLdG_QzDgejTMQpwRU4xcMpois/s640/2013-09-02_1601.png" width="640" /></a></div>
<br />
Теперь, перед началом теста выполнится LoadTest Initialize(), где создастся пользователь и передаст его всем последующим сценариям, юзер подтянется везде, куда мы указали.<br />
Запускаем LoadTest, получаем результаты и переходим к заключительной части цикла - разбор отчетов.Anonymoushttp://www.blogger.com/profile/12347773783326015649noreply@blogger.com0tag:blogger.com,1999:blog-3928796676462303438.post-28195683682588632852013-09-10T19:13:00.000+04:002013-09-10T19:13:39.628+04:00Генерация случайных валидных Urls<div dir="ltr" style="text-align: left;" trbidi="on">
Гоняя тесты на одних и тех же данных, мы каждый день видим зеленный билд. И что? Стабильность? Застой?<br />
<br />
Верное утверждение, что тесты должны гоняться постоянно, т.е. круглосуточно, или 24*7. Но если тесты используют одни и те же данные, то они врядли будут падать, если не повторяются старые ошибки.<br />
<br />
Что делать?<br />
<br />
<br />
<a name='more'></a>Многие тестировщики используют средства генерации данных для своих тестов - есть даже такой вид автоматизированного тестирования - Динамическое автоматизированное тестирование, - одна из статей Алексея Булата об этом. <a href="http://alexeybulat.blogspot.ru/2008/05/dynat.html" target="_blank">ссылка</a><br />
<br />
Программы генерируют строки, даты, числа и даже картинки определенного размера (об этом мы уже писали <a href="http://ap-test-team.blogspot.ru/2013/09/blog-post.html" target="_blank">раньше</a>). И с этим все понятно. Но как сгенерировать url, так чтобы он был валидный, и чтобы вел к реальному ресурсу: картинке, видео, документу pdf или просто сайту.<br />
<br />
Ответ напрашивается сам собой - использовать API поисковых систем.<br />
Итак, что есть на "рынке":<br />
<br />
<ul style="text-align: left;">
<li><a href="http://datamarket.azure.com/dataset/bing/search" target="_blank">Bing</a></li>
<li>Google </li>
<li><a href="http://xml.yandex.ru/" target="_blank">Yandex</a> (Яндекс.XML)</li>
<li><a href="http://developer.yahoo.com/boss/search/" target="_blank">Yahoo</a></li>
</ul>
<div>
Из четырех этих сервисов, только гугл позволяет пользоваться своим апи без регистрации. Правда есть лимит на результат - 32 ссылки в одном овтете от сервера, но этого хватает.</div>
<div>
<br /></div>
<div>
Постановка задачи: реализовать получение случайной и валидной url для следующих источников.</div>
<div>
<ul style="text-align: left;">
<li>Случайная ссылка на картинку</li>
<li>Случайная ссылка на видео</li>
<li>Случайная ссылка на сайт</li>
<li>Случайная ссылка на документ pdf</li>
</ul>
<div>
Язык реализации - C#.</div>
</div>
<div>
<br /></div>
<div>
Реализация:</div>
<div>
<br /></div>
<div>
Ссылка которая будет достаточной для поиска выглядит так </div>
<div>
<br /></div>
<div>
<a href="http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=aqua&start=5">http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=aqua&start=5</a></div>
<div>
<br /></div>
<div>
и содержит параметры</div>
<div>
<br /></div>
<div>
web - тип сервиса для поиска</div>
<div>
Полный список сервисов</div>
<div>
<br /></div>
<br />
<pre class="sh_perl sh_sourceCode" style="background-color: #eeeeee; border: 1px solid rgb(136, 136, 136); padding: 1em;"> service address
<span class="sh_symbol">-------</span> <span class="sh_symbol">------------------------------------------------------</span>
WEB <a class="podlinkurl" href="http://ajax.googleapis.com/ajax/services/search/web" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; color: #006699;">http<span class="sh_symbol">:</span><span class="sh_string" style="color: black;">//ajax.googleapis.com/ajax/services/search/</span>web</a>
VIDEO <a class="podlinkurl" href="http://ajax.googleapis.com/ajax/services/search/video" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; color: #006699;">http<span class="sh_symbol">:</span><span class="sh_string" style="color: black;">//ajax.googleapis.com/ajax/services/search/</span>video</a>
NEWS <a class="podlinkurl" href="http://ajax.googleapis.com/ajax/services/search/news" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; color: #006699;">http<span class="sh_symbol">:</span><span class="sh_string" style="color: black;">//ajax.googleapis.com/ajax/services/search/</span>news</a>
LOCAL <a class="podlinkurl" href="http://ajax.googleapis.com/ajax/services/search/local" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; color: #006699;">http<span class="sh_symbol">:</span><span class="sh_string" style="color: black;">//ajax.googleapis.com/ajax/services/search/</span><span class="sh_keyword" style="color: black;">local</span></a>
IMAGES <a class="podlinkurl" href="http://ajax.googleapis.com/ajax/services/search/images" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; color: #006699;">http<span class="sh_symbol">:</span><span class="sh_string" style="color: black;">//ajax.googleapis.com/ajax/services/search/</span>images</a>
BOOKS <a class="podlinkurl" href="http://ajax.googleapis.com/ajax/services/search/books" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; color: #006699;">http<span class="sh_symbol">:</span><span class="sh_string" style="color: black;">//ajax.googleapis.com/ajax/services/search/</span>books</a>
BLOGS <a class="podlinkurl" href="http://ajax.googleapis.com/ajax/services/search/blogs" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; color: #006699;">http<span class="sh_symbol">:</span><span class="sh_string" style="color: black;">//ajax.googleapis.com/ajax/services/search/</span>blogs</a>
PATENT <a class="podlinkurl" href="http://ajax.googleapis.com/ajax/services/search/patent" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; color: #006699;">http<span class="sh_symbol">:</span><span class="sh_string" style="color: black;">//ajax.googleapis.com/ajax/services/search/</span>patent</a></pre>
<div>
</div>
<br />
<div>
<br /></div>
<div style="text-align: right;">
<a href="http://search.cpan.org/~ejs/REST-Google-1.0.8/lib/REST/Google/Search.pod#METHODS" target="_blank">источник</a></div>
<div style="text-align: right;">
<br /></div>
<div style="text-align: left;">
v - версия протокола</div>
<div style="text-align: left;">
q - выражение для поиска </div>
<div style="text-align: left;">
start - необязательный аргумент, задающий индекс для первого результата поиска (проще говоря номер страницы)</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Полный список аргументов можно посмотреть в <a href="https://developers.google.com/web-search/docs/reference" target="_blank">официальной документации</a> (раздел Standard URL Arguments)</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Ответ приходит в json формате из которого необходимо достать нужную информацию</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<span style="font-family: monospace;">{</span></div>
<br />
<ul class="obj collapsible" style="font-family: monospace; list-style-type: none; margin: 0px 0px 0px 2em; padding: 0px;">
<li style="position: relative;"><div class="hoverable" style="-webkit-transition: background-color 0.2s ease-out 0s; border-bottom-left-radius: 2px; border-bottom-right-radius: 2px; border-top-left-radius: 2px; border-top-right-radius: 2px; display: inline-block; padding: 1px 2px; transition: background-color 0.2s ease-out 0s;">
<span class="property" style="font-weight: bold;">responseData</span>:<br />
<div class="collapser" style="-webkit-user-select: none; cursor: default; left: -1.5em; padding-left: 6px; padding-right: 6px; position: absolute; top: 1px;">
</div>
{<br />
<ul class="obj collapsible" style="list-style-type: none; margin: 0px 0px 0px 2em; padding: 0px;">
<li style="position: relative;"><div class="hoverable" style="-webkit-transition: background-color 0.2s ease-out 0s; border-bottom-left-radius: 2px; border-bottom-right-radius: 2px; border-top-left-radius: 2px; border-top-right-radius: 2px; display: inline-block; padding: 1px 2px; transition: background-color 0.2s ease-out 0s;">
<span class="property" style="font-weight: bold;">results</span>:<br />
<div class="collapser" style="-webkit-user-select: none; cursor: default; left: -1.5em; padding-left: 6px; padding-right: 6px; position: absolute; top: 1px;">
</div>
[<br />
<ul class="array collapsible" style="list-style-type: none; margin: 0px 0px 0px 2em; padding: 0px;">
<li style="position: relative;"><div class="hoverable" style="-webkit-transition: background-color 0.2s ease-out 0s; border-bottom-left-radius: 2px; border-bottom-right-radius: 2px; border-top-left-radius: 2px; border-top-right-radius: 2px; display: inline-block; padding: 1px 2px; transition: background-color 0.2s ease-out 0s;">
<div class="collapser" style="-webkit-user-select: none; cursor: default; left: -1.5em; padding-left: 6px; padding-right: 6px; position: absolute; top: 1px;">
</div>
{<br />
<ul class="obj collapsible" style="list-style-type: none; margin: 0px 0px 0px 2em; padding: 0px;">
<li style="position: relative;"><div class="hoverable" style="-webkit-transition: background-color 0.2s ease-out 0s; border-bottom-left-radius: 2px; border-bottom-right-radius: 2px; border-top-left-radius: 2px; border-top-right-radius: 2px; display: inline-block; padding: 1px 2px; transition: background-color 0.2s ease-out 0s;">
<span class="property" style="font-weight: bold;">GsearchResultClass</span>: <span class="type-string" style="color: green;">"GwebSearch"</span>,</div>
</li>
<li style="position: relative;"><div class="hoverable" style="-webkit-transition: background-color 0.2s ease-out 0s; border-bottom-left-radius: 2px; border-bottom-right-radius: 2px; border-top-left-radius: 2px; border-top-right-radius: 2px; display: inline-block; padding: 1px 2px; transition: background-color 0.2s ease-out 0s;">
<span class="property" style="font-weight: bold;">unescapedUrl</span>: <span class="type-string" style="color: green;">"</span><a href="https://www.aquaamerica.com/">https://www.aquaamerica.com/</a><span class="type-string" style="color: green;">"</span>,</div>
</li>
<li style="position: relative;"><div class="hoverable" style="-webkit-transition: background-color 0.2s ease-out 0s; border-bottom-left-radius: 2px; border-bottom-right-radius: 2px; border-top-left-radius: 2px; border-top-right-radius: 2px; display: inline-block; padding: 1px 2px; transition: background-color 0.2s ease-out 0s;">
<span class="property" style="font-weight: bold;">url</span>: <span class="type-string" style="color: green;">"</span><a href="https://www.aquaamerica.com/">https://www.aquaamerica.com/</a><span class="type-string" style="color: green;">"</span>,</div>
</li>
<li style="position: relative;"><div class="hoverable" style="-webkit-transition: background-color 0.2s ease-out 0s; border-bottom-left-radius: 2px; border-bottom-right-radius: 2px; border-top-left-radius: 2px; border-top-right-radius: 2px; display: inline-block; padding: 1px 2px; transition: background-color 0.2s ease-out 0s;">
<span class="property" style="font-weight: bold;">visibleUrl</span>: <span class="type-string" style="color: green;">"www.aquaamerica.com"</span>,</div>
</li>
<li style="position: relative;"><div class="hoverable" style="-webkit-transition: background-color 0.2s ease-out 0s; border-bottom-left-radius: 2px; border-bottom-right-radius: 2px; border-top-left-radius: 2px; border-top-right-radius: 2px; display: inline-block; padding: 1px 2px; transition: background-color 0.2s ease-out 0s;">
<span class="property" style="font-weight: bold;">cacheUrl</span>: <span class="type-string" style="color: green;">"</span><a href="http://www.google.com/search?q=cache:1N9kMWHoujQJ:www.aquaamerica.com">http://www.google.com/search?q=cache:1N9kMWHoujQJ:www.aquaamerica.com</a><span class="type-string" style="color: green;">"</span>,</div>
</li>
<li style="position: relative;"><div class="hoverable" style="-webkit-transition: background-color 0.2s ease-out 0s; border-bottom-left-radius: 2px; border-bottom-right-radius: 2px; border-top-left-radius: 2px; border-top-right-radius: 2px; display: inline-block; padding: 1px 2px; transition: background-color 0.2s ease-out 0s;">
<span class="property" style="font-weight: bold;">title</span>: <span class="type-string" style="color: green;">"<b>Aqua</b> America, Inc."</span>,</div>
</li>
<li style="position: relative;"><div class="hoverable" style="-webkit-transition: background-color 0.2s ease-out 0s; border-bottom-left-radius: 2px; border-bottom-right-radius: 2px; border-top-left-radius: 2px; border-top-right-radius: 2px; display: inline-block; padding: 1px 2px; transition: background-color 0.2s ease-out 0s;">
<span class="property" style="font-weight: bold;">titleNoFormatting</span>: <span class="type-string" style="color: green;">"Aqua America, Inc."</span>,</div>
</li>
<li style="position: relative;"><div class="hoverable" style="-webkit-transition: background-color 0.2s ease-out 0s; border-bottom-left-radius: 2px; border-bottom-right-radius: 2px; border-top-left-radius: 2px; border-top-right-radius: 2px; display: inline-block; padding: 1px 2px; transition: background-color 0.2s ease-out 0s;">
<span class="property" style="font-weight: bold;">content</span>: <span class="type-string" style="color: green;">"Headquarters for water utility group serving states between Maine and Texas. Includes information on service area, operating divisions, customer service, <b>...</b>"</span></div>
</li>
</ul>
}</div>
</li>
</ul>
],</div>
</li>
<li style="position: relative;"><div class="hoverable" style="-webkit-transition: background-color 0.2s ease-out 0s; border-bottom-left-radius: 2px; border-bottom-right-radius: 2px; border-top-left-radius: 2px; border-top-right-radius: 2px; display: inline-block; padding: 1px 2px; transition: background-color 0.2s ease-out 0s;">
<span class="property" style="font-weight: bold;">cursor</span>:<br />
<div class="collapser" style="-webkit-user-select: none; cursor: default; left: -1.5em; padding-left: 6px; padding-right: 6px; position: absolute; top: 1px;">
</div>
{<br />
<ul class="obj collapsible" style="list-style-type: none; margin: 0px 0px 0px 2em; padding: 0px;">
<li style="position: relative;"><div class="hoverable" style="-webkit-transition: background-color 0.2s ease-out 0s; border-bottom-left-radius: 2px; border-bottom-right-radius: 2px; border-top-left-radius: 2px; border-top-right-radius: 2px; display: inline-block; padding: 1px 2px; transition: background-color 0.2s ease-out 0s;">
<span class="property" style="font-weight: bold;">resultCount</span>: <span class="type-string" style="color: green;">"25,600,000"</span>,</div>
</li>
<li style="position: relative;"><div class="hoverable collapsed selected" style="-webkit-transition: background-color 0.2s ease-out 0s; border-bottom-left-radius: 2px; border-bottom-right-radius: 2px; border-top-left-radius: 2px; border-top-right-radius: 2px; display: inline-block; outline-style: dotted; outline-width: 1px; padding: 1px 2px; transition: background-color 0.2s ease-out 0s;">
<span class="property" style="font-weight: bold;">pages</span>:<br />
<div class="collapser" style="-webkit-user-select: none; cursor: default; left: -1.5em; padding-left: 6px; padding-right: 6px; position: absolute; top: 1px;">
</div>
[<span class="ellipsis" style="display: inherit;"></span>],</div>
</li>
<li style="position: relative;"><div class="hoverable" style="-webkit-transition: background-color 0.2s ease-out 0s; border-bottom-left-radius: 2px; border-bottom-right-radius: 2px; border-top-left-radius: 2px; border-top-right-radius: 2px; display: inline-block; padding: 1px 2px; transition: background-color 0.2s ease-out 0s;">
<span class="property" style="font-weight: bold;">estimatedResultCount</span>: <span class="type-string" style="color: green;">"25600000"</span>,</div>
</li>
<li style="position: relative;"><div class="hoverable" style="-webkit-transition: background-color 0.2s ease-out 0s; border-bottom-left-radius: 2px; border-bottom-right-radius: 2px; border-top-left-radius: 2px; border-top-right-radius: 2px; display: inline-block; padding: 1px 2px; transition: background-color 0.2s ease-out 0s;">
<span class="property" style="font-weight: bold;">currentPageIndex</span>: <span class="type-number" style="color: blue;">0</span>,</div>
</li>
<li style="position: relative;"><div class="hoverable" style="-webkit-transition: background-color 0.2s ease-out 0s; border-bottom-left-radius: 2px; border-bottom-right-radius: 2px; border-top-left-radius: 2px; border-top-right-radius: 2px; display: inline-block; padding: 1px 2px; transition: background-color 0.2s ease-out 0s;">
<span class="property" style="font-weight: bold;">moreResultsUrl</span>: <span class="type-string" style="color: green;">"</span><a href="http://www.google.com/search?oe=utf8&ie=utf8&source=uds&start=0&hl=en&q=aqua">http://www.google.com/search?oe=utf8&ie=utf8&source=uds&start=0&hl=en&q=aqua</a><span class="type-string" style="color: green;">"</span>,</div>
</li>
<li style="position: relative;"><div class="hoverable" style="-webkit-transition: background-color 0.2s ease-out 0s; border-bottom-left-radius: 2px; border-bottom-right-radius: 2px; border-top-left-radius: 2px; border-top-right-radius: 2px; display: inline-block; padding: 1px 2px; transition: background-color 0.2s ease-out 0s;">
<span class="property" style="font-weight: bold;">searchResultTime</span>: <span class="type-string" style="color: green;">"0.09"</span></div>
</li>
</ul>
}</div>
</li>
</ul>
},</div>
</li>
<li style="position: relative;"><div class="hoverable" style="-webkit-transition: background-color 0.2s ease-out 0s; border-bottom-left-radius: 2px; border-bottom-right-radius: 2px; border-top-left-radius: 2px; border-top-right-radius: 2px; display: inline-block; padding: 1px 2px; transition: background-color 0.2s ease-out 0s;">
<span class="property" style="font-weight: bold;">responseDetails</span>: <span class="type-null" style="color: grey;">null</span>,</div>
</li>
<li style="position: relative;"><div class="hoverable" style="-webkit-transition: background-color 0.2s ease-out 0s; border-bottom-left-radius: 2px; border-bottom-right-radius: 2px; border-top-left-radius: 2px; border-top-right-radius: 2px; display: inline-block; padding: 1px 2px; transition: background-color 0.2s ease-out 0s;">
<span class="property" style="font-weight: bold;">responseStatus</span>: <span class="type-number" style="color: blue;">200</span></div>
</li>
</ul>
<div>
<span style="font-family: monospace;">}</span></div>
<div>
<span style="font-family: monospace;"><br /></span></div>
<div>
В нашем случае это <b>unescapedUrl</b>.</div>
<div>
<br /></div>
<div>
Теперь алгоритм такой:</div>
<div>
<ol style="text-align: left;">
<li>Формируем строку для Get запроса подставляя слово для поиска и номер страницы</li>
<li>Получаем ответ от сервера</li>
<li>Парсим его и получаем значение unecapedUrl</li>
<li>Используем url для своих нужд!</li>
</ol>
<div>
Конечно, все значения должны быть случайными:</div>
</div>
<div>
Номер страницы - случайное число</div>
<div>
unescapedUrl - случайный элемент из массива results</div>
<div>
Слово для поиска - случайное слово из словаря.</div>
<div>
<br /></div>
<div>
Немного о поисковом выражении: Использовать случайно сгенерированную строку не очень хорошо, потому что можно получить строку для которой поиск не вернет результатов. Нам это не надо. Поэтому, лучше составить словарь из нормальных слов и брать оттуда случайное. Например, этими словами могут быть - самые часто используемые слова для поиска в гугле.</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
Полный листинг кода на <a href="https://github.com/a-chumagin/ChronoZoom/blob/master/Test/chronozoom20.test/RandomDataGenerator/RandomUrl.cs" target="_blank">GitHub</a></div>
</div>
alexey.chumaginhttp://www.blogger.com/profile/01857219456489660665noreply@blogger.com0tag:blogger.com,1999:blog-3928796676462303438.post-52806247934283937152013-09-09T12:18:00.000+04:002013-09-11T11:13:52.908+04:00Тестирование производительности с помощью Visual Studio Web Performance, часть 4<h2 class="tr_bq" style="text-align: center;">
LoadTest</h2>
<a href="http://ap-test-team.blogspot.ru/2013/09/visual-studio-web-performance-3.html" target="_blank">Перед тем как рассмотреть loadtest</a> давайте спроектируем ситуацию, когда 70% запросов к гуглу должны быть со случайными значениями, а 30% постоянными, например, "Web Performance". Тест со случайными запросами мы уже написали (WebTest1), создадим его копию, назовем WebTest2, единственное отличие будет в том, что мы не будем подключать внешние источники данных, а оставим статичное значение запроса. Также я включил URL Encoding, чтобы не переводить пробелы в "%20" вручную.<br />
<br />
<a name='more'></a><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSGBOW1zrgzE19wg5j1QM8SmyezC1xPPaxle69HRwxjjeAf4QF4WlberYOMFFP6jrnG-OTebuE3KKygWIQKUU1BJdpMtddusL_HHMXfJUi2_pTq1iiiuqBSI9bgiiYBiUxUibiDqojLTZ5/s1600/2013-09-02_1230.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="346" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSGBOW1zrgzE19wg5j1QM8SmyezC1xPPaxle69HRwxjjeAf4QF4WlberYOMFFP6jrnG-OTebuE3KKygWIQKUU1BJdpMtddusL_HHMXfJUi2_pTq1iiiuqBSI9bgiiYBiUxUibiDqojLTZ5/s640/2013-09-02_1230.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
Теперь можно задуматься о распределении тестов. Создадим новый нагрузочный тест: контекстное меню проекта -> Add -> Load Test. Перед нами появляется окно с настройками.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI_RllGHQLyEdXeVMX4tPsqSyeYFZ2zTOY1_smd6fn67roFm9VMupofmKmrTEcr70_ncDQOzXAXSzMqVvNFAB-XPBg9xPnPoqk9IXHaCjITMWW_2JGnwRnTta6MwQBw85k-Eiz7NJNsANw/s1600/2013-09-02_1234.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="346" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI_RllGHQLyEdXeVMX4tPsqSyeYFZ2zTOY1_smd6fn67roFm9VMupofmKmrTEcr70_ncDQOzXAXSzMqVvNFAB-XPBg9xPnPoqk9IXHaCjITMWW_2JGnwRnTta6MwQBw85k-Eiz7NJNsANw/s640/2013-09-02_1234.png" width="640" /></a></div>
<br />
Подробно на нем останавливаться не будем, к каждому из пунктов есть описание, поэтому лишь вкратце расскажу, что мы выставим для нашего теста.<br />
Итак, на второй вкладке выберем записанное время обдумывания перед запросом.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghf9CsM2_CbIm8DwX4igXnYRQE_iqyahIhyphenhyphenaDFraw6W55bn6d3x4EcTUL2B0khaIXok-v3Y7gjqBakuXo8EoKzqQ1iADhcH1tjK-4ZONjZaqX4zeIBUfR1NK9Betk1rQII3000elEbUu3o/s1600/2013-09-02_1244.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="387" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghf9CsM2_CbIm8DwX4igXnYRQE_iqyahIhyphenhyphenaDFraw6W55bn6d3x4EcTUL2B0khaIXok-v3Y7gjqBakuXo8EoKzqQ1iADhcH1tjK-4ZONjZaqX4zeIBUfR1NK9Betk1rQII3000elEbUu3o/s640/2013-09-02_1244.png" width="640" /></a></div>
<br />
Нагрузку на вкладке Load Pattern оставим постоянную в 25 пользователей.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicb_0fJRwso4Z_Ykb0A0S2AMqlCCBeMV3u1QcJBAqUGgpJ6xJitXvpSr6GuJSgpkJnCzOm8uWg_4_rMtBAlX451yNdkrtb3c8zXicL8d2-blKysX3Gyzf3Yt2GX2WZeWT46FBvtGEWL0er/s1600/2013-09-02_1246.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="388" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicb_0fJRwso4Z_Ykb0A0S2AMqlCCBeMV3u1QcJBAqUGgpJ6xJitXvpSr6GuJSgpkJnCzOm8uWg_4_rMtBAlX451yNdkrtb3c8zXicL8d2-blKysX3Gyzf3Yt2GX2WZeWT46FBvtGEWL0er/s640/2013-09-02_1246.png" width="640" /></a></div>
<br />
Test Mix Model выставим основанной на количестве виртуальных пользователей.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkdxxqIYGlm0VfZFz1vsqejLjf-eyiXADtP6KZXlnhFromPB47p1_IhM1_lw6xlmzSlFQW1If8H7Xt1T1HsT2X2FjbIrameo1PF2mFkV8d6mXZUBham_KKuwJrkvBlQlUN5uOH0tMRY7MY/s1600/2013-09-02_1249.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="388" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkdxxqIYGlm0VfZFz1vsqejLjf-eyiXADtP6KZXlnhFromPB47p1_IhM1_lw6xlmzSlFQW1If8H7Xt1T1HsT2X2FjbIrameo1PF2mFkV8d6mXZUBham_KKuwJrkvBlQlUN5uOH0tMRY7MY/s640/2013-09-02_1249.png" width="640" /></a></div>
<br />
В Test Mix добавляем оба наших теста и распределяем процент выполнения каждого, основываясь на наших требованиях.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBQ4VCSKvPhGGJI2zrkWkHfmxJT2IMQQuPpNplwN5Hc_O6Cp35_cA49F9Mtz8LZYwbcvawcd8cQIaiT_0cn69_XzTUsy8nkv9XbwmUmhlX93eKl86ONW2qamUgd7rNJ5uctkCm98Uhsvmm/s1600/2013-09-02_1251.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="388" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBQ4VCSKvPhGGJI2zrkWkHfmxJT2IMQQuPpNplwN5Hc_O6Cp35_cA49F9Mtz8LZYwbcvawcd8cQIaiT_0cn69_XzTUsy8nkv9XbwmUmhlX93eKl86ONW2qamUgd7rNJ5uctkCm98Uhsvmm/s640/2013-09-02_1251.png" width="640" /></a></div>
<br />
Network и Browser Mix оставляем дефолтными. Counter Sets также остаётся неизменным, так как всё будет происходить на одной машине. В Run Settings поставим период разогрева 5 секунд и длительность выполнения 1 минуту.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7tqm8CzINb_lX-PI5MqGp3w_hNyQruk5nGfwM2aB6NZ0alR8iiDHNiIi02YBIJyAg6D_WLi3EAte_KZUHK-_bwio3zc940JpLhxyb0LbMBQhGp0UjV88r4Jfo_ViIRbbA3pMTdYNwF5Pn/s1600/2013-09-02_1251_001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="388" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7tqm8CzINb_lX-PI5MqGp3w_hNyQruk5nGfwM2aB6NZ0alR8iiDHNiIi02YBIJyAg6D_WLi3EAte_KZUHK-_bwio3zc940JpLhxyb0LbMBQhGp0UjV88r4Jfo_ViIRbbA3pMTdYNwF5Pn/s640/2013-09-02_1251_001.png" width="640" /></a></div>
<br />
После нажатия Finish сформируется файл loadtest, который и будет содержать все наши ранее введенные настройки.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixHuWdcwf9WEEcvb5K3ZlDfX0Utw3qHiY-u7fhNSdq4uINv5oOQiCfb73tANF_bwwvmc33UGQeVSexxtu0gGq1QbfS1_zpOr4in3_BYqCtqKjHC5UKFPtuoQh9BmCCrse9AZojrVNzh5hd/s1600/2013-09-02_1253.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="346" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixHuWdcwf9WEEcvb5K3ZlDfX0Utw3qHiY-u7fhNSdq4uINv5oOQiCfb73tANF_bwwvmc33UGQeVSexxtu0gGq1QbfS1_zpOr4in3_BYqCtqKjHC5UKFPtuoQh9BmCCrse9AZojrVNzh5hd/s640/2013-09-02_1253.png" width="640" /></a></div>
<br />
После этого нагрузочный тест можно запустить также, как мы это делали и с webtest и получить результаты.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOJs-LBqmtLVZv8cH0xAjaNWUahWkODagWXob4hMVvc0Tlb0pFI1kSiq8jAFdp8cjS6Y9pE0206OutjjVdF-DN-uBn6dIAxP_Jy0P2LNwNzEOTx9KI61kqcODkAEigkoBXA1XtZdDxilBK/s1600/2013-09-02_1300.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="346" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOJs-LBqmtLVZv8cH0xAjaNWUahWkODagWXob4hMVvc0Tlb0pFI1kSiq8jAFdp8cjS6Y9pE0206OutjjVdF-DN-uBn6dIAxP_Jy0P2LNwNzEOTx9KI61kqcODkAEigkoBXA1XtZdDxilBK/s640/2013-09-02_1300.png" width="640" /></a></div>
<br />
Однако, возможны ситуации, когда нам нужно выполнить какие-то действия перед началом теста или после его окончания, в этом нам снова поможет плагин; как написать и подключить его к loadtest я расскажу в <a href="http://ap-test-team.blogspot.ru/2013/09/visual-studio-web-performance-5.html" target="_blank">следующей части</a>.Anonymoushttp://www.blogger.com/profile/12347773783326015649noreply@blogger.com0tag:blogger.com,1999:blog-3928796676462303438.post-13743573406901180872013-09-09T10:14:00.004+04:002013-09-10T19:14:28.722+04:00Коллеги, С днем Тестировщика!!!<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
Больше багов в разных областях!</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Поздравляем Всех тестировщиков с праздником! Стабильных билдов, легковоспроизводимых багов и скорейших фиксов!</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<a name='more'></a><br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://static.guim.co.uk/sys-images/Guardian/Pix/pictures/2009/5/18/1242680220727/Scent-testers-researching-001.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://static.guim.co.uk/sys-images/Guardian/Pix/pictures/2009/5/18/1242680220727/Scent-testers-researching-001.jpg" /></a></div>
<br />
<br />
<br />
Справка:<br />
<div style="background-color: white; font-family: sans-serif; font-size: 13px; line-height: 19.1875px; margin-bottom: 0.5em; margin-top: 0.4em;">
<div style="margin-bottom: 0.5em; margin-top: 0.4em;">
<b>День тестировщика</b> — профессиональный день <a href="http://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D1%89%D0%B8%D0%BA" style="background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;" title="Тестировщик">тестировщиков</a>, отмечаемый <a href="http://ru.wikipedia.org/wiki/9_%D1%81%D0%B5%D0%BD%D1%82%D1%8F%D0%B1%D1%80%D1%8F" style="background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;" title="9 сентября">9 сентября</a>.</div>
<div style="margin-bottom: 0.5em; margin-top: 0.4em;">
По легенде, <a href="http://ru.wikipedia.org/wiki/9_%D1%81%D0%B5%D0%BD%D1%82%D1%8F%D0%B1%D1%80%D1%8F" style="background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;" title="9 сентября">9 сентября</a> <a href="http://ru.wikipedia.org/wiki/1947_%D0%B3%D0%BE%D0%B4" style="background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;" title="1947 год">1947 года</a> учёные Гарвардского университета, тестировавшие вычислительную машину Mark II Aiken Relay Calculator, нашли <a href="http://ru.wikipedia.org/wiki/%D0%A7%D0%B5%D1%88%D1%83%D0%B5%D0%BA%D1%80%D1%8B%D0%BB%D1%8B%D0%B5" style="background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;" title="Чешуекрылые">мотылька</a>, застрявшего между контактами <a href="http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%BB%D0%B5" style="background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;" title="Реле">электромеханического реле</a>, и <a class="mw-redirect" href="http://ru.wikipedia.org/wiki/%D0%93%D1%80%D0%B5%D0%B9%D1%81_%D0%A5%D0%BE%D0%BF%D0%BF%D0%B5%D1%80" style="background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;" title="Грейс Хоппер">Грейс Хоппер</a> произнесла слово "bug" (англ. «жук»), ставшее позднее термином, обозначающем компьютерную ошибку. Извлечённое насекомое было вклеено в технический дневник с сопроводительной надписью: «First actual case of bug being found» (англ. «первый случай в практике, когда был обнаружен жучок»). Этот забавный факт положил начало использованию слова «<a href="http://ru.wikipedia.org/wiki/%D0%91%D0%B0%D0%B3" style="background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;" title="Баг">баг</a>» в значении «ошибка». В итоге процесс выявления и устранения причин сбоя в работе компьютера получил название debugging (дебаггинг, «отладка», дословно: избавление от насекомого). А само название профессии возникло от английского слова test, то есть испытание.</div>
</div>
<div style="background-color: white; font-family: sans-serif; font-size: 13px; line-height: 19.1875px; margin-bottom: 0.5em; margin-top: 0.4em; text-align: right;">
<a href="http://ru.wikipedia.org/wiki/%D0%94%D0%B5%D0%BD%D1%8C_%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D1%89%D0%B8%D0%BA%D0%B0" target="_blank">Источник</a></div>
</div>
alexey.chumaginhttp://www.blogger.com/profile/01857219456489660665noreply@blogger.com3tag:blogger.com,1999:blog-3928796676462303438.post-15759543737184576542013-09-06T12:00:00.000+04:002013-09-09T12:21:26.805+04:00Тестирование производительности с помощью Visual Studio Web Performance, часть 3<div dir="ltr" style="text-align: left;" trbidi="on">
<h2 class="tr_bq" style="text-align: center;">
<b>Web Test Plug-in</b></h2>
В <a href="http://ap-test-team.blogspot.ru/2013/09/visual-studio-web-performance-2.html" target="_blank">прошлой статье</a> мы рассмотрели, как создавать базовый класс <a href="http://ap-test-team.blogspot.ru/search/label/%D0%9D%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BE%D1%87%D0%BD%D0%BE%D0%B5" target="_blank">теста производительности</a> и мы теперь добрались до первого плагина. Для чего он вообще нужен? Например, в ситуации, когда вам нужно составить рандомный email, или когда перед тестом нужно создать юзера, а после теста его удалить; возможности большие, осталось только научиться этим пользоваться.<br />
<br />
<a name='more'></a><br />
<br />
Web Test Plug-in - это обычный C# класс. Отличие всего в нескольких деталях, а именно:<br />
<br />
<b>1. Наследование. </b><br />
Для того, чтобы плагин распознавался в студии именно как плагин, его нужно унаследовать от <span style="color: #3d85c6;">WebTestRequestPlugin</span>.<br />
<br />
<b>2. Название основного метода.</b><br />
По сути, мы не будем писать новый метод, мы будем перегружать один из уже существующих в <span style="color: #3d85c6;">WebTestRequestPlugin</span>. Для примера я возьму метод PreRequestDataBinding, который выполняется перед запросом.<br />
<br />
<b>3. Исходящие данные</b><br />
Если мы собираемся передавать какие-то данные из плагина в тест, их тоже нужно объявить и записать в аргументы.<br />
<br />
Итак, суммируя всё вышесказанное мы получаем вот такой код, который создаст одну случайную числовую переменную и передаст её в тест<br />
<br />
<blockquote>
<span style="font-family: Courier New, Courier, monospace;"><span style="color: blue;">using </span>System;</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span style="color: blue;">using </span>System.ComponentModel;</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span style="background-color: white;"><span style="color: blue;">using </span></span>Microsoft.VisualStudio.TestTools.WebTesting;</span><br />
<span style="font-family: Courier New, Courier, monospace;"><span style="color: blue;">namespace </span>WebAndLoadTestProject</span><br />
<span style="font-family: Courier New, Courier, monospace;">{</span><br />
<span style="font-family: Courier New, Courier, monospace;"> <span style="color: blue;">public class </span><span style="color: #3d85c6;">WebPlugin1 : WebTestRequestPlugin</span></span><br />
<span style="font-family: Courier New, Courier, monospace;"> {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> [Description(<span style="color: #783f04;">"Context parameter for random number"</span>)]</span><br />
<span style="font-family: Courier New, Courier, monospace;"> <span style="color: blue;">public </span><span style="color: #3d85c6;">String </span>ContextParameterRandomNumber { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> <span style="color: blue;">public override void</span> PreRequestDataBinding(<span style="color: blue;">object </span>sender, <span style="color: #3d85c6;">PreRequestDataBindingEventArgs </span>e)</span><br />
<span style="font-family: Courier New, Courier, monospace;"> {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> <span style="color: #3d85c6;">Random </span>random = <span style="color: blue;">new </span><span style="color: #3d85c6;">Random</span>();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> <span style="color: blue;">double </span>randomNumber = random.NextDouble();</span><br />
<span style="font-family: Courier New, Courier, monospace;"> e.WebTest.Context.Add(ContextParameterRandomNumber, randomNumber);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> <span style="color: blue;">base</span>.PreRequestDataBinding(sender, e);</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;">}</span></blockquote>
<br />
И это всё, никаких хитростей, всё, что осталось сделать - подключить к тесту, что также делается в пару действий:<br />
В классе webtest вызываем контекстное меню интересующего нас запроса и выбираем пункт Add Request Plug-in, не забывая билдить проект после добавления нового элемента. Если подключить не получается - убедитесь, что класс плагина имеет доступ public. Выберите свой из списка и он добавится в тест.<br />
Обратите внимание на то, что в случае создания плагина, который будет выполнятся перед тестом наследование будет происходить от <span style="color: #3d85c6; font-family: 'Courier New', Courier, monospace;">WebTestPlugin </span>и добавляться плагин будет не к запросу, а к корневому элементу теста (WebTest1).<br />
После того, как плагин добавился нужно зайти в его параметры, где вы найдете переменную <span style="font-family: 'Courier New', Courier, monospace;"><span style="font-size: x-small;">ContextParameterRandomNumber</span></span>, которую мы объявляли в плагине, здесь же ей нужно присвоить глобальное имя. Назовём её RandomNumber.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpgreWAEevEGfCqzDD1URJIAe44wS9LnRFMZVqcEpO4vfSQAuofDfaqbRDZ5pI_uegOUT1f1uJ8YX2Cz8QgBGDgO9ZjTUgZb50G3BA9SDKUKeJYQcMp-36kvEqBJtFyhfg5h6GFsQx4Z4Q/s1600/2013-08-30_1618.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="346" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpgreWAEevEGfCqzDD1URJIAe44wS9LnRFMZVqcEpO4vfSQAuofDfaqbRDZ5pI_uegOUT1f1uJ8YX2Cz8QgBGDgO9ZjTUgZb50G3BA9SDKUKeJYQcMp-36kvEqBJtFyhfg5h6GFsQx4Z4Q/s640/2013-08-30_1618.png" width="640" /></a></div>
<br />
Переходим к запросу google.ru, и заменим параметр "q" на наше число из плагина. Для этого достаточно в поле Value вписать глобальное имя переменной в двойных фигурных скобках - {{RandomNumber}}, после чего значение подтянется автоматически.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWxCXc8z9pZ3pXbfrIgn5-rN7EgJ5VX-f6sC1Flq6ONODjQk2QwjWuFc2wAv9vtlXYJ3ksLUFC3huzAzIVjE1q4v9BrNkJQXFDiiNUSmII38bRIJtxMX_SuTu1-i7J22qXujDAAOF_-0Vd/s1600/2013-08-30_1619.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="346" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWxCXc8z9pZ3pXbfrIgn5-rN7EgJ5VX-f6sC1Flq6ONODjQk2QwjWuFc2wAv9vtlXYJ3ksLUFC3huzAzIVjE1q4v9BrNkJQXFDiiNUSmII38bRIJtxMX_SuTu1-i7J22qXujDAAOF_-0Vd/s640/2013-08-30_1619.png" width="640" /></a></div>
<br />
Вот и всё, в <a href="http://ap-test-team.blogspot.ru/2013/09/visual-studio-web-performance-4.html" target="_blank">следующей части</a> поговорим об объединении множества webtest'ов в один loadtest.</div>
Anonymoushttp://www.blogger.com/profile/12347773783326015649noreply@blogger.com0tag:blogger.com,1999:blog-3928796676462303438.post-79512266484952896432013-09-05T11:55:00.001+04:002013-09-05T11:55:59.147+04:00Сервис генерирования изображений<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5ybaQoMQCQtHgrdLeXxkv6uPhuUulB0Ec7CF3J-F3ORS7VuWpPHEqnyC7-Syqf_zz8ATLijFfV7xl40IopGQ1pc58-nDcuGIHu0pW7yBcguRZAZs052F3S1wU_WUbwkblnnTWXf80z6wt/s1600/2013-09-04_1436.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="91" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5ybaQoMQCQtHgrdLeXxkv6uPhuUulB0Ec7CF3J-F3ORS7VuWpPHEqnyC7-Syqf_zz8ATLijFfV7xl40IopGQ1pc58-nDcuGIHu0pW7yBcguRZAZs052F3S1wU_WUbwkblnnTWXf80z6wt/s400/2013-09-04_1436.png" width="400" /></a><br />
Для облегчения работы будь то тестировщика или прграммиста постоянно разрабатываются новые онлайн сервисы.<br />
<br />
<br />
Например, <a href="http://placehold.it/" target="_blank">Placehold</a>, который генерирует изображения под указанное разрешение. Казалось бы, инструмент придуман специально для веб дизайнеров, чтобы без лишних движений подставлять в макет картинки нужного размера, однако, он может найти применение и в тестировании. Допустим, вам нужно проверить сервис, обрабатывающий изображения, для этого даже необязательно хранить это изображение в проекте, достаточно просто указать ссылку к сервису <a href="http://placehold.it/" target="_blank">Placehold</a> и генерировать случайные (или конкретные) разрешения. Также, для удобства предоставлена возможность выбирать тип изображения, текст, цвет изображения и тд.<br />
Если вы работаете с изображениями, советую вам обратить внимание на этот сервис.<br />
<br />
Также, я был бы очень признателен, если бы вы оставили ссылки с сервисами, с которыми вы работаете на своих проектах; по-настоящему полезные инструменты мы также опубликуем в небольших заметках с описанием. Давайте упрощать друг другу работу!)Anonymoushttp://www.blogger.com/profile/12347773783326015649noreply@blogger.com1tag:blogger.com,1999:blog-3928796676462303438.post-40036727523121461402013-09-04T10:59:00.001+04:002013-09-09T12:19:51.646+04:00Тестирование производительности с помощью Visual Studio Web Performance, часть 2<h2 class="tr_bq" style="text-align: center;">
<b>WebTest</b></h2>
Как я уже говорил в <a href="http://ap-test-team.blogspot.ru/2013/09/visual-studio-web-performance-1.html" target="_blank">первой части цикла</a>, при создании тестового проекта создается также и класс webtest. Есть два пути (если не считать ручного написания xml) наполнения этого класса.<br />
<br />
<a name='more'></a><br />
<br />
<b>1. Ввод данных в студии.</b><br />
Тут всё просто, вызываем контекстное меню корневого элемента теста, в данном случае это WebTest1, и выбираем Add Request. После появления этого элемента в его свойствах нужно заменить ссылку на свою, при этом все параметры ссылки будут автоматически разбиты на дочерние элементы.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhexVLJEXJWYRSHtSAGCbLHQvUxex4qLFO5d4wuSHET7QqsiEyEsCnoQe7AF5Rq6qiAKIvGX8M11vw_ZkJRSrYfqh16Mj7lPYDoWSqSV52DDlzGHW1mDix7hYa14zBP2hTp-3qg00fSDRlt/s1600/2013-08-30_1311.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="346" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhexVLJEXJWYRSHtSAGCbLHQvUxex4qLFO5d4wuSHET7QqsiEyEsCnoQe7AF5Rq6qiAKIvGX8M11vw_ZkJRSrYfqh16Mj7lPYDoWSqSV52DDlzGHW1mDix7hYa14zBP2hTp-3qg00fSDRlt/s640/2013-08-30_1311.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: left;">
У запроса существует также множество других параметров, таких как время обдумывания пользователя перед кликом, метод запроса и т.п., я не буду на этом останавливаться, назначения параметров легко понять из их названия. Помимо запроса из контекстного меню есть возможность добавить циклы, условия и прочее, всё работает по той же схеме - добавляете элемент и меняете параметры, подстраивая их под свои нужды. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<b>2. Запись через IE</b></div>
<div class="separator" style="clear: both; text-align: left;">
Если вы уже записывали тесты через прокси в jmeter, то проблем у вас не возникнет, достаточно нажать кнопку записи - откроется браузер и ваши действия будут помещаться в дерево событий слева.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6V311MOJTxOO31bWi9oIxB88CFIRJ6CUZac2zPippu46lp0hP8RlMjLfdda_g8Rmyt_u_soxp-GhmqteEpbO8ZErp8GDX1vZOvCV5StbDohjpJBxXAZKZX1SxIdIXckMT-7dnePQJwZ3J/s1600/2013-08-30_1320.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="118" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6V311MOJTxOO31bWi9oIxB88CFIRJ6CUZac2zPippu46lp0hP8RlMjLfdda_g8Rmyt_u_soxp-GhmqteEpbO8ZErp8GDX1vZOvCV5StbDohjpJBxXAZKZX1SxIdIXckMT-7dnePQJwZ3J/s320/2013-08-30_1320.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRn2pyVoK-iPUmMdV_3Lu5VDl6Jzs_axY7Ig8ES-nnDfegkrUWCONQN6HWMzEIya_mUwgHc-ZUqKp5rhkY7cW0Q3B-ozYYRCsXwx703qrrqa11uBOk-KgG86X3e3oeZytyA0gEz_uxnBln/s1600/2013-08-30_1324.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="346" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRn2pyVoK-iPUmMdV_3Lu5VDl6Jzs_axY7Ig8ES-nnDfegkrUWCONQN6HWMzEIya_mUwgHc-ZUqKp5rhkY7cW0Q3B-ozYYRCsXwx703qrrqa11uBOk-KgG86X3e3oeZytyA0gEz_uxnBln/s640/2013-08-30_1324.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
По окончании записи достаточно нажать на стоп, чтобы браузер закрылся и студия автоматически сгенерировала удобный вид полученных данных.</div>
<div class="separator" style="clear: both; text-align: left;">
Если вам нужно проверить что-то более конкретное в отклике, нежели его статус, то стоит также добавить Validation Rules, в которых можно сверять внутренний текст, время отклика, тэги, аттрибуты и даже несколько фич SharePoint'а. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQ3jGPC1BC-mLTROYoZxMwsivJgtgdlWOsThMx8u2CB6ZA7czTbj6OczM2N7PKV36C47kDi5nERyFUW4LRzFrQGe2awaGLkO9JSKmNFHLOVVMu6_LbG9VkLCiCj4fVG-gIZwMGwep373Y-/s1600/2013-08-30_1415.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="345" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQ3jGPC1BC-mLTROYoZxMwsivJgtgdlWOsThMx8u2CB6ZA7czTbj6OczM2N7PKV36C47kDi5nERyFUW4LRzFrQGe2awaGLkO9JSKmNFHLOVVMu6_LbG9VkLCiCj4fVG-gIZwMGwep373Y-/s640/2013-08-30_1415.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Всё это также легко настраивается, поэтому пойдем дальше.</div>
<div class="separator" style="clear: both; text-align: left;">
Ещё один плюс, добавляющий гибкости тестам, это подключение внешних источников данных, таких как различные базы данных, excel и csv файлы. Рассмотрим на примере последнего.</div>
<div class="separator" style="clear: both; text-align: left;">
Добавить источник можно нажав кнопку Add Data Source рядом с кнопкой записи. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEia6cf1cmxT8ifuzyr9qs_mpULEYCLzHkHsmiVln8aszYhBt_6RXADcnpGS0zPR5-UlhNKuuUTj1sNK80_N0HG-WO_spUepDC_e4Lp4EcZJUm7JhdT52nnNjBqZorYqFvOqcysw38YIkvvJ/s1600/2013-08-30_1422.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="328" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEia6cf1cmxT8ifuzyr9qs_mpULEYCLzHkHsmiVln8aszYhBt_6RXADcnpGS0zPR5-UlhNKuuUTj1sNK80_N0HG-WO_spUepDC_e4Lp4EcZJUm7JhdT52nnNjBqZorYqFvOqcysw38YIkvvJ/s640/2013-08-30_1422.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
В открывшемся окне выбираем CSV File и кликаем Next. Находим наш файл и студия автоматически преобразует значения внутри в таблицу.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRQM6xZtW2sODB-DvNNNFWS5f_Xx8ymaLepduWtrvUor_08CP-hbHI1pjLNeW6mnlGMBhPQh9XK2hmIq8RWwtQr0NgiaIiSjAYl7WDsgif6fOkfcCrUIvQwi9L-JjRXTJ9VBkpASF6BmmT/s1600/2013-08-30_1426.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="241" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRQM6xZtW2sODB-DvNNNFWS5f_Xx8ymaLepduWtrvUor_08CP-hbHI1pjLNeW6mnlGMBhPQh9XK2hmIq8RWwtQr0NgiaIiSjAYl7WDsgif6fOkfcCrUIvQwi9L-JjRXTJ9VBkpASF6BmmT/s640/2013-08-30_1426.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Остаётся только подключить данные из таблицы непосредственно к тестам. Для этого заходим в настройки любого из параметров запроса и в выпадающем меню поля Value выбираем значение из таблицы.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIF9Ga0B54T1ZQhGbdcyR5WshGVqBIt0weI3Zha7jVDfxmYfU6_hRoANOavaRkvllygjInlz0B5VaG4UQ3a2BlSkXzAwcZHS1W9PonkbjADZ7f77UVK2X7rj6QMyfXAahKqjGAsbqRudns/s1600/2013-08-30_1432.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="346" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIF9Ga0B54T1ZQhGbdcyR5WshGVqBIt0weI3Zha7jVDfxmYfU6_hRoANOavaRkvllygjInlz0B5VaG4UQ3a2BlSkXzAwcZHS1W9PonkbjADZ7f77UVK2X7rj6QMyfXAahKqjGAsbqRudns/s640/2013-08-30_1432.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
В итоге получится так</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSxcPtKs19HRXjwLHxWwv4x2Kv8wi_SdsReoWNGWpnY4g2GgvQlx9WXast60vL5PfImQfpQFASPaJdHCql4bVEBkifpspROaEb7X1uo79AS0E2AH7FxQhOuxgja1p-XVMqwZ66E5VPFY7p/s1600/2013-08-30_1435.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="346" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSxcPtKs19HRXjwLHxWwv4x2Kv8wi_SdsReoWNGWpnY4g2GgvQlx9WXast60vL5PfImQfpQFASPaJdHCql4bVEBkifpspROaEb7X1uo79AS0E2AH7FxQhOuxgja1p-XVMqwZ66E5VPFY7p/s640/2013-08-30_1435.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Как я уже говорил, останавливаться на всех параметрах не будем, их значения понятны из названий, вы можете сами сконфигурировать их так, как будет лучше для ваших тестов. </div>
<div class="separator" style="clear: both; text-align: left;">
Осталось только запустить и порадоваться зелёному значку возле теста! Кнопка запуска находится рядом с иконкой записи теста, а сам запуск может так же вы выполняться в обычном режиме или режиме отладки, плюс возможность пауз.</div>
<div class="separator" style="clear: both; text-align: left;">
Если всё сделано правильно, то после прохождения тест будет помечен как Passed и можно переходить к <a href="http://ap-test-team.blogspot.ru/2013/09/visual-studio-web-performance-3.html" target="_blank">следующей части</a>, где я расскажу, как к тесту производительности подключить С# код.</div>
Anonymoushttp://www.blogger.com/profile/12347773783326015649noreply@blogger.com0tag:blogger.com,1999:blog-3928796676462303438.post-8165789022607276702013-09-02T10:58:00.000+04:002013-09-04T11:03:37.500+04:00Тестирование производительности с помощью Visual Studio Web Performance, часть 1<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.logostage.com/logos/VisualStudio.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="124" src="http://www.logostage.com/logos/VisualStudio.png" width="320" /></a></div>
<br />
Чаще всего, когда речь заходит о тестировании производительности, в голове сразу всплывает Apache Jmeter или SoupUI, поскольку это довольно мощные и функциональные инструменты, а также по причине их свободного распространения. С ними знакомы большинство автоматизаторов, что говорить, даже разработчики зачастую пользуются этими программами, поэтому даже рускоязычной информации о них в интернете в избытке. В отличии от платных инструментов, таких как Test Complete, Load Runner и т.д. В своей работе я столкнулся с необходимостью использовать одного из них, а именно <a href="http://msdn.microsoft.com/en-us/library/vstudio/dd293540.aspx" target="_blank">Visual Studio Web Performance</a>.<br />
На моё удивление, в отличии от многих продуктов Microsoft Web Performance оказался довольно прост для осваивания и вполне нагляден, чего не скажешь о том же Jmeter или Tsung. Всё что понадобится для начала работы - это VS Ultimate, который и включает в себя Web Performance Tools. В цикле статей я расскажу и наглядно покажу, как создавать буквально за минуты свои первые тесты, пользуясь инструментами Visual Studio Ultimate.<br />
В первой части я в общих чертах опишу основные компоненты будущего теста и далее каждая последующая часть будет раскрывать один из них.<br />
<br />
<a name='more'></a><br />
<br />
Итак, первое, что нужно сделать - создать новый тестовый проект.<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtAzFVg5E1f1N5fWSc0a1ZGjz20pfHcYQ1c7d4Gk-sMl9qxTq90NVXWUAEsT3vWiKBDDVKd5_2x4UIHtZImWgUHzNSTlvtNElbnXOMAwHjDDnVkru6p3KNwAQ9UHfA-NFAHSM3_Suu3XjG/s1600/2013-08-29_1725.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="346" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtAzFVg5E1f1N5fWSc0a1ZGjz20pfHcYQ1c7d4Gk-sMl9qxTq90NVXWUAEsT3vWiKBDDVKd5_2x4UIHtZImWgUHzNSTlvtNElbnXOMAwHjDDnVkru6p3KNwAQ9UHfA-NFAHSM3_Suu3XjG/s640/2013-08-29_1725.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
Сразу после создания проекта, внутри появляется пустой <a href="http://ap-test-team.blogspot.ru/2013/09/visual-studio-web-performance-2.html" target="_blank">класс webtest</a>, который будет содержать в себе действия, которые мы собираемся применить к серверу. Эти запросы можно как составлять вручную, так и записывать через браузер.<br />
Следующий класс, с которым мы также столкнемся в процессе разработки - это loadtest. Этот класс поможет нам объединять различные webtest'ы, а также выбирать метрики измерений, настройки распределения нагрузки и многое другое.<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifDgbuUoqwQ_Vsca2fpYTTPXzEosVITy6l13rekfHzfyn1AOq-TuJgWLpruRfqxjVZbn_jaIsAz01MdmHpFj-I_Kugpq3ijadlJWiDfop2XUaLm-KYQpsAQ5vlua36qtpiITQwfYnkC2PL/s1600/%25D1%25841.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="346" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifDgbuUoqwQ_Vsca2fpYTTPXzEosVITy6l13rekfHzfyn1AOq-TuJgWLpruRfqxjVZbn_jaIsAz01MdmHpFj-I_Kugpq3ijadlJWiDfop2XUaLm-KYQpsAQ5vlua36qtpiITQwfYnkC2PL/s640/%25D1%25841.png" width="640" /></a></div>
<br />
Собственно, на этих двух классах и будет держаться наши тесты, однако, чтобы получить возможности более гибкого конфигурирования тестовых данных, очевидно, нужно что-то ещё. На этот случай Microsoft предлагает нам классы плагинов, которые вы можете написать самостоятельно. Они предоставляют возможность выполнять дествия до и после запросов, объявлять глобальные переменные, заполнять пре-тестовые кондиции и много чего другого. Стоит отметить, что помимо нескольких меток, которые позволяют определить класс как Plugin - это обычный C# класс.<br />
Ну и в конце, я скажу пару слов о тест репортах, которые "из коробки" практически в полной мере отвечают потребностям тестировщика в информации о результатах тестов.<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_TjCB5DPYtKkTZOooR4KF8FC9YkxX3BREq90rt6b67-HeBbaqXcZTfCuICQSkYUtTcaz0EhMrwGjkaQeZDxr66jPn-s-RaZrJMRX598ZX-VyohokdrGgFrb3zxtp9tTXZvP0q2FaTU2vY/s1600/2013-08-29_1744.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="346" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_TjCB5DPYtKkTZOooR4KF8FC9YkxX3BREq90rt6b67-HeBbaqXcZTfCuICQSkYUtTcaz0EhMrwGjkaQeZDxr66jPn-s-RaZrJMRX598ZX-VyohokdrGgFrb3zxtp9tTXZvP0q2FaTU2vY/s640/2013-08-29_1744.png" width="640" /></a></div>
<br />
Продолжение читайте в <a href="http://ap-test-team.blogspot.ru/2013/09/visual-studio-web-performance-2.html" target="_blank">следующей части</a>, где мы рассмотрим webtest.Anonymoushttp://www.blogger.com/profile/12347773783326015649noreply@blogger.com0tag:blogger.com,1999:blog-3928796676462303438.post-66692059738523849792013-07-29T15:57:00.000+04:002013-07-29T16:15:23.014+04:00Телемост между Казанским и Петербургским сообществом тестеровщиков!<div dir="ltr" style="text-align: left;" trbidi="on">
Состоится <b>31 июля 2013 г. в 19:00</b> в помещении <a href="http://maps.yandex.ru/?um=so6Wi1bpoos_x5osdnVBmz6tc6qAyifW&l=map" target="_blank">Барс-Медицина</a> (около IT-Парка).<br />
Всем желающим поучаствовать желательно подойти к главному входу в IT-Парк к 18:50. <b>Вход бесплатный!</b><br />
<br />
Телефон для связи +79600572932 (Сергей)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br /></div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-3928796676462303438.post-81784806197879218422013-07-15T09:59:00.000+04:002013-07-15T09:59:34.305+04:00Июльская встреча: Материалы<div dir="ltr" style="text-align: left;" trbidi="on">
Всем привет!<br />
<div>
Представляю вашему внимаю презентации с последней встречи!</div>
<div>
<br /></div>
<div>
<a name='more'></a><br /></div>
<div>
Рекомендую прочитать отзыв от встрече: <a href="http://ap-test-team.blogspot.ru/2013/07/meetigjulyresponse.html" target="_blank">Отзыв</a><br />
<br />
<iframe frameborder="0" height="400" marginheight="0" marginwidth="0" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/24233954" width="476"></iframe>
<iframe frameborder="0" height="400" marginheight="0" marginwidth="0" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/24234210" width="476"></iframe>
</div>
</div>
alexey.chumaginhttp://www.blogger.com/profile/01857219456489660665noreply@blogger.com0tag:blogger.com,1999:blog-3928796676462303438.post-83096845473046341632013-07-15T09:38:00.000+04:002013-07-15T09:38:55.693+04:00Июльская встреча: Отзыв<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="c1" style="direction: ltr; font-size: 11pt; text-align: justify;">
Всем привет!</div>
<div class="c1" style="direction: ltr; font-size: 11pt; text-align: justify;">
Вот и состоялась очередная встреча инженеров по качеству города Казани. В этот раз у нас было просторное помещение, техническое оснащение по последнему слову техники и прочие радости. Поэтому ребята с радостью подготовили 2 доклада к намеченному сроку, которые были восприняты публикой с живым интересом. Но обо всем по порядку.</div>
<div class="c1" style="direction: ltr; font-size: 11pt;">
</div>
<a name='more'></a><br /><br />
<div class="c1" style="font-size: 11pt; text-align: justify;">
Встречу открыл Чипига Сергей докладом “Обзор средств для тестирования JavaScript-кода: QUnit, Jasmine, ZombieJS, PhantomJS, SinonJS и др.”.</div>
<div class="c1" style="direction: ltr; font-size: 11pt; text-align: justify;">
Презентация была обзорного характера без особых углублений в детали и тонкости различных инструментариев и направлена на ознакомление публики с существующими средствами автоматизации тестирования JavaScript-кода как на стороне клиента, так и на стороне сервера (nodejs). Были рассмотрены различные тестовые фреймворки и библиотеки. Интересно было послушать про TDD и BDD-методы тестирования и способы описания тестов. Помимо тестовых фреймворков докладчик рассказал о различных способах тестирования клиентского JavaScripta без участие оконного браузера: phantomJS, zombieJS.</div>
<div class="c1" style="direction: ltr; font-size: 11pt; text-align: justify;">
Как стало ясно из презентации в настоящее время средства для тестирования JavaScript’a многочисленны и активно развиваются. Их стоит изучать и стараться внедрять для автоматизации тестирования веб-ориентированного программного обеспечения.</div>
<div class="c1" style="direction: ltr; font-size: 11pt; text-align: justify;">
Далее инициативу подхватила Елена Кирдяйкина с интереснейшим докладом: “Контроль качества в компании <b><span style="color: red;">iiko</span></b>”</div>
<div class="c0" style="direction: ltr; font-size: 11pt; text-align: center;">
<img height="451" src="https://docs.google.com/document/d/1bbYy9_ocEbJhhSTknQQO5O25PfN1c7b7oV9Fb6HuVNI/pubimage?id=1bbYy9_ocEbJhhSTknQQO5O25PfN1c7b7oV9Fb6HuVNI&image_id=1I6frkJpThk45Oo8a9LDHl8CHNPhiCx99Wh5RhA" width="602" /></div>
<div class="c1" style="direction: ltr; font-size: 11pt;">
Докладчик весьма подробно, наглядно и в тонкостях описала интеграцию процессов тестирования и разработки программного обеспечения компании с применением git-flow.</div>
<div class="c0" style="direction: ltr; font-size: 11pt; text-align: center;">
<img height="480" src="https://docs.google.com/document/d/1bbYy9_ocEbJhhSTknQQO5O25PfN1c7b7oV9Fb6HuVNI/pubimage?id=1bbYy9_ocEbJhhSTknQQO5O25PfN1c7b7oV9Fb6HuVNI&image_id=15IW6a8qiUm-mXdkI2IzL3nWjmxncs0Ix3r9oHw" width="640" /></div>
<div class="c1" style="direction: ltr; font-size: 11pt;">
Было очень интересно узнать о том, как много времени компания уделяет тестированию, какие должностные обязанности возложены на тестировщиков, чем они занимаются, и чем НЕ занимаются, о том какими еще средствами по мимо тестирования обеспечивается качество</div>
<div class="c1" style="direction: ltr; font-size: 11pt;">
выпускаемой продукции.</div>
<div class="c0" style="direction: ltr; font-size: 11pt; text-align: center;">
<img height="498" src="https://docs.google.com/document/d/1bbYy9_ocEbJhhSTknQQO5O25PfN1c7b7oV9Fb6HuVNI/pubimage?id=1bbYy9_ocEbJhhSTknQQO5O25PfN1c7b7oV9Fb6HuVNI&image_id=1aNr0zlSQT_RwEfU8M1DwBWgKnqwNyYCHkAj5-g" width="664" /></div>
<div class="c2 c1" style="direction: ltr; font-size: 11pt; height: 11pt;">
</div>
<div class="c1" style="direction: ltr; font-size: 11pt;">
В конце презентации у меня сложилось стойкое мнение, что именно таким и должно быть настоящее Quality Assurance. Тестирование интегрировано практически во все стадии производства программного обеспечения, многое автоматизировано, на 1 тестировщика приходится не более 3 программистов. Видно что в компании процессы тестирования поставлены четко и давно отлажены.</div>
<div class="c2 c1" style="direction: ltr; font-size: 11pt; height: 11pt;">
</div>
<div class="c0" style="direction: ltr; font-size: 11pt; text-align: center;">
<img height="507" src="https://docs.google.com/document/d/1bbYy9_ocEbJhhSTknQQO5O25PfN1c7b7oV9Fb6HuVNI/pubimage?id=1bbYy9_ocEbJhhSTknQQO5O25PfN1c7b7oV9Fb6HuVNI&image_id=1sAxQnO8UxkO42vHyMtoo3A5NRHc8LrwEgXa7JA" width="676" /></div>
<div class="c0" style="direction: ltr; font-size: 11pt; text-align: center;">
Публика с интересом слушала докладчиков, награждала аплодисментами и актуальными вопросами</div>
<div class="c0" style="direction: ltr; font-size: 11pt; text-align: center;">
<img height="486" src="https://docs.google.com/document/d/1bbYy9_ocEbJhhSTknQQO5O25PfN1c7b7oV9Fb6HuVNI/pubimage?id=1bbYy9_ocEbJhhSTknQQO5O25PfN1c7b7oV9Fb6HuVNI&image_id=1VzPzdbkLoK4r1oDA55fgCn9fSDDLGenmEAPQIQ" width="648" /></div>
<div class="c0" style="direction: ltr; font-size: 11pt; text-align: center;">
Вопросы и обсуждения возникали прямо по ходу докладов</div>
<div class="c2 c1" style="direction: ltr; font-size: 11pt; height: 11pt;">
</div>
<div class="c1" style="direction: ltr; font-size: 11pt;">
После презентации ребята расположились на диванчиках и стульях вокруг стола и принялись обсуждать насущные вопросы и проблемы, делиться житейским опытом и хитростями.</div>
<div class="c1" style="direction: ltr; font-size: 11pt;">
Обсуждали много интересных вещей, в том числе организация распределенных команд; как пытаются внедрить процессы тестирования, и с каким порой непониманием со стороны руководства приходится при этом сталкиваться; разработка и тестирования клиентских расширений для баз данных от представителя ижевской компании, занимающей написанием скриптов для баз данных Oracle.</div>
<div class="c0" style="direction: ltr; font-size: 11pt; text-align: center;">
<img height="475" src="https://docs.google.com/document/d/1bbYy9_ocEbJhhSTknQQO5O25PfN1c7b7oV9Fb6HuVNI/pubimage?id=1bbYy9_ocEbJhhSTknQQO5O25PfN1c7b7oV9Fb6HuVNI&image_id=1VfP1vaWmRNU7kvRobsGgOozaAGxkogkP3vQ_Lg" width="633" /></div>
<div class="c0" style="direction: ltr; font-size: 11pt; text-align: center;">
Скептические выражения говорят о явном несогласии с оратором :)</div>
<div class="c0 c2" style="direction: ltr; font-size: 11pt; height: 11pt; text-align: center;">
</div>
<div class="c0" style="direction: ltr; font-size: 11pt; text-align: center;">
<img height="503" src="https://docs.google.com/document/d/1bbYy9_ocEbJhhSTknQQO5O25PfN1c7b7oV9Fb6HuVNI/pubimage?id=1bbYy9_ocEbJhhSTknQQO5O25PfN1c7b7oV9Fb6HuVNI&image_id=1wF_C_RuYjg7uUbGzEt2fgQrmlvrWfT79OV7uUQ" width="671" /></div>
<div class="c0" style="direction: ltr; font-size: 11pt; text-align: center;">
Живая полемика отражается на лицах участников</div>
<div class="c2 c1" style="direction: ltr; font-size: 11pt; height: 11pt;">
</div>
<div class="c0" style="direction: ltr; font-size: 11pt; text-align: center;">
<img height="495" src="https://docs.google.com/document/d/1bbYy9_ocEbJhhSTknQQO5O25PfN1c7b7oV9Fb6HuVNI/pubimage?id=1bbYy9_ocEbJhhSTknQQO5O25PfN1c7b7oV9Fb6HuVNI&image_id=1hXnf156eCpcrxita_wK8wKPdkADDMe512QKxaA" width="660" /></div>
<div class="c0" style="direction: ltr; font-size: 11pt; text-align: center;">
После великолепного доклада Лена спит с улыбкой младенца :)</div>
<div class="c2 c1" style="direction: ltr; font-size: 11pt; height: 11pt;">
</div>
<div class="c1" style="direction: ltr; font-size: 11pt;">
К слову стоит сказать, на встрече по мимо инженеров по качеству присутствовали и программисты, в том числе и ваш покорный слуга. И это весьма полезно послушать их точку зрения и отношение к тестированию. Кстати говоря, было бы здорово приглашать на традиционные встречи сообщества и программистов и с ними обсуждать смежные темы программирования и тестирования. Возможно в конце концов найдем ответ на фундаментальный вопрос: “Откуда берутся баги?”.</div>
<div class="c1" style="direction: ltr; font-size: 11pt;">
В приятной беседе незаметно пролетело 2 часа и участники стали собираться домой.</div>
<div class="c0" style="direction: ltr; font-size: 11pt; text-align: center;">
<img height="497" src="https://docs.google.com/document/d/1bbYy9_ocEbJhhSTknQQO5O25PfN1c7b7oV9Fb6HuVNI/pubimage?id=1bbYy9_ocEbJhhSTknQQO5O25PfN1c7b7oV9Fb6HuVNI&image_id=1KlUuKw5h6VA7kRDIYvDU8lFFUfT4FQeLzShG8Q" width="663" /></div>
<div class="c0" style="direction: ltr; font-size: 11pt; text-align: center;">
Перед расставанием фото на память</div>
<div class="c2 c1" style="direction: ltr; font-size: 11pt; height: 11pt;">
</div>
<div class="c1" style="direction: ltr; font-size: 11pt;">
Однако на следующей встрече мы планируем грандиозное мероприятие, прецедентов которому еще не было! Организация прямого телемоста между Казанским и Питерским сообществом тестировщиков по высококачественному каналу связи! Предварительно телеконференция планируется на начало августа, и в настоящее время организаторы активно прорабатывают детали проведения встречи. Следите за новостями в нашем <a href="http://ap-test-team.blogspot.ru/" target="_blank">блоге </a>и <a href="https://twitter.com/kazanqacomm" target="_blank">твиттере</a>! Успехов и до новых встреч!</div>
<div class="c1 c2" style="direction: ltr; font-size: 11pt; height: 11pt;">
</div>
<div class="c1" style="direction: ltr; font-size: 11pt;">
Обзор подготовил программист по должности и вечный тестировщик и исследователь по духу Чипига Сергей</div>
</div>
alexey.chumaginhttp://www.blogger.com/profile/01857219456489660665noreply@blogger.com1