47
Перший раз завжди страшно... про автоматизоване тестування Доповідачі Віталій Зінченко Вероніка Вульф

Перший раз завжди страшно... про автоматизоване тестування

  • Upload
    -

  • View
    55

  • Download
    11

Embed Size (px)

DESCRIPTION

Буде розглянуто основні підходи автоматизації функціонального та навантажувального тестування на прикладі таких застосунків як: JMeter, Selenium IDE/WebDriver/RC, Watir, Grinder, Sikuli, Sahi. Буде висвітлено використання інструментів, конфігурації середовища та організації тест скриптів для забезпечення покриття програмного продукту автоматичним тестуванням.

Citation preview

Перший раз завжди страшно... про автоматизоване тестування

ДоповідачіВіталій ЗінченкоВероніка Вульф

Мова йтиме про: Функціональне тестування

Selenium • IDE (Integrated Development Environment)• RC (Remote Control)• WD (Web Driver)

Watir (Web Application Testing inRuby) Sahi

Навантажувальне тестування Grinder Jmeter

Sikuli – для потіхи

Ідентифікація елементів

Id: id=EbayTickets, id=00Nd0000004MEN8 Link: link=Accounts, link=Sign in Xpath: xpath=//div[@id="some_id"] Css: css=div[id=some_id]

http://www.w3.org/TR/CSS2/selector.htmlhttp://www.w3schools.com/xpath/

Css та Xpath

Відмінності в синтаксисі xPath і Сss:Css Xpath Тлумачення

css=div[id=some_id] xpath=//div[@id="some_id"] прив‘язка до іерархії обєкта

css=div * span > a xpath=//div//span/a прив‘язка до атрибутів

css=div[@title~=title] xpath=//div[contains(@title="title")] часткова прив’язка до атрибутів

Синтаксис Css та XPathCss xPath Тлумачення> / наступний рівень ієрархії обєкту

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

* //* всі елементи

p //p всі P елементи

p > * //p/* всі дочірні

#foo //*[@id='foo'] елемент за ID

.foo //*[contains(@class,'foo')] елемент за class

*[title] //*[@title] елемент за title

p > *:first-child //p/*[0] перший дочірний елемент в усіх P

Not possible //p[a] всі P да А є дочірнім

p + * //p/following-sibling::*[0] наступний елемент

Selenium, Watir, Sahi - застосуванняПерелічені аплікації використовуються для:

Функціонального тестування Приймального тестування Тестування сумісності з браузерами

Можливість використання різних мов у скриптахМова Сімейство Watir продуктів Selenium Sahi

C# Watin RC, WD -

Java Watij IDE, RC, WD +

PHP - RC, WD -

Ruby Watir RC, WD +

Python - RC, WD -

Perl - RC, WD -

HTML - IDE -

Selenium - сумісністьWeb Driver

Google Chrome Internet Explorer Mozilla Firefox Opera

Remote Controller Google Chrome Internet Explorer Mozilla Firefox Opera Safari

Selenium IDE – початок роботи

Необхідні ресурси:• Mozilla Firefox (v.3x-12x)• Selenium IDE плагін для Mozilla Firefox (v.3x-12x) http://seleniumhq.org/projects/ide/

Selenium IDE – запис скрипта Запуск Selenium IDE (Tools->Selenium IDE) Увімкнення рекордера (стартує при запуску) Виконання сценарію в браузері

Від Selenium IDE до Selenium RC Необхідні ресурси: Selenium-server-standalone-2.21.0-SRC-712.patch.jar http://code.google.com/p/selenium/downloads/list TestSuite (необхідно створити) run-test.cmd файл (необхідно створити)Запуск скрипта: Запуск run-test.cmd файл

Від Selenium IDE до Selenium RC Необхідні ресурси: Selenium-server-standalone-2.21.0-SRC-712.patch.jar http://code.google.com/p/selenium/downloads/list TestSuite (необхідно створити) run-test.cmd файл (необхідно створити)

java -jar selenium-server-standalone-2.21.0-SRC-712.patch.jar -htmlSuite "*firefox" "http://ebay.com/" "./Ebay.html" "./TestResults-log.html" -timeout 180 start .\TestResults-log.html

Запуск скрипта: Запуск run-test.cmd файл

Selenium RC Запуск скрипта:

• Відкрити NetBeans IDE• Створити новий Maven проект• Конвертнути тест - кейс з Selenium IDE File->Export Test Case As->Junit4 (Remote Control)• Додати конвертований файл в проект в NetBeans Використати Maven репозиторій для об’єктів, що не знайдені в

експортованому файлі• Змінити налаштування проксі в браузері• Запустити проект в NetBeans

Selenium Remote Control

Selenium Server

Selenium Core

HTTP Proxy

HTML, Javascript

Client configured

Test Scripts

java, .net, perl, ruby, python

Web Application

Firefox, Safari, Internet ExplorerHTTP

commands

Launch and Kill

Selenium Web DriverЗапуск скрипта: Запустити NetBeans IDE Створити новий Maven проект Конвертнути тест- кейс з Selenium IDE File->Export Test Case As->Junit4 (WebDriver) Додати експортований файл в проект в NetBeans

Використати Maven репозиторій для об’єктів, що не знайдені в експортованому файлі.

Запустити тест в NetBeans

Watir(Web Application Testing inRuby)Watir сумісний з:

Internet Explorer Google Chrome Mozilla Firefox Opera

Watir – початок роботиНеобхідні ресурси: Ruby та Devkit http://rubyinstaller.org/downloads Інструкція до Watir - https://github.com/zeljkofilipin/watirbook/downloads Сhrome driver

http://code.google.com/p/chromedriver/downloads/list

Watir – налаштуванняНеобхідні встановлення: Оновити RubyGems: gem update – system ffi пакет, вимагається Watir and watir-webdriver При помилці встановлення ffi пакета – встановити DevKit Виконати ruby dk.rb init Встановити ruby dk.rb install Встановити Watir: gem install watir Встановити WebDriver: gem install watir-webdriver Додати шлях, де розміщено chrome driver, в %PATH% Налаштування IE для роботи з WebDriver - увімкнути Protected

Mode для всіх зон Internet Options > Security

Watir – налаштуванняЯк перевірити, чи все працює в IE:

C:\watir\devkit>irb irb(main):001:0> require "watir" => true irb(main):002:0> browser = Watir::Browser.new => #<Watir::IE:0x246680a2 url="about:blank" title=""> - запустився браузер Internet Explorer irb(main):003:0> browser.goto "google.com" => 2.403473 - відкрилась сторінка гугла в Internet Explorer irb(main):004:0>

Watir & EclipseНеобхідні ресурси: Eclipse Java Dynamic Languages Toolkit (DLTK) (містить підтримку Ruby)

http://download.eclipse.org/technology/dltk/updates/

Налаштування середовища: Запустити Eclipse, вказати workspace Налаштувати Dynamic Language Toolkit (DLTK) 2.0 Зазначити використання Ruby Ruby Perspective в Window > Open Perspective > Other, вибрати Ruby Налаштувати інтерпретатор Ruby Window > Preferences > Ruby > Interpreters. Вказати шлях до ruby.exe Створити проект

File > New > Ruby Project

Відзначити використання:• Dynamic Language Toolkit - Core Framework• Dynamic Language Toolkit - Core Frameworks SDK• Dynamic Language Toolkit - Ruby Development Tools• Dynamic Language Toolkit - Ruby Development Tools SDK

Watir - скриптrequire "watir-webdriver"require 'test/unit‘class EBayTest < Test::Unit::TestCase def test_simple #@browser = Watir::Browser.new :ff #@browser = Watir::Browser.new :chrome browser = Watir::Browser.new :ie browser.goto "ebay.com" browser.element(:css => "#gh-ug a.gh-a").click browser.text_field(:id => "userid").set("QA_AUser") browser.text_field(:id => "pass").set("Automation") browser.checkbox(:id => "signed_in").clear browser.button(:id => "but_sgnBt").click assert(browser.element(:xpath => "//table/tbody/tr/td[3]/span/b").text.include?("qa_auser")) assert(browser.element(:xpath => "//table/tbody/tr/td[3]/span/a").text.include?("Sign out")) browser.close() endend

Лог файлRun options: # Running tests:Finished tests in 15.338171s, 0.0652 tests/s, 0.1304 assertions/s.1 tests, 2 assertions, 0 failures, 0 errors, 0 skips

Sahi – початок роботиНеобхідні ресурси: Остання версія sahi http://sahi.co.in Java Mozilla Firefox Eclipse Classic http://www.eclipse.org/downloads/

