acceptance testing with selenium 2 and phpunit

88
Acceptance Testing with Selenium & PHPUnit BULGARIA PHP GROUP

Upload: bisser-todorov

Post on 25-Jun-2015

823 views

Category:

Technology


6 download

DESCRIPTION

Acceptance Testing with Selenium 2 and PHPUnit

TRANSCRIPT

Page 1: Acceptance testing with Selenium 2 and PHPUnit

Acceptance Testingwith Selenium & PHPUnit

BULGARIA PHP GROUP

Page 2: Acceptance testing with Selenium 2 and PHPUnit

Software testing

Page 3: Acceptance testing with Selenium 2 and PHPUnit

Подходи при тестване

• White box testingТова са тестове базирани на вътрешната структура на софтуера. Рарзработчика на този тип тестове трябва да има програмистки умения. Тези тестове най-често се асоциират с Unit Test.

• Black box testingТози тип тестове третират софтуера като черна кутия. Те проверяват функционалността на софтуера без да познават неговата вътрешна структура.

• Gray box testingТестове които се изпълнява на ниво black box обаче използват знания за вътрешната структура и алгоритми на софтуера. (Нещо като хибриден вариант от горните два подхода).

Page 4: Acceptance testing with Selenium 2 and PHPUnit

Нива на тестване

• Unit testingТези тестове са предназначени да верифицират функционалността на определен модул от кода – най-често функция, клас.

• Integration testingТози тип тестове целя да верифицират интерфейса между отделните компоненти на софтуерната система.

• System testingПровеждат се върху готовата, интегрирана система за да проверят дали тя отговаря на съответните изисквания. Попадат в групата на black-box тестовете.

Page 5: Acceptance testing with Selenium 2 and PHPUnit

Нива на тестване

• Acceptance testingТези тестове целят да установят дали системата може да отговори на ежедневните бизнес изисквания и дали е завършена или готова за бизнес употреба.

Page 6: Acceptance testing with Selenium 2 and PHPUnit

Selenium 2.0

Page 7: Acceptance testing with Selenium 2 and PHPUnit

Какво е Selenium?

• Selenium 1, 2 – browser automation tool!Софтуерен framework за предназначен за тестване на web приложения. Той поддържа пакет от инструменти всеки от които предлага различен подход за автоматизиране на тестовете. Създаден е от програмиста Jason Huggins през 2004 г.

Page 8: Acceptance testing with Selenium 2 and PHPUnit

Архитектура

• Selenium 2 : WebDriver + Selenium Server

– Обектно ориентирано API посредствеом което можем да контролираме поведението на браузъра

– Драйвери за голям брой браузъри.

• Selenium 1 – Selenium RC

– Версията преди WebDriver – все още се поддържа за обратна съвместимост.

• Selenium IDE

– Графичен инструметн за създаване на прототипи на тестови скриптове.

Page 9: Acceptance testing with Selenium 2 and PHPUnit

Selenium IDE

Page 10: Acceptance testing with Selenium 2 and PHPUnit

Selenium IDE

• Какво е Selenium IDESelenium IDE (Integrated Development Environment) е графичен инструмент който може да използвате за създаванена вашите тестове. Той представлява лесен за използване plugin за Mozila Firefox. Съдържа и контекстно меню което ви дава възможност първо да селектирате даден елемент от отворената в браузъра страничка и след това да изберете от него дадена команда, параметрите на която се попълват в зависимост от контекста.

• Инсталиранe

Page 11: Acceptance testing with Selenium 2 and PHPUnit

Selenium IDE

• Интерфейс

– Test Case Pane

• Table• Source• Log• Reference

Показва резултата от изпълнението

на скрипта Показва кратка документацияна текущата команда

Page 12: Acceptance testing with Selenium 2 and PHPUnit

Selenium IDE

• Създаване на Test Case

– ЗаписванеЗаписва действията на потребителя.

– Добавяне на verification, assert с контекстно менюПонякога нашите тестове трябва да проверят свойства на обекти от страницата. В този случаи се нуждаем от команди verify, assert.

