Як здійснити перевірку веб-форм веб-форм?


26

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

Якщо це неможливо, чи є дійсна автоматизована альтернатива?


2
Якщо ви хочете автоматизоване тестування користувальницького інтерфейсу, вам знадобиться щось на зразок Selenium. Але якщо ви хочете автоматизоване тестування одиниць , то вам не потрібен Selenium. Вам просто потрібні правильні візерунки на місці. Дивіться мою відповідь.
Матвій Родатус

Відповіді:


22

Так, ти можеш. Ви просто повинні бути обережними, щоб добре розділити свої проблеми. Коротше кажучи, ви повинні видалити всю свою логіку з коду і відставити її в інших класах.

Є два загальних способи зробити це.

Найпростіший спосіб - переосмислити всі ваші обробники подій у розділі "Яку інформацію мені дає система? Яку інформацію мені потрібно заповнити на сторінці?" а потім надати клас обслуговування, який здійснює цю конверсію.

У цьому випадку сервісний рівень повинен дуже мало знати про характер вашого шару презентації. Ви все ще повинні взяти дані, повернуті з сервісу, і заповнити правильні компоненти WebForm у своєму коді, і це залишається неперевіреним (принаймні, за допомогою одиничних тестів, ви все ще можете використовувати інтеграційні тести). Але це рідко, коли код піде не так, набагато більше шансів вийти з ладу в логіці.

Складніший, але більш ефективний спосіб - це використовувати модель Presenter Model View . Коли ми спробували це, ми виявили, що презентатори швидко приєдналися до рамки, і чим більше ми розробляли MVP, тим зрозуміліше було, що MVP дійсно хотів бути MVC, але не міг бути.

Однак, інші зробили це дуже успішно - є навіть доступний фреймворк webformsmvp для зняття важкого підйому - тому ваш пробіг може відрізнятися.


1
@jmoreno: Приємний улов! Я забув WebForms і MVP навіть існують протягом останніх 5 років.
пдр

16