Необхідні налаштування: Відредагувати sahi/config/sahi.properties -> controller.mode=java Забезпечує запис коду на Java

Sahi – налаштування Запустити Eclipse Створити Java проект Next -> на вкладку Liblaries Додати sahi.jar - Add External Jars з ...\sahi\lib Створити новий клас в проекті Підключити Sahi і jUnit до проекту

import net.sf.sahi.client.Browser; import net.sf.sahi.config.Configuration; import junit.framework.*;

Sahi – створення скрипта Запустити Sahi

Запустити браузер Відкрити вікно рекордера - в браузері натиснути Ctrl+Alt+DblClick Натиснути Record і записати визначений сценарій

Sahi – створення скрипта в Eclipse Додати ініціалізацію браузера String sahiBase = “…/sahi/"; // шлях до встановленого Sahi String userDataDirectory = “…/sahi/userdata"; //шлях до користувацьких даних в Sahi

Configuration.initJava(sahiBase, userDataDirectory); String browserType = "ie"; Browser browser = new Browser(browserType); browser.open();

Додати записаний код, модифікуючи ідентифікатори

Порівняння скриптів. Відриття сторінки ebay.com

Використана аплікація

Вигляд скрипта

Selenium IDE open /Selenium RC selenium.open("http://www.ebay.com/");Selenium WD driver.get(baseUrl + "/");Watir browser.goto "ebay.com"Sahi browser.navigateTo("ebay.com");

Порівняння скриптів. Клік на ‘Sign in’ лінку для переходу на форму логування

Використана аплікація

Вигляд скрипта

Selenium IDE clickAndWait css=#gh-ug a.gh-aSelenium RC selenium.click("css=#gh-ug a.gh-a");Selenium WD driver.findElement(By.cssSelector("#gh-ug a.gh-

a")).click();Watir browser.element(:css => "#gh-ug a.gh-a").clickSahi browser.link("Sign in").click();

Порівняння скриптів. Ввід логіну

Використана аплікація

Вигляд скрипта

Selenium IDE type id=userid QA_AUserSelenium RC selenium.type("id=userid", "QA_AUser");Selenium WD driver.findElement(By.id("userid")).sendKeys("QA

_AUser");Watir browser.text_field(:id =>

"userid").set("QA_AUser")Sahi browser.textbox("userid").setValue("QA_AUSer");

Порівняння скриптів. Ввід паролю

Використана аплікація

Вигляд скрипта

