Тестирование производительности ajax приложений с...

76
atdays.com Performance Testing AJAX Application with JMeter Vladimir Primakov

Upload: automated-testinginfo

Post on 01-Dec-2014

3.768 views

Category:

Documents


0 download

DESCRIPTION

Тестирование производительности Ajax приложений с помощью JMeter, Владимир Примаков В этом докладе будет раскрыт вопрос автоматизации тестирования производительности Ajax приложений с помощью бесплатного инструмента jmeter. Я расскажу об основных особенностях и трудностях автоматизации производительности Ajax приложений, о том, с какими конкретно проблемами я сталкивался и как они решались. Также я приведу ряд полезных советов, которые, возможно, облегчат вашу жизнь, если Вы вдруг решитесь провести тестирование производительности ajax приложений.

TRANSCRIPT

Page 1: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com

Performance Testing

AJAX Application with

JMeter

Vladimir Primakov

Page 2: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays

Agenda

AJAX

Main Difficulties of Performance Testing

of AJAX applications with jmeter and

their Solutions

Conclusions

Questions

2

Page 3: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays

Me

3

QA Manager at Kuadriga company.

3 years of continuous experience in automated

testing: IBM Rational Robot, Test Complete,

Selenium (RC), Jmeter.

Successfully applied server-side performance and

load testing on 4-5 different projects.

Enjoy photography, sports, and self-improvement

Profile in Linkedin:

http://www.linkedin.com/in/vladimirprimakov

Email: [email protected]

Skype: vladimir.primakov

Page 4: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays

AJAX - ASYNCHRONOUS JAVASCRIPT AND XML

AJAX – XMLHttpRequest + DHTML (HTML, CSS, Javascript)

4

Page 5: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays

Classic and Ajax Web-apps

5

Page 6: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 6

Browser Client We

b-se

rve

r Data store,

backend

processing

Server Side

Classic

GUI

Classic and Ajax Web-apps

Page 7: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays

Classic and Ajax Web-apps

7

Http Request

Browser Client

http(s) transport W

eb

-serv

er

Data store,

backend

processing

Server Side

Classic

GUI

Page 8: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays

Classic and Ajax Web-apps

8

Http Request

Http Response

HTML + javascript +

CSS data

Browser Client

http(s) transport W

eb

-serv

er

Data store,

backend

processing

Server Side

Classic

GUI

Page 9: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays

Classic and Ajax Web-apps

9

Http Request

Http Response

Browser Client

http(s) transport W

eb

-serv

er

Data store,

backend

processing

Server Side

Classic

GUI

Browser Client

Web/

XML/

JSON

server

Data store,

backend

processing

Server Side

AJAX

GUI

HTML + javascript +

CSS data

Page 10: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays

Classic and Ajax Web-apps

10

Http Request

Http Response

Browser Client

http(s) transport W

eb

-serv

er

Data store,

backend

processing

Server Side

Classic

GUI

Browser Client

Web/

XML/

JSON

server

Data store,

backend

processing

Server Side

AJAX

Ajax

Engine

GUI

JavaScript

call

HTML + javascript +

CSS data

Page 11: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays

Classic and Ajax Web-apps

11

Http Request

Http Response

Browser Client

http(s) transport W

eb

-serv

er

Data store,

backend

processing

Server Side

Classic

GUI

Browser Client

Web/

XML/

JSON

server

Data store,

backend

processing

Server Side

AJAX

Ajax

Engine XMLHttp

Request

object

GUI

JavaScript

call

HTML + javascript +

CSS data

Page 12: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays

Classic and Ajax Web-apps

12

Http Request

Http Response

Browser Client

http(s) transport W

eb

-serv

er

Data store,

backend

processing

Server Side

Classic

GUI

(XML)Http Request

Browser Client

http(s) transport

Web/

XML/

JSON

server

Data store,

backend

processing

Server Side

AJAX

Ajax

Engine XMLHttp

Request

object

GUI

JavaScript

call

HTML + javascript +

CSS data

Page 13: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays

Classic and Ajax Web-apps