Цілком очевидно, що ціла сторінка веб-форм не є одиницею, і тому не може бути перевірена одиницею. Однак ви можете зробити деякі автоматичні тести:

  • тестування окремих компонентів сторінки (будь-які методи, що виконують фактичну логіку)
  • компоненти тестових одиниць, використовувані сторінкою (користувацькі елементи керування, основні бізнес-логіки тощо)
  • автоматичне тестування функціональності (дистанційним керуванням браузером або надсиланням HTTP-запитів через щось на зразок cURL)
  • автоматичне тестування на проникнення (на вашій сторінці є інструменти, які намагатимуться знайти можливі точки введення та автоматично запускати нешкідливі, але помітні напади ін'єкції
  • тестування навантаження
  • перевірка макета у відповідності зі списком зручностей та побутових точок кулі (хоча це дуже важко автоматизувати; зазвичай це зручніше робити це вручну раз у раз)

-1 Вибачте, але навантажувальне тестування, тестування на проникнення та перевірка макета не мають нічого спільного з тестуванням одиниць
Tom Squires

2
@TomSquires: звичайно, це не так, і якщо ви уважно прочитаєте мою відповідь, ви помітите, що я ніколи не говорив, що вони є. Але питання, мабуть, плутає поняття одиничних тестів та автоматизованого тестування взагалі, саме тому я перерахував різні змістовні автоматизовані тести, які можна кинути у веб-формі.
tdammers

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

6
@TomSquires: абсолютно необгрунтований зворотний потік. Ваше власне запитання починається з тестування цілого сайту, що не має нічого спільного з тестуванням одиниць. Тдаммери визначили різні способи тестування цілого та частин та визначили, куди підходить одиничне тестування. +1
azheglov

3
Досить справедливо. Я беру його назад
Том Сквайрс

9

Вибачте за те, що пропустили частину питання "одиниця" ...

SeleniumHQ - ваш друг для тестів з передньої частини. Це не одиничне тестування, більше схоже на тестування чорної скриньки. Вам ще потрібно думати про вагомі тестові справи ...


1
+1 Ваша відповідь з'явилася, коли я натискав "опублікувати свою відповідь", щоб сказати точно те саме.
янніс

2
Крім того, оскільки op запитує про тестування одиниць, давайте просто додамо, що те, про що йдеться, - це функціональне (ітичне) тестування , яке є більш доцільним (розумним, можливим) під час тестування елементів введення користувача.
янніс

+1 тому, що я все-таки маю на увазі використовувати його, але ніколи не обійшов його. Хтось користувався ним, чи це добре, чи варто його впроваджувати?
NimChimpsky

6
Селен - це фантастичний інструмент, але він не має нічого спільного з тестуванням одиниць.
pdr

Щоправда, схоже, я пропустив цю інформацію у запитанні: /
WarrenFaith

6

Якщо говорити з досвіду: Тільки якщо це зроблено правильно. Під "правильним" я маю на увазі мінімальний відставання коду і щось подібне до вищезгаданого Model-View-Presenter, щоб зробити веб-форму "німим". Звичайно, це виявляється дуже складно з програмами Brownfield, оскільки вони не були розроблені з цим на увазі, і це майже геркулецьке зусилля переробити / переписати сторінки, щоб використовувати його.


1

вати

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

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

http://watin.org/ - ще один інструмент веб-тестування, але для C # /. NET. Ви пишете тести як одиничні тести:

[Test] 
public void SearchForWatiNOnGoogle()
{
  using (var browser = new IE("http://www.google.com"))
  {
    browser.TextField(Find.ByName("q")).TypeText("WatiN");
    browser.Button(Find.ByName("btnG")).Click();

    Assert.IsTrue(browser.ContainsText("WatiN"));
  }
}

Наразі вона заснована на IE, але має деяку експериментальну підтримку для Firefox та Chrome. Ви можете значно автоматизувати все, що б ви робили в ручних тестах, включаючи взаємодію з Javascript.


Думаю, що це 2016 рік. Сьогодні візит на сайт WatiN вказує мені, що WatiN, можливо, помер. Документи рідкі, не оновлені, а відео не відтворюються. Я не скаржуюся - я вдячний величезним добровільним інструментам з відкритим кодом - цей коментар допомагає іншим людям, які прийшли останнім часом, як я. Відповідь чудова, лише зазначивши, що для початку може знадобитися самостійне практичне навчання.
qxotk

1
Подальша допомога для тих , хто думає про шляхи WatiN, підтвердження це застійний + , де шукати в даний час тут: stackoverflow.com/questions/118531 / ...
qxotk

0

Ви не можете реально перевірити веб-сайт просто через те, що веб-запити трапляються на дроті (або через стек TCP). Таким чином, тести не відповідають визначенню "одиничне випробування", вони, швидше за все, будуть тестами.

Для таких типів тестів ви можете використовувати набір типу Selenium, який запускає веб-браузер за кадром. Слово попередження, однак: зазвичай такий вид тестування дуже важкий і непередбачуваний, оскільки є багато рухомих частин!

Що ще цікавіше, мене трохи хвилює, чому вам взагалі потрібно перевірити веб-форми. Чи ви не вкладаєте занадто багато логіки в коді позаду і маєте анемічну ділову логіку випадково?


-1

Жасмін

Протягом останніх 5 років Жасмін став ключовим інструментом для тестування модулів. Він часто включається в тестування автоматичної збірки за допомогою Node та npm

Per https://en.wikipedia.org/wiki/Jasmine_(JavaScript_testing_framework) :

Жасмін - це тестова основа з відкритим кодом для JavaScript. [2] Він спрямований на роботу на будь-якій платформі з підтримкою JavaScript, не втручатися в додаток та IDE та мати синтаксис, який легко читається. На нього сильно впливають інші рамки тестування блоків, такі як ScrewUnit, JSSpec, JSpec та RSpec. [3]

Незважаючи на всі згадки про javascript, він також може бути використаний для одиничного тестування простої веб-форми.


Хоча JavaScript використовується у веб-формах, це не основний метод оновлення інтерфейсу користувача
Tom Squires

Правда. Однак альтернативою є ...? Тож саме тому Жасмін, хоч і не призначений для цієї мети, працює дуже добре. Плюс синтаксис майже ідентичний RSpec, який люблять програмісти Ruby.
Майкл Дюррант

-2

ASP.NET

Розробляючи сайт ASP.NET, ми мали змогу запустити тести на:

  • Домен
  • BL контролери / презентатори
  • кодовий код сторінок веб-форм

Все це можливо TDD, залежно від вашої архітектури. Єдине, що ви не можете перевірити, це макет файлу розмітки.


3
Ця відповідь говорить "так, це можливо" на питання "як". Не зовсім корисна.
RubberDuck
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.