Upload
bisser-todorov
View
824
Download
6
Tags:
Embed Size (px)
DESCRIPTION
Acceptance Testing with Selenium 2 and PHPUnit
Citation preview
Acceptance Testingwith Selenium & PHPUnit
BULGARIA PHP GROUP
Software testing
Подходи при тестване
• White box testingТова са тестове базирани на вътрешната структура на софтуера. Рарзработчика на този тип тестове трябва да има програмистки умения. Тези тестове най-често се асоциират с Unit Test.
• Black box testingТози тип тестове третират софтуера като черна кутия. Те проверяват функционалността на софтуера без да познават неговата вътрешна структура.
• Gray box testingТестове които се изпълнява на ниво black box обаче използват знания за вътрешната структура и алгоритми на софтуера. (Нещо като хибриден вариант от горните два подхода).
Нива на тестване
• Unit testingТези тестове са предназначени да верифицират функционалността на определен модул от кода – най-често функция, клас.
• Integration testingТози тип тестове целя да верифицират интерфейса между отделните компоненти на софтуерната система.
• System testingПровеждат се върху готовата, интегрирана система за да проверят дали тя отговаря на съответните изисквания. Попадат в групата на black-box тестовете.
Нива на тестване
• Acceptance testingТези тестове целят да установят дали системата може да отговори на ежедневните бизнес изисквания и дали е завършена или готова за бизнес употреба.
Selenium 2.0
Какво е Selenium?
• Selenium 1, 2 – browser automation tool!Софтуерен framework за предназначен за тестване на web приложения. Той поддържа пакет от инструменти всеки от които предлага различен подход за автоматизиране на тестовете. Създаден е от програмиста Jason Huggins през 2004 г.
Архитектура
• Selenium 2 : WebDriver + Selenium Server
– Обектно ориентирано API посредствеом което можем да контролираме поведението на браузъра
– Драйвери за голям брой браузъри.
• Selenium 1 – Selenium RC
– Версията преди WebDriver – все още се поддържа за обратна съвместимост.
• Selenium IDE
– Графичен инструметн за създаване на прототипи на тестови скриптове.
Selenium IDE
Selenium IDE
• Какво е Selenium IDESelenium IDE (Integrated Development Environment) е графичен инструмент който може да използвате за създаванена вашите тестове. Той представлява лесен за използване plugin за Mozila Firefox. Съдържа и контекстно меню което ви дава възможност първо да селектирате даден елемент от отворената в браузъра страничка и след това да изберете от него дадена команда, параметрите на която се попълват в зависимост от контекста.
• Инсталиранe
Selenium IDE
• Интерфейс
– Test Case Pane
• Table• Source• Log• Reference
Показва резултата от изпълнението
на скрипта Показва кратка документацияна текущата команда
Selenium IDE
• Създаване на Test Case
– ЗаписванеЗаписва действията на потребителя.
– Добавяне на verification, assert с контекстно менюПонякога нашите тестове трябва да проверят свойства на обекти от страницата. В този случаи се нуждаем от команди verify, assert.
– РедактиранеДобавяне и редактиране на команди и коментари.
Selenium IDE
• Отваряне, стариране и записване на тестове.
• Базов URL
• Пример: Създаване на потребителски акаунт
- записване на тест;- редактиране на тест;- добавяне на команда verify.
Selenium IDE
• Команди
– ActionsКоманди които манипулират състоянието на приложението. Повечето actions може да се извикват и със суфикс: andWait.Note: Ако даден actiоn пропадне, изпълението на теста се прекратява.
– AccessorsПроверява състоянието на приложението и записва резултата в променлива. Автоматично генерира assertion. (http://selenium-sipendra.blogspot.com/2011/04/selenium-accessors.html)
– AssertionsПроверяват дали състоянието е такова каквото се очаква. Всички assertion имат три режима: assert, verify, waitFor.
Selenium IDE
• Синтаксис на командитеКоманда и един или два параметъра. Единият обикновено е локатор. А другия текстов щаблон.
• ЛокаториМножество команди изискват “target”. Target – идентифицира елемента. Той се състои от две части: location strategy, и location. Записва се в долния формат:locatorType = location
– by Id
– by Name
– by CSS
– by XPath
WebDriver
WebDriver
• Selenium WebDriver прави заявки директно към браъзъра като използва browsers native support for the automation. Това е доста различно от начина по който работи Selenium RC. Selenium RC работи по един и същи начин с всеки браузър който поддържа. Той „инджектава“ JavaScript функции, когато браузъра се зареди. И след това използва тези функции за автоматизация. WebDriver използва съвсем различна техника . Той управлява браъзъра директно като използва вградената поддръжака за автоматизация на самия браъзър.
WebDriver
• WebDriver дава възможност да изпълнявате вашите тестове на различни браузъри а не само на Firefox.
• WebDriver ви дава възможност да използвате език за програмиране при създаване на вашите тестове.
• WebDriver има native поддръжка за Java, C#, Python, Rubby. За Perl, PHP разчитаме на third party библиотеки.
Selenium Server
Selenium Server
• Вие може да се нуждаете или не от selenium server, в зависимост от това как искате да изпозлвате селениум WebDriver. Ако искате да изпозлвате само WebDriver-API вие не се нуждаете от сървър. Ако вашите тестове се стартират на същата машина на която и браузъра – и ползвате само API то, не се нуждаете от сървър, WebDriver ще стартира браузъра директно.
Selenium Server
• използвате SeleniumGrid;• искате да стартирате браузъра
на отдалечена машина;• няма native поддръжка на
езика който ползат.
Вие се нуждаете отSelenium Server ако:
Selenium, PHP & PHPUnit
Selenium, PHP & PHPUnit
• Selenium & PHPЗа съжаление Selenium не поддържа WebDriver API за PHP. За това за да ползваме Selenium с PHP ние се нуждаем от:
– Selenium Standalone Server (и тъй като той е написан на Java се нуждаем и от jre.)
– и разбира се от клиентски PHP Selenium библиотеки, освен ако не искаме да пращаме JSON съобщения дирекнто а сървъра.
Selenium, PHP & PHPUnit
• Клиентски библиотеки
– PHPUnit_Selenium
– Facebook’s php-webdriver
– php-webdriver-bindings
– WebDriver-PHP
PHPUnit Selenium
PHPUnit_Extensions_SeleniumTestCase
PHPUnit_Extensions_SeleniumTestCase
• ОписаниеРеализира Selenium RC API – Selenium 1. Поддържа client/server протокола посредством който скрипта комуникира със Selenium Server. Освен това поддържа специализирани assertion методи.
PHPUnit_Extensions_Selenium2TestCase
PHPUnit_Extensions_Selenium2TestCase
• ОписаниеТози клас ни дава възможност да използваме WebDriver API (което обаче за съжаление е частично реализирано).
• Изисквания
– PHPUnit
– curl
– Selenium Extension
– Selenium Server (+jre)
PHPUnit_Extensions_Selenium2TestCase
• Инсталиране
– PHPUnit_Selenium
pear channel-discover pear.phpunit.de
pear install pear.phpunit.de/PHPUnit_Selenium
– Selenium Server
Изтегляме jar файла от долната страничка:
http://docs.seleniumhq.org/download/
и го стартираме преди да пуснем тестовете:
java –jar selenium-server-standalone-2.39.0.jar
PHPUnit_Extensions_Selenium2TestCase
• използване
class WebTest extends PHPUnit_Extensions_Selenium2TestCase{ protected function setUp() {
// конфигурация – този метод е задължителен.}
public function testTitle() {
// тестове}
}?>
PHPUnit_Extensions_Selenium2TestCase
• Метод setUp()
– setBrowser(string $browser)Задава браузъра който да бъде използван от Selenium Server.
– setBrowserUrl(string $browserUrl)Задава базовият URL.
– setHost(string $host)Задава хоста на който се намира Selenium Server.
PHPUnit_Extensions_Selenium2TestCase
– setPort(int $port)Задава порта на който отговаря сървъра.
– setTimeout(int $timeout)Задава timeout при свързване със сървъра.
– setSleep(int $second)Задава интервала на изчакване между изпращането на action команди.
PHPUnit_Extensions_Selenium2TestCase
• Locators
– byId($id)Намира елемента на базата на неговот id.
– byName($name)Намира елемента на базта на неговото име.
– byCssSelector($cssSelector)Намира елемента на базта на невогия css selector.
PHPUnit_Extensions_Selenium2TestCase
– byClassName($className)Намира елемента на базата на името на неговия клас.
– byXPath($id)Намира елемента използвайки XPath.
– byLinkText($id)Текста съдържащ се в линка.
PHPUnit_Extensions_Selenium2TestCase
• PHPUnit_Extensions_Selenium2TestCase_ElementВсеки един от гореизброените локатори връща обект от горния клас, който има следните методи:
– atribute($name)Връща атрибута на елемента.
– clear()Изтрива съдържанието на form element.
– click()Кликва върху елемента.
PHPUnit_Extensions_Selenium2TestCase
– css($propertyName)Връща съответното CSS свойстов.
– equals()Проверява дали два елемента са еднакви.
– location()Връща масив с x, y позицията на елемента.
– selected()Проверява състонието на опция или друг елемент на форма.
PHPUnit_Extensions_Selenium2TestCase
• size()Връща масив с x, y позицията на елемента.
• submit()Събмитва форма.
• value($newValue = null)Връща или задава стойност на даден елемент. Ако той вече има стойност новата се добавя към старата.
• text()Връща съдържанието на елемента.
Примери: Верификация на линковете от горната лява част на сайта на базата на тяхното id (метод: byId()).
Проверяваме:- дали присъстват на всяка една от трите странички- дали съдържат верните текстове- дали съдържат верните линкове
Пример: тестваме размера на логото.
Изплзваме: локатор – byClassName().
ОчаквамеРазмера да е 80x80.
Пример: Тестваме позицията на трите изображения от индексната страница.
Използваме: локатор byCssSelector().
Очакваме: ... картинката на следващата страница.
PHPUnit_Extensions_Selenium2TestCase
• Actions
– url($url = null)Отваря страницата с указания url. Ако няма url – връща текущя.
– title()Връща заглавието на текущата страница.
– clickOnElement($id)Кликва върху елемента с указаното id.
– moveto($element)Премества маркера на мишката върху указания елемент..
– click($button = 0)Кликва върху позицията на която сме преместили маркера с moveto.
Пример: Искаме да проверим дали линковете от тулбара работят.
Използваме:- метода click() на върнатия от локарора елемент;- също така $this->moveto(), $this->click().
PHPUnit_Extensions_Selenium2TestCase
– keys($keys)Изпраща поредица от клавиши.
– select($element)Като параметър получава обект от тип:
PHPUnit_Extensions_Selenium2TestCase_Elemen
и връща обект от тип:
PHPUnit_Extensions_Selenium2TestCase_Select.
PHPUnit_Extensions_Selenium2TestCase_Select
• PHPUnit_Extensions_Selenium2TestCase_Select
– selectedLabel()Връща текущо избрания лейбъл на обекта.
– selectedValue()Връща текущо избраната стойност на обекта.
– selectOptionByLabel($string)Селектира опцията с указания лейбъл.
– selectOptionByValue($string)Селектира опцията с указаната стойност.
Пример: Попълване и събмитване на форма. Очакваме :1. Събмитването да мине успешно и да бъдем препратени на долния url: http://selenium.bulgariaphp.com/signup.php
2. Страничката на която сме препратени да съдържа текста:Sussessful Signup. Please, check your email.
3. Данните които сме въвели да се запишат в базата данни.
Пример: Въвеждаме потребител с име което съвпада с вече въведено такова.
Очакваме:
- да останем на същата страница;
- да видим съобщението за дублиращото се име;
- във формата да се запазят всички въведени от потребителя данни.
PHPUnit_Extensions_Selenium2TestCase
– acceptAlert()Щраква OK върху alert или confirmation box.
– dismissAlert()Щраква върху cancel при confirmation box, или не натиска OK при alert.
– alertTesxt()Връща текста от текущия alert.
Пример: Alerts – Имаме контролен панел посредством който трием
потребители, щраквайки върху техните потребителски имена. При щракване
върху дадено име се отваря alert. Като потвърдим – потребителя се трие.
Ако щракнем на cancel – не се случва нищо.
Искаме да се уверми:
- че пренасочва към правилната стграница;
- на нея излиза съобщение че потребителя е изтрит;
- требителя го няма в базата данни.
PHPUnit_Extensions_Selenium2TestCase
– timeout()Връща обект от тип PHPUnit_Extensions_Selenium2TestCase_Session_Timeouts.
• PHPUnit_Extensions_Selenium2TestCase_Session_Timeouts
– implicitWait($time)Задава времето на изчакване при търсене на даден обект.
Пример: Тестване за наличието на елемент който се зарежда от Ajax.
Очакваме:- да намерим зареждания от Ajax обект, на страничката.
PHPUnit_Extensions_Selenium2TestCase
• Мобилни устройства
– orientation
– touch
• Ако елемента не бъде намерен?
– PHPUnit_Extensions_Selenium2TestCase_WebDriverException
PHPUnit_Extensions_Selenium2TestCase
• Assertion
– assertFalse()
– assertTrue();
– assertContains();
– assertEquals()
Facebook’s php-webdriver
Selenium GRID
Selenium GRID
• Какво е Selenium GRID?Selenium GRID ни дава възможност да стартираме паралелно множество тестове на различни машини с различни операционни системи и различни браузъри. Най-общо казано има две причини поради които да ползваме Selenium GRID:
– искаме да стартираме нашите тестове на ралзични браузъри или различни верси на един и същи браузър;
– да редуцираме времето за изпълнение на пакета от тестове.
• GRIDСъстои се от един hub и един или повече nodes. И двете се реализират посредством:selenium-standalone-server.jar.
Selenium GRID
• Как работи?Selenium HUB получава скрипта с информация за това на коя платформа трябва да го стартира. HUB-ът „познава“ конфигурацията на всеки регистриран note. На базата на тази информация той избира node с указаната комбинация платформа-браузър.
• ИнсталиранеИнсталирането е просто. Изтеглете Selenium Server jar файла от долния линк и го запишете на всички nodes и на сървъра.http://docs.seleniumhq.org/download/
Selenium GRID
• Стартиране
– HUBjava -jar selenium-server-standalone-2.21.0.jar -role hub
– Nodejava -jar selenium-server-standalone-2.21.0.jar -role node -hub http://<hub hostname> :4444/grid/register
Selenium GRID
Пример: Конфигуриране на Selenium GRID: hub, nodes.Стартиране на тестове – последователно.
CentOS OS X Solaris
HUB NODE1 NODE
Пример: Selenium GRID: Стартиране на тестове – паралелно.
Благодаря за вниманието