На 11 апреля анонсирована очередная встреча сообщества IT talk. IT talk – это открытое IT-сообщество, участником которого может стать каждый желающий и интересующийся развитием IT-отрасли. Темой встречи выбрана «Мотивация через понимание». Вот краткое описание:
Если вы делаете профессиональную или менеджерскую карьеру, неизбежно сталкиваетесь с ситуацией, когда коллеги не делают то, что нужно, или вы не хотите делать то, что требуют от вас. Вместо вопросов «как сделать это?» и «как сделать хорошо?», в голове роятся вопросы «а зачем?», «а кому это нужно?» и «почему я?». Найти выход из таких ситуаций – непростая задача, и выручавший нас мощный интеллект все чаще мечется, не находя решения. Не хватает то ли данных, то ли мудрости, то ли просто способности увидеть всю картинку. Помочь нам может множество теорий и концепций, от диалектики до agile manifest. Хочется поговорить про некоторые универсальные принципы и одну интересную теорию, и попробовать сделать несколько упражнений.
В качестве докладчика выступит Михаил Завилейский – генеральный директор DataArt. Он часто выступает на конференциях, в том числе, на IT People в Минске и IT Conf в С.-Петербурге. В сентябре 2012 на IT Jam в Киеве вызвал овации докладом «Три лика будущего», недавно дал интервью DOU, подкаст в рубрике «Откровенно про IT-карьеризм». Подробнее о Михаиле Завилейском можно почитать тут.
Участие во встречах IT talk БЕСПЛАТНОЕ. Регистрация участников обязательна! Количество место ограничено!
Место проведения: Харьковский национальный экономический университет, пр. Ленина 9а, актовый зал. Начало в 19:00. Не опаздывайте!
Практически каждый тестовый сценарий состоит из трех частей:
В мире программирования такие методы принято называть setUp, test, tearDown:
В контексте web приложений и языка программирования Java, это будет выглядеть следующим образом:
@Before public void setup() { //Login to the system steps.login(); } @Test public void addNewMember() { // Test Logic steps.openAddNewMember(); steps.addMember(newMember); asserts.thatEditUserPageOpened(); asserts.thatUserPresentInViewMembers(newMember.getName()); } @AfterMethod public void tearDown() { //Removing created member steps.removeMember(newMember.getName()); }
Все функции реализованы с использованием WebDriver API, то есть взаимодействуют с браузером напрямую.
Пример функции removeMember:
public void removeMember(String name) { viewMembersPage.open(); viewMembersPage.clickDeleteMemberBy(name); viewMembersPage.acceptConfirmation(); } public void clickDeleteMemberBy(String name) { driver.findElement(By.xpath(String.format(CELL_MEMBER_NAME + LINK_DELETE_MEMBER, name))).click(); }
Это простой пример. Но представьте каким количеством действий может обладать функция tearDown() для более комплексной системы. Или когда эта функция встречается в каждом тесте. Все это значительно отразится на скорости выполнения тестов.
Самый простой выход из ситуации, который я применяю на своих проектах – это использование библиотеки HttpClient (библиотека доступна в дистрибутиве selenium). Это бесплатная Java библиотека, позволяющая формировать HTTP запросы, отправлять их на сервер и принимать ответы в виде Java объектов.
При помощи этой библиотеки возможно самостоятельно формировать необходимые запросы, чтобы взаимодействовать с тестируемой системой посредством обращения к серверу, минуя взаимодействие с браузером. Таким образом, наши функции будут отрабатывать быстрее.
Как это выглядит:
private static int deleteUser(String name) throws IOException { HttpGet deleteUserRequest = new HttpGet("http://cells.org.ua/scrum-selenium/admin/pageDeleteMember.php?memberID=" + name); HttpResponse response = getHttpClient().execute(deleteUserRequest); return response.getStatusLine().getStatusCode(); } private static DefaultHttpClient getHttpClient() { if (httpClient == null) { PoolingClientConnectionManager cm = new PoolingClientConnectionManager(); cm.setMaxTotal(100); httpClient = new DefaultHttpClient(cm); } return httpClient; }
Для тех случаев, когда в вашу систему нужно предварительно залогиниться, вызываем POST запрос на вход до вызова функции removeMember.
Пример POST запроса, функция login:
private static int login() throws IOException { HttpPost loginRequest = new HttpPost("http://cells.org.ua/scrum-selenium/admin/pageHome.php"); List<NameValuePair> credentials = new ArrayList<NameValuePair>(); credentials.add(new BasicNameValuePair("username", "admin")); credentials.add(new BasicNameValuePair("password", "admin")); loginRequest.setEntity(new UrlEncodedFormEntity(credentials, Consts.UTF_8)); HttpResponse response = getHttpClient().execute(loginRequest); return response.getStatusLine().getStatusCode(); }
Пример класса на GitHub.
Небольшие замеры
long start = System.nanoTime(); steps.removeMember(newMember.getName()); // HttpActions.removeMember(newMember.getName()); long elapsedTime = System.nanoTime() - start;
Среднее время выполнение с использованием WebDriver API ~ 1055 milliseconds.
Среднее время выполнение с использование HTTPClient ~ 360 milliseconds.
Заменить WebDriver на использование HttpClient рискованно, так как мы принимаем все риски, связанные с работой приложения в браузере. Потому все, что вызывается внутри функции test, лучше делать при помощи WebDriver API, так как мы эмулируем действия конечного пользователя. Подготовительную же или завершающую части можно отнести на HttpClient.
Как альтернативу можно использовать HtmlUnit, этот инструмент работает по похожему принципу, но обернут в WebDriver API. При этом стоит учитывать риски, которые ограничивают работу HtmlUnit, а именно работа с тяжелыми JavaScript приложениями. При помощи HttpClient мы сами формируем запросы на сервер, что дает нам больше гибкости и снижает вероятность головной боли.
Все примеры кода доступны на GitHub.
Не хочешь пропускать ничего интересного? Подпишись на ленту RSS или следи за нами в Twitter!
Нехватка времени становится все глобальнее. Я случайно заметил, что уже ооочень давно не выпускал рубрику “полезного чтива”. Накопилось за это время:
А вот список интересного видео для просмотра:
Читайте и набирайтесь новых знаний!
Не хочешь пропускать ничего интересного? Подпишись на ленту RSS или следи за нами в Twitter!
Мы уже очень давно не проводили встречи клуба, прошло почти 3 месяца с последней встречи. 🙁 Причины банальны – нехватка времени и низкая активность потенциальных докладчиков. Тем не менее, мы решили возобновить встречи и провести очередную 2 апреля. Темой встречи станет использование фреймворков для интеграции (Apache Camel, String Integration и прочих).
Часто в приложении необходимо организовать взаимодействие с внешними сервисами, подсистемами, каналами данных. Существует множество решений, которые помогают упростить эту интеграцию и избавить разработчиков от необходимости писать код на повторяющиеся задачи.
В качестве докладчика выступит Виталий Тимчишин с докладом на тему применения Apache Camel. У Виталика большой опыт построения масштабируемых распределенных систем на Java. Он поделится своими знаниями и опытом с участниками встречи:
Что важнее, код или данные и где проходит граница? Apache Camel предлагает отталкиваться от потоков данных и “нанизывать” бусины обработчиков, сплетая ваше приложение в единое целое. Давайте помотрим, какие жемчужины предлагаются “из ларца”, как можно просто добавить свои и что мы сможем из них сплести.
Вторым докладчиком будет Роман Сорока. Он представит и покажет в действии Spring Integration.
Место проведения мы объявим за неделю до встречи, потому что оно будет зависеть от количества желающих посетить встречу. Последний раз собралось больше 70 участников.
Официальное начало встречи по-прежнему в 19:00, завершение в 23:00. Стоимость участия 80 гривен при оплате заранее, 120 гривен при оплате на месте. Пива, пиццы и кофе с печеньками хватит на всех. Регистрация обязательна. Все детали по оплате будут высланы вам после успешного прохождения регистрации. Количество мест ограничено!
Не хочешь пропускать ничего интересного? Подпишись на ленту RSS или следи за нами в Twitter!
Мы стартуем новое направление тренингов по тематике облачной разработки! Идея родилась достаточно давно, потому что интерес к облачной разработке достаточно большой и различные IaaS/PaaS решения становятся все более популярными. Наши тренеры имеют достаточно большой опыт работы “в облаках” и им есть чем поделиться.
Начнем мы как ни странно с PHP и платформы Microsoft Azure. В сотрудничестве с Microsoft мы проведем целых 5 тренингов в конце марта и начале апреля на тему «Масштабируемые РНР приложения на Azure». Каждый тренинг рассчитан на один день и предполагает следующую программу:
1. Первые шаги – разворачивание веб сайта на Azure
Вы зарегистрируете себе аккаунт в Azure и увидите, как просто можно начать работать с облаком. После этого с нуля разработаете простое PHP/MySQL приложение и настроите его доставку в облако с использованием Git в Azure Web Sites.
2. Использование компонентов Azure.
Вы узнаете, как использовать основные компоненты Azure в своих приложениях. Будут рассмотрены сервисы хранения данных: SQL Azure, Storage Table, Storage Blob, Storage Queue; кеширования Windows Azure Caching.
3. Что такое «Облачный сервис» и как его создать на РНР?
В данной части вы узнаете, что такое облачный сервис (Cloud Service) и его отличие от веб сайтов (Web Sites). Мы расскажем, когда нужно использовать облачные сервисы. Вы перенесете созданный ранее сайт на облачный сервис, научитесь создавать приложения с несколькими ролями и настраивать взаимодействие между ними.
4. Диагностика и управление сервисами в Azure.
Научитесь использовать сервис диагностики Azure. На основании его данных сможете масштабировать свое приложение путем изменения количества виртуальных машин в зависимости от нагрузки.
Тренинг будет проводить наш опытный тренер Иван Мосев. Иван – архитектор и разработчик, имеющий более 9 лет опыта разработки на PHP и Python. Последние 7 лет занимается разработкой web-приложений на PHP. За это время прошел путь от простого разработчика до технического директора. Успешно применяет различные практики XP и Scrum в своих проектах. С 2006 года применяет разработку через тестирование. Является приверженцем инженерных практик и стремится донести свою точку зрения до заказчиков и других разработчиков. Автор тренинга “TDD в PHP”. С 2011 года активно использует облачные решения в своих проектах.
Самая приятная новость – все тренинги будут проводиться бесплатно. От вас требуется лишь знание PHP и основ SQL на базовом уровне, а также желание узнать больше об облачной разработке на PHP. Количество мест ограничено, поэтому действует предварительная регистрация. Даты проведения тренинга: 25, 26, 29, 30 марта и 6 апреля. Адрес места проведения: Киев, ул. Дегтяревская 48, оф. 411, Учебный Центр “Сетевые Технологии”.
Не хочешь пропускать ничего интересного? Подпишись на ленту RSS или следи за нами в Twitter!
Приближается весна и мы хотим анонсировать нашу очередную ежегодную конференцию, которая вот уже третий год соберет многих Java разработчиков из разных стран в Киеве – JEEConf 2013. Она как обычно назначена на самые теплые весенние деньки 24-25 мая.
JEEConf – это ежегодная конференция, целью которой является собрать вместе всех, кто использует Java технологии для разработки. Конференция уже проходит 2 года и в прошлом году собрала более 650 участников из 9 стран.
В этом году конференция впервые пройдет в два дня. Нас много об этом просили и мы решили пойти на этот эксперимент. Будет больше времени на общение для участников и докладчиков. В то же время, мы сократим количество параллельных потоков до 2-3, чтобы дать возможность посетить интересные доклады и не разрываться между сценами.
Задача конференции JEEConf заключается в том, чтобы собрать как можно больше практиков и осветить процесс разработки приложений с помощью современных Java технологий. Количество “сухих” теоретических докладов будет сведено к минимуму, а основной акцент будет сделан на практическое применение и разработку реальных проектов.
Программа конференции уже во всю формируется и на данный момент подано более 25 заявок на доклады. Мы решили больше времени уделить низкоуровневым вещам и возможностям JDK, что особенно актуально с выходом JDK 8 этим летом. При этом, будет достаточно много докладов о библиотеках и фреймворках для разработки масштабируемых распределенных систем на Java.
Финальная версия программы будет опубликована 10 апреля. У вас еще есть время присоединиться к составу докладчиков!
Количество участников конференции будет ограничено. Мы планируем собрать 800-1000 человек. Этап ранней регистрации открылся 4 марта и за 24 часа все билеты были выкуплены. Поэтому мы сделали дополнительный этап, на котором будут доступны 200 билетов по цене 1450 гривен, чтобы дать возможность участникам прошлых лет присоединиться к нам по минимальной цене. Как только эти билеты будут распроданы, начнутся основные этапы регистрации. На данный момент осталось чуть больше 50 билетов.
Вы можете получить скидку 10% при групповой регистрации (группа от 5 человек). Поэтому собирайте своих товарищей и коллег и мы будем рады видеть вас на конференции! Присоединяйтесь, будет интересно!