– РедактиранеДобавяне и редактиране на команди и коментари.

Page 13: Acceptance testing with Selenium 2 and PHPUnit

Selenium IDE

• Отваряне, стариране и записване на тестове.

• Базов URL

Page 14: Acceptance testing with Selenium 2 and PHPUnit

• Пример: Създаване на потребителски акаунт

- записване на тест;- редактиране на тест;- добавяне на команда verify.

Page 15: Acceptance testing with Selenium 2 and PHPUnit

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.

Page 16: Acceptance testing with Selenium 2 and PHPUnit

Selenium IDE

• Синтаксис на командитеКоманда и един или два параметъра. Единият обикновено е локатор. А другия текстов щаблон.

• ЛокаториМножество команди изискват “target”. Target – идентифицира елемента. Той се състои от две части: location strategy, и location. Записва се в долния формат:locatorType = location

– by Id

– by Name

– by CSS

– by XPath

Page 17: Acceptance testing with Selenium 2 and PHPUnit

WebDriver

Page 18: Acceptance testing with Selenium 2 and PHPUnit

WebDriver

• Selenium WebDriver прави заявки директно към браъзъра като използва browsers native support for the automation. Това е доста различно от начина по който работи Selenium RC. Selenium RC работи по един и същи начин с всеки браузър който поддържа. Той „инджектава“ JavaScript функции, когато браузъра се зареди. И след това използва тези функции за автоматизация. WebDriver използва съвсем различна техника . Той управлява браъзъра директно като използва вградената поддръжака за автоматизация на самия браъзър.

Page 19: Acceptance testing with Selenium 2 and PHPUnit

WebDriver

• WebDriver дава възможност да изпълнявате вашите тестове на различни браузъри а не само на Firefox.

• WebDriver ви дава възможност да използвате език за програмиране при създаване на вашите тестове.

• WebDriver има native поддръжка за Java, C#, Python, Rubby. За Perl, PHP разчитаме на third party библиотеки.

Page 20: Acceptance testing with Selenium 2 and PHPUnit

Selenium Server

Page 21: Acceptance testing with Selenium 2 and PHPUnit

Selenium Server

• Вие може да се нуждаете или не от selenium server, в зависимост от това как искате да изпозлвате селениум WebDriver. Ако искате да изпозлвате само WebDriver-API вие не се нуждаете от сървър. Ако вашите тестове се стартират на същата машина на която и браузъра – и ползвате само API то, не се нуждаете от сървър, WebDriver ще стартира браузъра директно.

Page 22: Acceptance testing with Selenium 2 and PHPUnit

Selenium Server

• използвате SeleniumGrid;• искате да стартирате браузъра

на отдалечена машина;• няма native поддръжка на

езика който ползат.

Вие се нуждаете отSelenium Server ако:

Page 23: Acceptance testing with Selenium 2 and PHPUnit

Selenium, PHP & PHPUnit

Page 24: Acceptance testing with Selenium 2 and PHPUnit

Selenium, PHP & PHPUnit

• Selenium & PHPЗа съжаление Selenium не поддържа WebDriver API за PHP. За това за да ползваме Selenium с PHP ние се нуждаем от:

– Selenium Standalone Server (и тъй като той е написан на Java се нуждаем и от jre.)

– и разбира се от клиентски PHP Selenium библиотеки, освен ако не искаме да пращаме JSON съобщения дирекнто а сървъра.

Page 25: Acceptance testing with Selenium 2 and PHPUnit

Selenium, PHP & PHPUnit

• Клиентски библиотеки

– PHPUnit_Selenium

– Facebook’s php-webdriver

– php-webdriver-bindings

– WebDriver-PHP

Page 26: Acceptance testing with Selenium 2 and PHPUnit

PHPUnit Selenium

Page 27: Acceptance testing with Selenium 2 and PHPUnit

PHPUnit_Extensions_SeleniumTestCase

Page 28: Acceptance testing with Selenium 2 and PHPUnit

PHPUnit_Extensions_SeleniumTestCase

