Как создать структурированное автоматическое тестирование с помощью селена (junit или testng)? Какова ваша лучшая практика для этого?

Я написал тесты, которые используют селен для функционального тестирования. Я использую Java. Я хотел бы иметь возможность создавать структуру между тестами. Можно ли это сделать с помощью jUnit или TestNG?

Хотелось бы иметь возможность создать тестовую структуру, которая будет создавать такой отчет:

Top test FAIL
- Module1 test PASS
-- Module1Class1 test PASS
-- Module1Class2 test PASS
--- Module1Class3Method1 test PASS
--- Module1Class3Method2 test PASS
- Module2 test FAIL
-- Module2Class1 test FAIL
--- Module2Class1Method1 test PASS
--- Module2Class1Method2 test FAIL
--- Module2Class1Method3 test PASS

person Urszula Karzelek    schedule 25.08.2009    source источник
comment
У меня есть тесты, которые выполняют функциональное тестирование с использованием Selenium. Я создал их с помощью Selenium IDE или вручную. Я экспортировал их в java. Я использую Selenium RC. Я могу запускать их как Java-приложение или как тесты jUnit, чтобы получать от него отчеты. Проблема в том, что у меня много классов и много тестов. Я хотел бы запускать эти модуль за модулем, имея не только результаты (пройден/не пройден) из теста на уровне модуля, но и из всех тестов в классах ниже, методы ниже. AFAIK jUnit допускает только плоскую тестовую структуру. Поэтому я задаюсь вопросом о testNG. Это делает его более ясным?   -  person Urszula Karzelek    schedule 25.08.2009


Ответы (7)


Лучший шаблон, который я видел для организации кода для тестов селена, — это шаблон объекта страницы:

http://blog.m.artins.net/acceptance-tests-with-jbehave-selenium-page-objects/

Вот вспомогательная библиотека Java:

http://code.google.com/p/webdriver/wiki/PageFactory

person ndp    schedule 26.08.2009

Вы не можете, потому что это не тот формат, который Selenium интерпретирует для тестов. Selenium поддерживает несколько различных языковых синтаксисов, самыми простыми из которых являются строки таблиц JS и HTML. Вы можете использовать функцию записи Selenium IDE из Firefox, если не хотите вручную писать свои тесты в соответствии с синтаксисом определенного языка.

person Community    schedule 25.08.2009
comment
Привет. Спасибо за ответ. Но я не спрашиваю о синтаксисе Selenium. Это вопрос к результатам тестов junit/testng. Может стоит убрать информацию про Selenium из описания, чтобы никого не путать ;) - person Urszula Karzelek; 25.08.2009
comment
Модульные тесты — это тесты внутри кода для анализа того, работают ли биты кода так, как они предназначены. Это не то, что тестирует Selenium. Selenium проверяет, что браузер видит после рендеринга, то есть не то, для чего написаны части интерактивного кода, а то, для чего написано приложение полностью. - person ; 25.08.2009

вы рассматривали возможность использования Selenium Remote Control? http://seleniumhq.org/projects/remote-control/

person Yonatan Karni    schedule 25.08.2009

Я бы порекомендовал посмотреть XML-отчеты JUnit или TestNG. Вы должны быть в состоянии преобразовать их с помощью XSLT, чтобы получить новый HTML-отчет в требуемом формате.

person Dave Hunt    schedule 25.08.2009

Я только что нашел решение этого вопроса, поэтому я помещаю здесь ссылку, чтобы другие могли извлечь из этого пользу. beust.com Однако я еще не пробовал.

Обновление: попробовав, я могу получить такие результаты:

Module1.Class3.Method1 PASS
Module1.Class3.Method2 PASS
Module2.Class1.Method1 PASS
Module2.Class1.Method2 FAIL
Module2.Class1.Method3 PASS

Имя метода сбоя — «Метод2», он расположен в классе «Класс1» и представляет собой пакет «Модуль2».

Я использовал все стандартные возможности TestNG (их много) + я перезаписал TestListenerAdapter, используя методы ITestResult: getName() и getTestClass().getName()

На самом деле это не та структура, которую я искал, но небольшой разбор может сказать мне, где был сбой. И в качестве плюса мне не нужно называть методы с именем класса и пакета.

person Urszula Karzelek    schedule 28.08.2009

В TestNG вы можете определить наборы через файл конфигурации (testng.xml), который должен соответствовать вашим потребностям. Вы можете структурировать его, чтобы иметь тестовую группу для каждого модуля. Сбой в тестовой группе приводит к сбою всего теста. Но я думаю, что вы также можете сделать это в JUnit, с которым я не слишком знаком.

Что хорошо в TestNG, так это то, что вы можете определять зависимости. Они будут обеспечивать определенный логический порядок выполнения тестов и будут пропускать тесты, которые зависят от неудачных тестов, вместо того, чтобы позволить им также провалиться. Делает анализ намного проще, а тесты заканчиваются раньше, потому что все те тесты, которые потенциально обречены на провал, будут оставлены в стороне.

Но, как я уже говорил ранее, я думаю, вы можете сделать это и в JUnit. Это больше дело вкуса. И если вы решите иначе, переход с JUnit на TestNG или наоборот не составит большого труда.

person andy droid    schedule 07.10.2009

Я не совсем уверен, правильно ли я здесь... но я думаю, что это может вам помочь: http://www.jamesnetherton.com/blog/2007/07/02/Creating-a-Selenium-test-suite/

Вы можете сгруппировать свои тесты с помощью очень простого структурированного способа.

person bastianneu    schedule 25.08.2009
comment
Спасибо за идею. Мой вопрос больше похож на один комментарий к этому сообщению в блоге на вашем сайте: Автор: Madhavi | Вторник, 22 января, 9:01 (...) Знаете ли вы какой-нибудь способ встроить один набор тестов в другой? Мне нужно создать небольшие наборы тестов для каждой функции и включить эти наборы тестов в основной набор тестов. - person Urszula Karzelek; 26.08.2009
comment
с моей точки зрения это невозможно, но и не нужно. Вы должны проектировать свой код вокруг этих тестовых классов, а не наоборот. Извините, я думаю, что ваш подход может быть сложным. Но решением было бы разработать специальные наборы тестов и поместить их в пакеты. Таким образом, вы можете тестировать программные компоненты через пакеты. Надеюсь это поможет... - person bastianneu; 26.08.2009
comment
Спасибо :) Идея состоит в том, чтобы иметь не только небольшие тесты для каждой функциональности, но и иметь возможность запускать все эти небольшие сгруппированные на уровне 1, затем несколько сгруппированных на уровне 2 и так далее. Если группа на уровне 2 (как и все в них) проваливается - то есть возможность докопаться до группы на уровне 1, а затем до одного небольшого теста, который провалился. Разве это не обычная практика написания функциональных тестов? - person Urszula Karzelek; 27.08.2009
comment
У вас есть отличная идея... разве это не та же самая процедура, которую многие люди используют для изучения иностранных языков? Говоря о модульном тестировании... я не знаю, разработал ли кто-нибудь что-нибудь для решения этих проблем. Извините... не могу ответить на ваш вопрос. - person bastianneu; 27.08.2009
comment
Похоже, копание в testng может помочь с этим. Смотрите мою последнюю ссылку. - person Urszula Karzelek; 28.08.2009