13

Http Request

Http Response

Browser Client

http(s) transport W

eb

-serv

er

Data store,

backend

processing

Server Side

Classic

GUI

(XML)Http Request

(XML) Http Response

XML/JSON

Browser Client

http(s) transport

Web/

XML/

JSON

server

Data store,

backend

processing

Server Side

AJAX

Ajax

Engine XMLHttp

Request

object

GUI

JavaScript

call

HTML + javascript +

CSS data

Page 14: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays

Classic and Ajax Web-apps

14

Http Request

Http Response

Browser Client

http(s) transport W

eb

-serv

er

Data store,

backend

processing

Server Side

Classic

GUI

(XML)Http Request

(XML) Http Response

XML/JSON

Browser Client

http(s) transport

Web/

XML/

JSON

server

Data store,

backend

processing

Server Side

AJAX

Ajax

Engine XMLHttp

Request

object

GUI

JavaScript

call

HTML+CSS

HTML + javascript +

CSS data

Page 15: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays

Classic and Ajax Web-apps

15

Http Request

Http Response

Browser Client

http(s) transport W

eb

-serv

er

Data store,

backend

processing

Server Side

Classic

GUI

(XML)Http Request

(XML) Http Response

Size - Small

Browser Client

http(s) transport

Web/

XML/

JSON

server

Data store,

backend

processing

Server Side

AJAX

Ajax

Engine XMLHttp

Request

object

GUI

JavaScript

call

HTML+CSS

Size - Big

Page 16: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 16

Classic Response Request

Post HTML Page

Page 17: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 17

Classic

AJAX

Response Request Post HTML Page

Request

Post

JSON Response Part of a page

a)

b)

Page 18: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 18

(AJAX) JSON Response

Part of a page

a)

b)

Page 19: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays

Vaadin}> (GWT) Ajax framework

19

Page 20: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays

Vaadin}> (GWT) Ajax framework

20

Server Side

GWT

GUI (javascript)

Browser Client Vaadin

Server-side GUI

UIDL - User Interface Description Language

Web

Server

Backend

Processing

GWT widgets

Java

objects

Page 21: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays

Vaadin}> (GWT) Ajax framework

21

Server Side

GWT

GUI (javascript)

Browser Client

UIDL - User Interface Description Language

Web

Server

Backend

Processing

GWT widgets

Java

objects

Mirroring (GUI)

Vaadin Server-side GUI

Page 22: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays

Vaadin}> (GWT) Ajax framework

22

Server Side

GWT

GUI (javascript)

Browser Client Vaadin

Server-side GUI

UIDL - User Interface Description Language

Web

Server

Backend

Processing

GWT widgets

Java

objects

Page 23: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays

Vaadin}> (GWT) Ajax framework

23

Server Side

Vaadin

Engine (javascript)

GWT

GUI (javascript)

Java

objects

Browser Client

UIDL - User Interface Description Language

Web

Server

Backend

Processing

GWT widgets UIDL Vaadin

Server-side GUI

Page 24: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays

Vaadin}> (GWT) Ajax framework

24

Server Side

Vaadin

Engine (javascript)

GWT

GUI (javascript)

JSON (UIDL)

Java

objects

Browser Client

UIDL - User Interface Description Language

Web

Server

Backend

Processing

GWT widgets UIDL Vaadin

Server-side GUI

Page 25: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays

Vaadin}> (GWT) Ajax framework

25

(XML) Http Request

Server Side

http(s) transport

Vaadin

Engine (javascript)

GWT

GUI (javascript)

JSON (UIDL)

Java

objects

Browser Client

UIDL - User Interface Description Language

Web

Server

Backend

Processing

GWT widgets UIDL Vaadin

Server-side GUI

Page 26: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays

Vaadin}> (GWT) Ajax framework

26

(XML) Http Request

Server Side

http(s) transport

Vaadin

Engine (javascript)

GWT

GUI (javascript)

JSON (UIDL)

Java

objects UIDL

Browser Client

UIDL - User Interface Description Language

Web

Server

Backend

Processing

