Тестуємо функціонал під різних IP
Привіт усім!
Сьогодні я хочу поділиться однієї з можливістю тестування функціоналу веб додатку з під різних IP адрес. Так як в топіку багато букв (і навіть картинки є!) , Вирішила я зробити зміст з навігацією.
Зміст
- Передмова
- Формулювання завдання
- Пошуки і фрагменти рішень
- Від теорії до практики
- Технічна комплектація рішення
- Налаштування оточення для роботи з додатком
- Запуск програми
- Література
Передмова
Кілька тижнів тому до мене в скайп постукав один таємничий незнайомець, і запитав мене ради , яким способом можна перевірити з боку користувача інтерфейсу те, що користувач після 3 -х спроб введення неправильного пароля був заблокованийпо IP на 5 хвилин. До цього я не зустрічала подібних завдань , і мені здалося цікавим в цьому трохи розібратися. Результатом своєї роботи я і хочу поділитися.
Формулювання завдання
Тест кейс з його висловлювань я накидала наступний
Назва : Блокування входу в систему за IP після невірно введених даних
- Відкриваємо в браузері сторінку входу в систему
- Вводимо логін
- Вводимо невірний пароль
- Натискаємо кнопку входу
- Перевіряємо , що на сторінці відображається помилкапро невірно введеному логін/пароль
- Повторюємо дії з другого по п'ятий крок ще 2 рази
- Перевіряємо , що на сторінці відображається помилка про перевищення невдалихспроб входу в систему
- МіняємоIP адреса
- Відкриваємо в браузері сторінку входу в систему
- Вводимо логін
- Вводимо вірний пароль
- Натискаємо кнопку входу
- Перевіряємо , що ми успішноувійшли в систему
В розпорядженні у мене небуло для користувача інтерфейсу , єдино , що я знала , що форма аутентифікації в додатку стандартна : канал шифрований на базі HTTPS, поле введення логіна, поле введення пароляі власне кнопочка увійти.
Пошуки і фрагменти рішень
Після визначення завдання і неуспішного пошуку готових рішень мені стало ясно , що для взаємодії з інтерфейсом можна взяти Selenium Webdriver( який мені найбільше знаком , ніж інші подібні рішення) , який , крім усього іншого , може допомогти закрити питання з можливою зміною DOMмоделі після завантаження сторінки або в результаті взаємодії з UI(за допомогою JavaScript' а наприклад).
В результаті пошуку коштів по зміні IPдля тестування веб додатку я зупинилася на вирішенні під назвою TOR. По суті цей інструмент вирішує питання збереження анонімності користувачів в мережі за рахунок того , що запит від клієнта до сервера проходить через мережу проксірующіх вузлів в результаті залишаючи наш реальний IPневидимим для кінцевого сервера . Для більш наочного сприйняття я постаралася це зобразити на малюнку нижче:
У теорії , кожен новий запит може піти через інші мостові вузли( relay) , але на практиці я цього так і не побачила . Перевіряла я таким чином : виконувала запит за визначенням свого зовнішнього IPадреси до різних веб ресурсів , і всі вони показували мені один і той же TOR'овскійIPадресу , отриманий в початку . Може бути перемикання між мостовими вузлами( relay) спрацьовує в аварійному випадку , наприклад , коли мостовий вузол( relay) не відповідає , наприклад з малюнка вище , якщо б вузол в Німеччинивпав , і Українапересоедініть з США, як я показала на малюнку нижче:
Назви країнна моїх малюнках - це лише умовності , які підкреслюють , що сервера( вузли) можуть знаходиться в будь-якомукуточку нашої планети.
Від теорії до практики
Реалізовувати рішення по тест кейсу я НЕ стала , так як думаю , що багато хто знайомий з APISelenium Webdriver'а, а якщо немає , то існує багато класних статей на цю тему , що не складе великої праці знайти те , що вам буде до душі. З завдання таємничого незнайомця, описаної на початку топіка , я взяла лише цікавий для себе шматочок(так як моя відповідь незнаю на вирішення його проблеми , його влаштував швидше , ніж я навіть чекала ...). Цей солодкий шматочоквідноситься до автоматизаціївзаємодії з браузером від іменііншого хоста( комп'ютера) . В результаті я написала додаток з консольнимінтерфейсом. Все, що додаток вміє робити , це відвідувати різні джерела по HTTP/ HTTPS, передані до нього в якості аргументу. Якщо буде бажання до додатку приробити хвіст ( образно) , то вихідні коди є в відкритому доступі . Викачати вихідні коди програми можна за допомогою команди:
git clone [email protected] : irinkav/anonymous - lover.git. Фінальну версію свого рішення я зобразила наступним чином:
Технічна комплектація рішення
Написала додаток на наступних технологіях :
- Apache Maven( maven.apache.org ) - для надання форми додатком (допомагає в збірці, управлінню залежностями... )
- Selenium Webdriver() - для взаємодії з веб сторінками при допомогою реальногобраузера
- Jsoup( jsoup.org ) - спадщина , яке залишилося в коді , і досить непогано себе там почуває. Використовувала його для виконання запитів за контентом для швидкого отримання інформації про свій зовнішній IP. Це рішення набагато легше Selenium Webdriver'ачерез те , що ніяких браузерів не потрібно піднімати, а всього лише будувати запит ( GET/ POST... ) до веб сервера за контентом , і працювати з DOMмоделлю контенту за допомогою зручного APIна базі CSS selector'ов...
- commons - exec() - для запуску зовнішніх програм. Я запускаю консольний TOR Socks проксі серверза допомогою цієї бібліотеки. Чому вибрала її ? Тому що вона вміє породжувати дочірній процесвід основного( процесу програми ) і управлятийого життєвим циклом . Наприклад , по завершенню основного процесу тушатся всі його підпроцеси породжені ним (за допомогою ShutdownHookProcessDestroyerхука ) . Це потрібно мені для того , щоб по кожному новому запуску додатка стартував TOR Socks проксі серверяк дочірній процес, чіпляв IP, і я його могла використовувати для серфінгу просторів інтернету . Про консольному TOR Socks проксі серверіпоговорю трохи і нижче у статті
- commons - cli() - для спрощення роботи з приходять аргументами з командного рядка
- консольний TOR Socks проксі сервер( www.torproject.org/index.html . en ) - власне для проксінг трафіку між браузеромі веб сервером. Використовую Torprojectреалізацію TORклієнта.
Своє додаток перевіряла на двохплатформах: Linuxі Windowsі , звичайно ж , у мене все працювало;-)
Налаштування оточення для роботи з додатком
Для налаштування оточення на роботу через TORмережу за допомогою моєї програмки потрібно :
- Завантажити та встановити Tor Browser Bundle(). Він подається в різному вигляді , тобто у нього збіркиє під різні платформи Windows/ Mac/ Linux.
- Завантажити та встановити Java SE 7 +(). Я перевіряладодаток на 7 версії , тому за молодші версії сказати нічого не можу , власне, як і за старші
- Завантажити та встановити Apache Maven 3 +( maven.apache.org/download . cgi )
Запуск програми
Для того , щоб запустити програму нам потрібно знайтимісце , куди ми встановили Tor Browser Bundle, і скопіювати повні шляхи ( бажано) до виконуваного файлу Tor tor.exe( Tor/torу випадку з Linux, і , підозрюю , на Mac'етакож ...) і до директорії Data. Вони нам знадобляться на наступному кроці .
- tor.exe- власне консольний TOR Socks проксі сервер
- Data- директорія , де TOR Socks проксі серверзберігає свої конфігурації
Отже ,
- Заходимо в директорії з програмою
- Запускаємо командний рядок( консоль, термінал, cmd... )
- Виконуємо в директорії команду на складання програми: mvn clean install
- З target/anonymous-lover-1.0-dist.zipкопіюємо архів куди душі завгодно ( чому так я назвала додаток , напишу в кінці статті , щоб суть чистіше тримати )
- Розпаковуємо архів anonymous - lover -1.0 - dist.zip
- Заходимо в розпакованих архів
- Виконуємо з командного рядка(в моєму прикладі нехай буде така команда) :
java - jar anonymous - lover - 1.0.jar - url ' http://dou.ua/forums/topic/9914/' - use - proxy - check - ip - tor - proxy - path ' c : _tools torBrowser Tor tor.exe ' - tor - proxy - data - directory - path 'C : _tools torBrowser Data '
, де- anonymous - lover - 1.0.jar- виконуваний Javaархів
- - url- сторінка, яку ми хочемо відвідати. Результат сторіночки зберігається в директорію outputкореневої директоріїпрограми
- - use - proxy- зробити відвідування безпечним( в теорії для цього був розроблений TOR) , тобто використовувати режим проксінг трафіку за допомогою TORмережі
- - check - ip- перевірити IPі записати його у файл для нащадків ( жарт) . Файл лягає в директорію outputкореневої директоріїпрограми . Якщо не хочете перевіряти зовнішній IP, то просто опускайте цей аргумент при спілкуванні з додатком
- - tor - proxy - path- шлях до файлу запуску TOR Socks проксі сервера
- - tor - proxy - data - directory - path- шлях до файлу конфігурації TOR Socks проксі сервера
У команді малося на увазі , що браузер Firefoxбув встановлений в відоме для Selenium Webdriver'амісце. Однак якщо це не так , то завжди можна скористатися ще одним аргументом : - firefox - binary - path- вказує на шляхдо файлу запуску Firefoxбраузера . Наприклад , значеннямцього аргументу може бути : c : _tools firefox firefox.exe.
Також потрібно мати на увазі , що за замовчуванням TOR Socks проксі сервервідкриває і слухає Socksпорт під номером 9150 , але це можна змінити правкою в файл конфігурації в Data/Tor/torrc - defaultsв рядок з SocksPort 9150. Після зміни може знадобитьсядати моєму додатком зрозуміти, на якому портекрутиться ( слухає) проксі . Зробити це можна за допомогою аргументу - proxy - port- порт TOR Socks проксі сервера( SocksPortпараметр з Data/Tor/torrc- defaults) .
Іншу корисну інформацію з TOR Socks проксі серверуможна черпнути за посиланням: .
PS : Додаток назвала anonymous - lover, так як вдома нудно щось писати без родзинки. А тут , ніби як, і з назви зрозуміло, чим додаток є для сторіночок .
Вообщем- то на цьому і закінчилася моя гра з TOR'ом .
Мені було б цікаво дізнатися з коментарів до топіку , чи є будь інший спосібзробити теж саме , і чим це могло б бути краще/ гіршезапропонованого мною способу в контексті тестування веб додатків.
Спасибі за увагу .
Література
За час вирішення проблеми користуваласятакими джерелами:
- - Тут різноманітна документація на APISelenium Webdriver'а
- - дружелюбна стаття порівняно WebDriverі Selenium RCрішень
- - Тут черпнув знань з приводу внутрішньої кухні Selenium WebDriver
- - набула розуміння того , навіщо і як влаштована TORмережу
- - Тут подивилася , як працює TOR Socks проксі серверу наближенні до Torprojectреалізації
- - тут наочно показано процес внутрішньої цибулевої маршрутизаціїв TORмережі
- www.torproject.org/.. . - manual.html.en - документація по тому , як можна використовувати консольний TOR Socks проксі сервер
- - цей туториал з використання Apache Commons Execбібліотеки мені більше сподобався , ніж офіційний -
- Приклади використання бібліотеки Apache Commons Exec:
- - цей туториал з використання Apache Commons CLIбібліотеки
- Решта, як і все попереднє , власне , - через Google
Опубліковано: 01/06/14 @ 01:58
Розділ Різне
Рекомендуємо:
31 травня, Одеса - Майстер-клас Руслана Шевченка " Введення в scala + akka "
12 липня, Київ - Майстер-клас "Автоматизація фронтенда " від Роберта Харитонова
Бесіда з Романом Хміль, COO Ciklum (частина 2 )
21 - 24 липня , Одеса - V конференція веб- розробників WebCamp 2014
10 речей , які ми дізналися при побудові технологічної компанії