Selenium IDE type id=pass AutomationSelenium RC selenium.type("id=pass", "Automation");Selenium WD driver.findElement(By.id("pass")).sendKeys("Aut

omation");Watir browser.text_field(:id =>

"pass").set("Automation")Sahi browser.password("pass").setValue("Automation

");

Порівняння скриптів.Зняття відмітки з ‘Keep me signed in’ чекбоксу

Використана аплікація

Вигляд скрипта

Selenium IDE click id=signed_inSelenium RC selenium.click("id=signed_in");Selenium WD driver.findElement(By.id("signed_in")).click();Watir browser.checkbox(:id => "signed_in").clearSahi browser.checkbox("keepMeSignInOption").click();

Порівняння скриптів.Клік на ‘Sign in’ кнопці

Використана аплікація

Вигляд скрипта

Selenium IDE clickAndWait id=but_sgnBtSelenium RC selenium.click("id=but_sgnBt");Selenium WD driver.findElement(By.id("but_sgnBt")).click();Watir browser.button(:id => "but_sgnBt").clickSahi browser.submit("Sign in").click();

Порівняння скриптів. Перевірка успішності логування - наявність імені користувачів на сторінці

Використана аплікація

Вигляд скрипта

Selenium IDE assertText xpath=//table/tbody/tr/td[3]/span/b qa_auser

Selenium RC assertEquals("qa_auser", selenium.getText("xpath=//table/tbody/tr/td[3]/span/b"));

Selenium WD assertEquals("qa_auser", driver.findElement(By.xpath("//table/tbody/tr/td[3]/span/b")).getText());

Watir assert(browser.element(:xpath => "//table/tbody/tr/td[3]/span/b").text.include?("qa_auser"))

Sahi assertTrue(browser.byXPath("//table/tbody/tr/td[3]/span/b").getText().equals("qa_auser"));

Порівняння скриптів. Перевірка успішності логування - наявність лінку ‘Sign out’

Використана аплікація

Вигляд скрипта

Selenium IDE assertText xpath=//table/tbody/tr/td[3]/span/a Sign out

Selenium RC assertEquals("Sign out", selenium.getText("xpath=//table/tbody/tr/td[3]/span/a"));

Selenium WD assertEquals("Sign out", driver.findElement(By.xpath("//table/tbody/tr/td[3]/span/a")).getText());

Watir assert(browser.element(:xpath => "//table/tbody/tr/td[3]/span/a").text.include?("Sign out"))

Sahi assertTrue(browser.byXPath("//table/tbody/tr/td[3]/span/a").getText().equals("Sign out"));

Навантажувальне тестування - load testing

Охоплює:

Тестування відмовостійкості - failover testing Стрес-тестування - stress testing Цільова перевірка - targeted infrastructure test Об’ємне тестування - volume testing Тестування стабільності - endurance testing Тестування швидкодії - performance testing Тестування пропускної здатності - network sensitivity

testing

Навантажувальне тестування Показники, що слід враховувати:

час відповіді кількість запитів за секунду навантаження процесора навантаження пам’яті завантаженість мережевого інтерфейсу кількість виконаних запитів кількість невдалих запитів інші показники: база даних, сервіси, інше

Для кожної з вищевказаних метрик слід зібрати наступні значення: Середнє Максимальне Мінімальне

Запити. Get & Post HTTP (HyperText Transfer Prоtocоl ) — протокол прикладного

рівня передачі даних. Основою HTTP є технологія «клієнт-сервер», тобто є клієнт, що висилає запит, і сервер, який обробляє запит і відсилає відповідь з результатом.

GET Використовується для отримання вмісту певного ресурсу.Всі

дані введені в адресну стрічку переводяться в GET запити. Наприклад - http://www.site.com/index.html Дана команда каже серверу: "Дай мені файл index.html, який

знаходиться в директорії (на сайті) http://www.site.com/". POST Використовується для передачі користувацьких даних

певному ресурсу. Дані при передачі включаються в тіло запиту, тобто дані приховані. Вміст відповіді сервера на запит POST не кешується.

GET POST+ Швидкий - Повільний- Інформація, що відсилається на сервер – видима

+ Інформація, що відсилається на сервер – невидима (в тілі запиту)

- Об’єм інформації, що можна надіслати - обмежений

+ Об’єм інформації, що можна надіслати - необмежений

+ Сторінки – результати запиту, можна зберегти в закладках

- Сторінки – результати запиту, не можна зберегти в закладках

Запити OPTIONSВикористовується для визначення можливостей веб-сервера і

параметрів з’єднання для конкретного ресурсу. У відповідь серверу необхідно включити заголовок Allow зі списком підтримуваних методів, розширень.

Для того, щоб взнати можливості всього сервера, клієнт повинен вказати в URL “*”. Запити “OPTIONS * HTTP/1.1” можуть використовуватись для перевірки справності сервера, підтримки протокола HTTP версії 1.1. Результати цього запиту не кешуються.

HEADАналогічний до методу GET, але у відповіді сервера відсутнє тіло.

Зазвичай використовується для отримання метаданих, перевірки наявності ресурсу (валідація URL) і щоб переконатись, що він не змінився від часу останнього звернення. Заголовки відповіді можуть кешуватись. При неспівпадінні метаданих ресурсу з відповідною інформацією в кеші, копія ресурсу позначаєтться застарілою.

PATCHАналогічний до PUT, але застосовується лише до фрагменту ресурса.

• DELETE Видаляє вказаний ресурс.• TRACEПовертає отриманий запит таким чином, що клієнт має

можливість побачити іформацію, що була змінена чи додана проміжними серверами.

• LINKВстановлює зв’язок вказаного ресурсу з іншим.• UNLINKЗнищує зв’язок вказаного ресурса з іншим.• CONNECTТрансформує з’єднання запиту в прозорий TCP/IP тунель,

зазвичай для того, щоб створити захищений SSL зв’язок через незашифрований проксі.

Grinder - встановленняНеобхідні ресурси: grinder 3.7.1 (остання версія 3.8 не працює з Grinder Analyzer)

http://grinder.sourceforge.net/ grinder analyzer

http://track.sourceforge.net/ jython2.5.2 (необхідний для grinder analyzer )

http://www.jython.org/ Java

Необхідні налаштування: Розпакувати Grinder ...\grinder\grinder3.7.1 Проінсталювати jython ...\grinder\jython2.5.2 Розпакувати Grinder Analyzer ...\grinder\GrinderAnalyzer.V2.b16

Grinder – початок роботиGrinder складається з трьох елементів:

Агент - виконує тестовий скрипт Консоль керування - використовується для керування агентами Проксі - використовується для запису скрипта

Необхідні налаштування: setGrinderEnv.cmd - файл для встановлення середовища запуску grinder

@REM setGrinderEnv.cmd: set GRINDERPATH=…\grinder\grinder-3.7.1\ set GRINDERPROPERTIES=…\grinder\grinder.properties set CLASSPATH=%GRINDERPATH%\lib\grinder.jar; …\

jython2.5.2;%CLASSPATH% set JAVA_HOME=C:\Program Files\Java\jre7 PATH=%JAVA_HOME%\bin;%PATH%

startAgent.cmd - запуск агента@REM startAgent.cmd:

call .\setGrinderEnv.cmd echo %CLASSPATH% java -cp %CLASSPATH% net.grinder.Grinder %GRINDERPROPERTIES% startConsole.cmd - запуск консолі керування

@REM startConsole.cmd: call .\setGrinderEnv.cmd java -cp %CLASSPATH% net.grinder.Console startProxy.cmd - запуск проксі

@REM startProxy.cmd: call .\setGrinderEnv.cmdjava -classpath %CLASSPATH% net.grinder.TCPProxy -console -http > grinder.pyскрипт буде записано в grinder.py

Grinder – запис тесту Запустити startProxy.cmd Налаштувати браузер на проксі Запис скрипта для google.com :

пройти визначений сценарій, який буде записаний в grinder.py секція підключення модулів: опис заголовків запитів: опис адрес, до яких відбувалось підключення

2012-05-25 18:12:27,396 INFO tcpproxy: Initialising as an HTTP/HTTPS proxy with the parameters: Request filters: HTTPRequestFilter Response filters: HTTPResponseFilter Local address: localhost:8001 2012-05-15 11:12:28,538 INFO tcpproxy: Engine initialised, listening on port 8001 - проксі запустився на 8001 from net.grinder.script import Test

from net.grinder.script.Grinder import grinder from net.grinder.plugin.http import HTTPPluginControl, HTTPRequest from HTTPClient import NVPair connectionDefaults = HTTPPluginControl.getConnectionDefaults() httpUtilities = HTTPPluginControl.getHTTPUtilities()

connectionDefaults.defaultHeaders = \ [ NVPair('Accept-Language', 'en- us,en;q=0.5'),

   NVPair('Accept-Encoding', 'gzip, deflate'),   NVPair('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; rv:12.0)

Gecko/20100101 Firefox/12.0'), ] headers1= \ [ NVPair('Accept', 'image/png,image/*;q=0.8,*/*;q=0.5'),    NVPair('Referer', 'http://www.google.com.ua/'), ]

url0 = 'http://google.com.ua:80'url1 = 'http://www.google.com.ua:80'url2 = 'http://www.gstatic.com:80'url3 = 'http://ssl.gstatic.com:80'

Grinder – опис запитів request101 = HTTPRequest(url=url0, headers=headers0) request101 = Test(101, 'GET /').wrap(request101)

class TestRunner: - клас з вхідною точкою def page2(self): """GET / (requests 201-202).""" result = request201.GET('/') grinder.sleep(100) request202.GET('/images/icons/product/chrome-48.png') return result def __call__(self): - виконавча секція """Called for every run performed by the worker thread.""" self.page1() # GET / (request 101) self.page2() # GET / (requests 201-202) self.page3() # GET rs=AItRSTPOna8b5LEz0mR0dniAQkRUD0QhZA (requests 301-

304) self.page4() # GET tia.png (request 401) self.page5() # GET nav_logo107.png (request 501) self.page6() # GET csi (requests 601-602) self.page7() # GET sem_ca34ccb96290d3b4857d225c8ea30d48.js (request 701)

Детальніше про написання скриптів: http://grinder.sourceforge.net/g3/tutorial-perks.html

Grinder – налаштування тесту Налаштування тесту:• grinder.properties • setGrinderEnv.cmd: set GRINDERPATH=C:\grinder\grinder-3.7.1\ set GRINDERPROPERTIES=C:\grinder\grinder.properties set CLASSPATH=%GRINDERPATH%\lib\grinder.jar;C:\jython2.5.2;%CLASSPATH% set JAVA_HOME=C:\Program Files\Java\jre7 PATH=%JAVA_HOME%\bin;%PATH%

Файл grinder.properties виглядає наступним чином:grinder.plugin=net.grinder.plugin.http.HttpPlugin

grinder.processes=20 - кількість процесів, що запустить один агент grinder.threads=10 - кількість потоків grinder.runs=3 - кількість запусків скрипта кожним потоком grinder.useConsole=true - виводити результат в консоль grinder.logDirectory=logs - записувати лог файли в grinder.numberOfOldLogs=2 - зберігати історію логів grinder.jvm.arguments = -Dpython.home=c:\jython2.5.2 підключення jython2 grinder.script=C:/grinder/grinder-3.8/grinder.py - тестовий скриптБільш детальну інформацію можна знайти на

http://grinder.sourceforge.net/g3/manual.html#Table+of+properties

Grinder – виконання тесту Запустити startConsole.cmd - буде очікувати на появу агентів Запустити startAgent.cmd

...\grinder\grinder-3.7.1>java -cp ...\grinder\grinder-3.7.1\\lib\grinder.jar; ...\jython2.5.2; net.grinder.Grinder ...\grinder\grinder.properties 2012-05-15 12:09:41,352 INFO agent: The Grinder 3.7.1 2012-05-15 12:09:41,482 INFO agent: connected to console at

localhost/127.0.0.1:6372 2012-05-15 12:09:41,482 INFO agent: waiting for console signal Натиснути Run в Grinder Console Після завершення сценарію запустити Grinder Analyzer -

генерація звіту jython ./analyzer.py "<grinder data File(s)>" <grinder out file> [number of agents] ...\jython2.5.2\jython.bat .\analyzer.py

...\grinder\grinder- 3.7.1\logs\sahi-0-data.log ...\grinder\grinder-3.7.1\logs\sahi-0.log Звіт генерується в ...\grinder\GrinderAnalyzer.V2.b16\grinderReport

Jmeter - встановленняНеобхідні ресурси: jMeter jakarta.apache.org Java JMeterPlugins.jar – плагін для відображення статистики http://code.google.com/p/jmeter-plugins/

Необхідні налаштування: jMeter розпакувати в ...\JMeter. JMeterPlugins.jar розпакувати в ...\JMeter\lib\ext в файлі jmeter.properties встановити True для параметру

jmeter.save.saveservice.thread_count http://code.google.com/p/jmeter-plugins/wiki/PluginInstall

Jmeter – створення скрипта Запустити jmeter.bat Створити потокову групу в Test Plan Додати проксі сервер в корінь Workbench Налаштувати проксі

Встановити Target Controller для Proxy Server Увімкнути Retrieve All Embeded resources from HTTP files

Натиснути Start Налаштувати з`єднання через проксі в браузері Пройти тестовий сценарій

Jmeter – тестовий сценарій Вигляд скрипта Можливі складові скрипта Параметри запитів Запустити сценарій з наступними

параметрами Отримати результат

Jmeter - результати Response Time Distribution Active Threads Over Time Responce Codes per Second

HTTP 200 - OKHTTP 204 - No Content The server successfully processed the request, but is not returning any content.HTTP 301 - Moved Permanently This and all future requests should be directed to the given URI.

Transactions per second Summary Report: Summary Report shows the following information about executed test:

·         Label - the label test.·         # Samples - the number of requests that were sent to target server.·         Average - the average elapsed time of a set of results.·         Min - the lowest elapsed time for the samples with the same label.·         Max - the longest elapsed time for the samples with the same label.·         Std. Dev. - the Standard Deviation of the sample elapsed time.·         Error % - percent of requests with errors.·         Throughput – average numbers of requests per second that are sent to target server.·         Kb/sec - the throughput measured in Kilobytes per second.·         Avg. Bytes – the average size of the sample response in bytes.

Sikuli – початок роботиЩоб розпочати роботу з Sikuli, необхідно: Завантажити продукт http://launchpad.net/sikuli/sikuli-x/x1.0-

rc3/+download/Sikuli-X-1.0rc3%20(r905)-win32.exe

Встановити Sikuli

Sikuli – запис та запуск скрипта

Запитання