GWT widgets UIDL Vaadin

Server-side GUI

Page 27: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays

Vaadin}> (GWT) Ajax framework

27

(XML) Http Request

(XML) Http Response

JSON (UIDL)

Server Side

http(s) transport

Vaadin

Engine (javascript)

GWT

GUI (javascript)

JSON (UIDL)

Java

objects UIDL

Browser Client

UIDL - User Interface Description Language

Web

Server

Backend

Processing

GWT widgets UIDL Vaadin

Server-side GUI

Page 28: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 28

UIDL Request (Post)

(UIDL) JSON Response

(Show Notifications window)

(Rendering Notifications window)

Page 29: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 29

UIDL Request (Post)

(UIDL) JSON Response

(Show Notifications window)

(Rendering Notifications window)

Page 30: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 30

UIDL Request (Post)

(UIDL) JSON Response

(Show Notifications window)

(Rendering Notifications window)

Element Type Paintable ID

Arguments

Page 31: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays

MAIN DIFFICULTIES OF PERFORMANCE

TESTING OF AJAX APPLICATIONS WITH JMETER AND THEIR SOLUTIONS

31

Page 32: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays

MAIN DIFFICULTIES OF PERFORMANCE

TESTING OF AJAX APPLICATIONS WITH JMETER AND THEIR SOLUTIONS

32

Page 33: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays

MAIN DIFFICULTIES OF PERFORMANCE

TESTING OF AJAX APPLICATIONS WITH JMETER AND THEIR SOLUTIONS

33

Page 34: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays

MAIN DIFFICULTIES OF PERFORMANCE

TESTING OF AJAX APPLICATIONS WITH JMETER AND THEIR SOLUTIONS

34

Page 35: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays

Typical Performance/Load Testing Stages

35

Analyze Results, Report, and Retest

Execute the Test

Configure the Test Environment

Implement the Usage Scenarios (Scripts)

Plan and Design Usage Scenarios

Identify Performance Acceptance Criteria

Identify the Test Environment

Page 36: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 36

Analyze Results, Report, and Retest

Execute the Test

Configure the Test Environment

Implement the Usage Scenarios (Scripts)

Plan and Design Usage Scenarios

Identify Performance Acceptance Criteria

Identify the Test Environment

Typical Performance/Load Testing Stages

Page 37: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays

Problems in Details:

Typical Ajax Applications

37

Unreadable Responses/Requests

Hard to find consistency between

Responses/Requests and GUI elements

Dynamic IDs

Sequential dependency between requests

Page 38: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays

Problems in Details:

Vaadin (UIDL) Ajax Applications

38

The same URL for most requests(Vaadin)

Dependency on Screen Resolution (Vaadin)

Error requests are not evident (Vaadin)

Too many requests (Vaadin)

Page 39: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays

SOLUTIONS

40

Page 40: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 41

Unreadable

Responses/Requests

Page 41: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 42

1. Get used to this

format

Unreadable

Responses/Requests

Page 42: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 43

2. Use JSON Viewers

Page 43: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 44

3. Use JSON Parsers

Page 44: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 45

4. Parse JSON Yourself

Page 45: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays

Hard to find consistency between

Responses/Requests and GUI elements

46

Page 46: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 47

1. Use self-explanatory named IDs

(classes) for GUI elements

Hard to find consistency between

Responses/Requests and GUI elements

Page 47: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 48

1. Use self-explanatory named IDs

(classes) for GUI elements

Hard to find consistency between

Responses/Requests and GUI elements

Page 48: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 49

2. Use Anchors

Page 49: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 50

2. Use Anchors

SAMPLE Scenario: 1. Create a ticket via email in the task management

system

2. Check that the ticket is created

3. Delete the ticket

Page 50: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 51

1) Creating a ticket via email (SMTP Sampler) 2. Use Anchors

Page 51: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 52

1) Creating a ticket via email (SMTP Sampler) 2. Use Anchors

2) Login into the Ticket System

Page 52: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 53

1) Creating a ticket via email (SMTP Sampler) 2. Use Anchors

