Тестуємо функціонал під різних IP

Привіт усім!

Сьогодні я хочу поділиться однієї з можливістю тестування функціоналу веб додатку з під різних IP адрес. Так як в топіку багато букв (і навіть картинки є!) , Вирішила я зробити зміст з навігацією.

Зміст

  1. Передмова
  2. Формулювання завдання
  3. Пошуки і фрагменти рішень
  4. Від теорії до практики
  5. Технічна комплектація рішення
  6. Налаштування оточення для роботи з додатком
  7. Запуск програми
  8. Література

Передмова

Кілька тижнів тому до мене в скайп постукав один таємничий незнайомець, і запитав мене ради , яким способом можна перевірити з боку користувача інтерфейсу те, що користувач після 3 -х спроб введення неправильного пароля був заблокованийпо IP на 5 хвилин. До цього я не зустрічала подібних завдань , і мені здалося цікавим в цьому трохи розібратися. Результатом своєї роботи я і хочу поділитися.

Формулювання завдання

Тест кейс з його висловлювань я накидала наступний

Назва : Блокування входу в систему за IP після невірно введених даних

  1. Відкриваємо в браузері сторінку входу в систему
  2. Вводимо логін
  3. Вводимо невірний пароль
  4. Натискаємо кнопку входу
  5. Перевіряємо , що на сторінці відображається помилкапро невірно введеному логін/пароль
  6. Повторюємо дії з другого по п'ятий крок ще 2 рази
  7. Перевіряємо , що на сторінці відображається помилка про перевищення невдалихспроб входу в систему
  8. МіняємоIP адреса
  9. Відкриваємо в браузері сторінку входу в систему
  10. Вводимо логін
  11. Вводимо вірний пароль
  12. Натискаємо кнопку входу
  13. Перевіряємо , що ми успішноувійшли в систему

В розпорядженні у мене небуло для користувача інтерфейсу , єдино , що я знала , що форма аутентифікації в додатку стандартна : канал шифрований на базі 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
. Фінальну версію свого рішення я зобразила наступним чином:

Технічна комплектація рішення

Написала додаток на наступних технологіях :

Своє додаток перевіряла на двохплатформах: Linuxі Windowsі , звичайно ж , у мене все працювало;-)

Налаштування оточення для роботи з додатком

Для налаштування оточення на роботу через TORмережу за допомогою моєї програмки потрібно :

  1. Завантажити та встановити Tor Browser Bundle(). Він подається в різному вигляді , тобто у нього збіркиє під різні платформи Windows/ Mac/ Linux.
  2. Завантажити та встановити Java SE 7 +(). Я перевіряладодаток на 7 версії , тому за молодші версії сказати нічого не можу , власне, як і за старші
  3. Завантажити та встановити Apache Maven 3 +( maven.apache.org/download . cgi )

Запуск програми

Для того , щоб запустити програму нам потрібно знайтимісце , куди ми встановили Tor Browser Bundle, і скопіювати повні шляхи ( бажано) до виконуваного файлу Tor tor.exe( Tor/torу випадку з Linux, і , підозрюю , на Mac'етакож ...) і до директорії Data. Вони нам знадобляться на наступному кроці .

Отже ,

  1. Заходимо в директорії з програмою
  2. Запускаємо командний рядок( консоль, термінал, cmd... )
  3. Виконуємо в директорії команду на складання програми: mvn clean install
  4. З target/anonymous-lover-1.0-dist.zipкопіюємо архів куди душі завгодно ( чому так я назвала додаток , напишу в кінці статті , щоб суть чистіше тримати )
  5. Розпаковуємо архів anonymous - lover -1.0 - dist.zip
  6. Заходимо в розпакованих архів
  7. Виконуємо з командного рядка(в моєму прикладі нехай буде така команда) :

    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'ом .

Мені було б цікаво дізнатися з коментарів до топіку , чи є будь інший спосібзробити теж саме , і чим це могло б бути краще/ гіршезапропонованого мною способу в контексті тестування веб додатків.

Спасибі за увагу .

Література

За час вирішення проблеми користуваласятакими джерелами:

Опубліковано: 01/06/14 @ 01:58
Розділ Різне

Рекомендуємо:

31 травня, Одеса - Майстер-клас Руслана Шевченка " Введення в scala + akka "
12 липня, Київ - Майстер-клас "Автоматизація фронтенда " від Роберта Харитонова
Бесіда з Романом Хміль, COO Ciklum (частина 2 )
21 - 24 липня , Одеса - V конференція веб- розробників WebCamp 2014
10 речей , які ми дізналися при побудові технологічної компанії