• ОписаниеРеализира Selenium RC API – Selenium 1. Поддържа client/server протокола посредством който скрипта комуникира със Selenium Server. Освен това поддържа специализирани assertion методи.

Page 29: Acceptance testing with Selenium 2 and PHPUnit

PHPUnit_Extensions_Selenium2TestCase

Page 30: Acceptance testing with Selenium 2 and PHPUnit

PHPUnit_Extensions_Selenium2TestCase

• ОписаниеТози клас ни дава възможност да използваме WebDriver API (което обаче за съжаление е частично реализирано).

• Изисквания

– PHPUnit

– curl

– Selenium Extension

– Selenium Server (+jre)

Page 31: Acceptance testing with Selenium 2 and PHPUnit

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

Page 32: Acceptance testing with Selenium 2 and PHPUnit

PHPUnit_Extensions_Selenium2TestCase

• използване

class WebTest extends PHPUnit_Extensions_Selenium2TestCase{ protected function setUp() {

// конфигурация – този метод е задължителен.}

public function testTitle() {

// тестове}

}?>

Page 33: Acceptance testing with Selenium 2 and PHPUnit

PHPUnit_Extensions_Selenium2TestCase

• Метод setUp()

– setBrowser(string $browser)Задава браузъра който да бъде използван от Selenium Server.

– setBrowserUrl(string $browserUrl)Задава базовият URL.

– setHost(string $host)Задава хоста на който се намира Selenium Server.

Page 34: Acceptance testing with Selenium 2 and PHPUnit

PHPUnit_Extensions_Selenium2TestCase

– setPort(int $port)Задава порта на който отговаря сървъра.

– setTimeout(int $timeout)Задава timeout при свързване със сървъра.

– setSleep(int $second)Задава интервала на изчакване между изпращането на action команди.

Page 35: Acceptance testing with Selenium 2 and PHPUnit

PHPUnit_Extensions_Selenium2TestCase

• Locators

– byId($id)Намира елемента на базата на неговот id.

– byName($name)Намира елемента на базта на неговото име.

– byCssSelector($cssSelector)Намира елемента на базта на невогия css selector.

Page 36: Acceptance testing with Selenium 2 and PHPUnit

PHPUnit_Extensions_Selenium2TestCase

– byClassName($className)Намира елемента на базата на името на неговия клас.

– byXPath($id)Намира елемента използвайки XPath.

– byLinkText($id)Текста съдържащ се в линка.

Page 37: Acceptance testing with Selenium 2 and PHPUnit

PHPUnit_Extensions_Selenium2TestCase

• PHPUnit_Extensions_Selenium2TestCase_ElementВсеки един от гореизброените локатори връща обект от горния клас, който има следните методи:

– atribute($name)Връща атрибута на елемента.

– clear()Изтрива съдържанието на form element.

– click()Кликва върху елемента.

Page 38: Acceptance testing with Selenium 2 and PHPUnit

PHPUnit_Extensions_Selenium2TestCase

– css($propertyName)Връща съответното CSS свойстов.

– equals()Проверява дали два елемента са еднакви.

– location()Връща масив с x, y позицията на елемента.

– selected()Проверява състонието на опция или друг елемент на форма.

Page 39: Acceptance testing with Selenium 2 and PHPUnit

PHPUnit_Extensions_Selenium2TestCase

• size()Връща масив с x, y позицията на елемента.

• submit()Събмитва форма.

• value($newValue = null)Връща или задава стойност на даден елемент. Ако той вече има стойност новата се добавя към старата.

• text()Връща съдържанието на елемента.

Page 40: Acceptance testing with Selenium 2 and PHPUnit

Примери: Верификация на линковете от горната лява част на сайта на базата на тяхното id (метод: byId()).

Проверяваме:- дали присъстват на всяка една от трите странички- дали съдържат верните текстове- дали съдържат верните линкове

Page 41: Acceptance testing with Selenium 2 and PHPUnit
Page 42: Acceptance testing with Selenium 2 and PHPUnit
Page 43: Acceptance testing with Selenium 2 and PHPUnit
Page 44: Acceptance testing with Selenium 2 and PHPUnit

Пример: тестваме размера на логото.

Изплзваме: локатор – byClassName().

ОчаквамеРазмера да е 80x80.

Page 45: Acceptance testing with Selenium 2 and PHPUnit
Page 46: Acceptance testing with Selenium 2 and PHPUnit
Page 47: Acceptance testing with Selenium 2 and PHPUnit
Page 48: Acceptance testing with Selenium 2 and PHPUnit

Пример: Тестваме позицията на трите изображения от индексната страница.

Използваме: локатор byCssSelector().

Очакваме: ... картинката на следващата страница.

Page 49: Acceptance testing with Selenium 2 and PHPUnit
Page 50: Acceptance testing with Selenium 2 and PHPUnit
Page 51: Acceptance testing with Selenium 2 and PHPUnit
Page 52: Acceptance testing with Selenium 2 and PHPUnit

PHPUnit_Extensions_Selenium2TestCase

• Actions

– url($url = null)Отваря страницата с указания url. Ако няма url – връща текущя.

– title()Връща заглавието на текущата страница.

– clickOnElement($id)Кликва върху елемента с указаното id.

– moveto($element)Премества маркера на мишката върху указания елемент..

– click($button = 0)Кликва върху позицията на която сме преместили маркера с moveto.

Page 53: Acceptance testing with Selenium 2 and PHPUnit

Пример: Искаме да проверим дали линковете от тулбара работят.

Използваме:- метода click() на върнатия от локарора елемент;- също така $this->moveto(), $this->click().

Page 54: Acceptance testing with Selenium 2 and PHPUnit
Page 55: Acceptance testing with Selenium 2 and PHPUnit

PHPUnit_Extensions_Selenium2TestCase

– keys($keys)Изпраща поредица от клавиши.

– select($element)Като параметър получава обект от тип:

PHPUnit_Extensions_Selenium2TestCase_Elemen

и връща обект от тип:

PHPUnit_Extensions_Selenium2TestCase_Select.

Page 56: Acceptance testing with Selenium 2 and PHPUnit

PHPUnit_Extensions_Selenium2TestCase_Select

• PHPUnit_Extensions_Selenium2TestCase_Select

– selectedLabel()Връща текущо избрания лейбъл на обекта.

– selectedValue()Връща текущо избраната стойност на обекта.

– selectOptionByLabel($string)Селектира опцията с указания лейбъл.

– selectOptionByValue($string)Селектира опцията с указаната стойност.

Page 57: Acceptance testing with Selenium 2 and PHPUnit

Пример: Попълване и събмитване на форма. Очакваме :1. Събмитването да мине успешно и да бъдем препратени на долния url: http://selenium.bulgariaphp.com/signup.php

2. Страничката на която сме препратени да съдържа текста:Sussessful Signup. Please, check your email.

3. Данните които сме въвели да се запишат в базата данни.

Page 58: Acceptance testing with Selenium 2 and PHPUnit
Page 59: Acceptance testing with Selenium 2 and PHPUnit
Page 60: Acceptance testing with Selenium 2 and PHPUnit
Page 61: Acceptance testing with Selenium 2 and PHPUnit

Пример: Въвеждаме потребител с име което съвпада с вече въведено такова.

Очакваме:

- да останем на същата страница;

- да видим съобщението за дублиращото се име;

- във формата да се запазят всички въведени от потребителя данни.

Page 62: Acceptance testing with Selenium 2 and PHPUnit
Page 63: Acceptance testing with Selenium 2 and PHPUnit
Page 64: Acceptance testing with Selenium 2 and PHPUnit

PHPUnit_Extensions_Selenium2TestCase

– acceptAlert()Щраква OK върху alert или confirmation box.

– dismissAlert()Щраква върху cancel при confirmation box, или не натиска OK при alert.

– alertTesxt()Връща текста от текущия alert.

Page 65: Acceptance testing with Selenium 2 and PHPUnit

Пример: Alerts – Имаме контролен панел посредством който трием

потребители, щраквайки върху техните потребителски имена. При щракване

върху дадено име се отваря alert. Като потвърдим – потребителя се трие.

Ако щракнем на cancel – не се случва нищо.

Искаме да се уверми:

- че пренасочва към правилната стграница;

- на нея излиза съобщение че потребителя е изтрит;

- требителя го няма в базата данни.

Page 66: Acceptance testing with Selenium 2 and PHPUnit
Page 67: Acceptance testing with Selenium 2 and PHPUnit
Page 68: Acceptance testing with Selenium 2 and PHPUnit

PHPUnit_Extensions_Selenium2TestCase

– timeout()Връща обект от тип PHPUnit_Extensions_Selenium2TestCase_Session_Timeouts.

• PHPUnit_Extensions_Selenium2TestCase_Session_Timeouts

– implicitWait($time)Задава времето на изчакване при търсене на даден обект.

Page 69: Acceptance testing with Selenium 2 and PHPUnit

Пример: Тестване за наличието на елемент който се зарежда от Ajax.

Очакваме:- да намерим зареждания от Ajax обект, на страничката.

Page 70: Acceptance testing with Selenium 2 and PHPUnit
Page 71: Acceptance testing with Selenium 2 and PHPUnit
Page 72: Acceptance testing with Selenium 2 and PHPUnit
Page 73: Acceptance testing with Selenium 2 and PHPUnit

PHPUnit_Extensions_Selenium2TestCase

• Мобилни устройства

– orientation

– touch

• Ако елемента не бъде намерен?

– PHPUnit_Extensions_Selenium2TestCase_WebDriverException

Page 74: Acceptance testing with Selenium 2 and PHPUnit

PHPUnit_Extensions_Selenium2TestCase

• Assertion

– assertFalse()

– assertTrue();

– assertContains();

– assertEquals()

Page 75: Acceptance testing with Selenium 2 and PHPUnit

Facebook’s php-webdriver

Page 76: Acceptance testing with Selenium 2 and PHPUnit
Page 77: Acceptance testing with Selenium 2 and PHPUnit
Page 78: Acceptance testing with Selenium 2 and PHPUnit

Selenium GRID

Page 79: Acceptance testing with Selenium 2 and PHPUnit

Selenium GRID

• Какво е Selenium GRID?Selenium GRID ни дава възможност да стартираме паралелно множество тестове на различни машини с различни операционни системи и различни браузъри. Най-общо казано има две причини поради които да ползваме Selenium GRID:

– искаме да стартираме нашите тестове на ралзични браузъри или различни верси на един и същи браузър;

– да редуцираме времето за изпълнение на пакета от тестове.

• GRIDСъстои се от един hub и един или повече nodes. И двете се реализират посредством:selenium-standalone-server.jar.

Page 80: Acceptance testing with Selenium 2 and PHPUnit

Selenium GRID

• Как работи?Selenium HUB получава скрипта с информация за това на коя платформа трябва да го стартира. HUB-ът „познава“ конфигурацията на всеки регистриран note. На базата на тази информация той избира node с указаната комбинация платформа-браузър.

• ИнсталиранеИнсталирането е просто. Изтеглете Selenium Server jar файла от долния линк и го запишете на всички nodes и на сървъра.http://docs.seleniumhq.org/download/

Page 81: Acceptance testing with Selenium 2 and PHPUnit

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

Page 82: Acceptance testing with Selenium 2 and PHPUnit

Selenium GRID

Page 83: Acceptance testing with Selenium 2 and PHPUnit

Пример: Конфигуриране на Selenium GRID: hub, nodes.Стартиране на тестове – последователно.

Page 84: Acceptance testing with Selenium 2 and PHPUnit

CentOS OS X Solaris

HUB NODE1 NODE

Page 85: Acceptance testing with Selenium 2 and PHPUnit
Page 86: Acceptance testing with Selenium 2 and PHPUnit

Пример: Selenium GRID: Стартиране на тестове – паралелно.

Page 87: Acceptance testing with Selenium 2 and PHPUnit
Page 88: Acceptance testing with Selenium 2 and PHPUnit

Благодаря за вниманието