2) Login into the Ticket System

3) Request to show tickets

Page 53: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 54

1) Creating a ticket via email (SMTP Sampler) 2. Use Anchors

2) Login into the Ticket System

3) Request to show tickets 4) JSON Response (Tickets page)

Page 54: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 55

1) Creating a ticket via email (SMTP Sampler) 2. Use Anchors

2) Login into the Ticket System

3) Request to show tickets 4) JSON Response (Tickets page)

5) Checking whether the

ticket is created

Page 55: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 56

1) Creating a ticket via email (SMTP Sampler) 2. Use Anchors

2) Login into the Ticket System

3) Request to show tickets 4) JSON Response (Tickets page)

5) Checking whether the

ticket is created

6) Extracting ticket ID (Regular Expression Extractor)

Page 56: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 57

1) Creating a ticket via email (SMTP Sampler) 2. Use Anchors

2) Login into the Ticket System

3) Request to show tickets 4) JSON Response (Tickets page)

5) Checking whether the

ticket is created

6) Extracting ticket ID (Regular Expression Extractor)

7) Request to Delete ticket

Page 57: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 58

Dynamic IDs

Page 58: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 59

Put Your application into the mode with

Static IDs (Don’t forget to restore this mode

every time you run scripts)

Dynamic IDs

Page 59: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 60

Put Your application into the mode with

Static IDs (Don’t forget to restore this mode

every time you run scripts)

Set specific (debug) IDs for your GUI

elements <h2 id=“AjaxPTproblems">

Dynamic IDs

Page 60: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 61

Put Your application into the mode with

Static IDs (Don’t forget to restore this mode

every time you run scripts)

Set specific (debug) IDs for your GUI

elements <h2 id=“AjaxPTproblems">

Use anchors

Dynamic IDs

Page 61: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 62

Sequential dependency between

requests

E.g.: IDs of all

tree elements

changes every

time I make

changes to

the tree

If dynamic IDs are

used, sequential

dependency

between requests

happens - it means

that previous actions

may influence next

actions and the order

of actions matters

Page 62: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 63

Define definite initial data in the tested

application

Sequential dependency between

requests

Page 63: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 64

Define definite initial data in the tested

application

Breakdown scenarios into undependable

chunks

Sequential dependency between

requests

Page 64: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 65

Define definite initial data in the tested

application

Breakdown scenarios into undependable

chunks

Record scenarios from the beginning to

the end of the chunks

Sequential dependency between

requests

Page 65: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 66

Define definite initial data in the tested

application

Breakdown scenarios into undependable

chunks

Record scenarios from the beginning to

the end of the chunks

Separate chunks using login/logout

(because initialization of IDs happens after

login)

Sequential dependency between

requests

Page 66: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 68

Example

Page 67: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 69

Rename requests during traffic recording - at once as a certain

definite action is made by you in a web-browser.

The same URL for the most requests

(Vaadin)

Rename During Recording

Page 68: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 70

Define one screen resolution for your tests

and record traffic only for it

Dependency on Screen Resolution

(Vaadin)

Screen coordinates are used while accessing these buttons

Page 69: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 71

Error requests are not evident

(Vaadin)

The response code for Vaadin

“Out of Sync” and other

response Errors is still HTTP/1.1 200

Page 70: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 72

Put Global Response Assertion on the test plan level

Page 71: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 73

Too many requests (Vaadin)

Page 72: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 74

Too many requests (Vaadin)

Get used to it!

Page 73: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays

Other Problems

75

Difficulty to make estimations

Script creation for (full) AJAX application takes ~

3-4 times more than for Classic application

Page 74: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays

Other Problems

76

Difficulty to make estimations

Script creation for (full) AJAX application takes ~

3-4 times more than for Classic application

Bad Supportability (Vaadin)

If application changes in most cases you have to

recreate the affected scenarios completely.

Page 75: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays

Conclusions

77

Page 76: Тестирование производительности Ajax приложений с помощью JMeter

atdays.com #atdays 78

Vladimir Primakov

Email: [email protected]

Skype: vladimir.primakov