Framework

 

A

 

For

 

 

 

of

Automated 

Testing

JavaScript

Web Apps.

little tool support

to assist JavaScript programmers to test their codes.

Selendium

var webdriver = require('selenium-webdriver');

var driver = new webdriver.Builder().
   withCapabilities(webdriver.Capabilities.chrome()).
   build();

driver.get('http://www.google.com');
driver.findElement(webdriver.By.name('q')).sendKeys('webdriver');
driver.findElement(webdriver.By.name('btnG')).click();
driver.wait(function() {
 return driver.getTitle().then(function(title) {
   return title === 'webdriver - Google Search';
 });
}, 1000);

driver.quit();

Watir

require 'watir-webdriver'
b = Watir::Browser.new
b.goto 'bit.ly/watir-webdriver-demo'
b.text_field(:id => 'entry_0').set 'your name'
b.select_list(:id => 'entry_1').select 'Ruby'
b.select_list(:id => 'entry_1').selected? 'Ruby'
b.button(:name => 'submit').click
b.text.include? 'Thank you'

JS is Event Driven

Def.

 

+ Event parameter map

+ Form state map

+ Browser state

Event

 

+ URL

+ Server/Browser State

+ Sequence of Events

Test Input

Execution Model

Request -> Load HTML -> DOM -> Execute TL JS

Algo.

\varepsilon

Execution Unit

\rho

Prioritaizer

g

Input Generator

Prioritizer Func.

c = (u, S, s_1 ... s_n)

the set of event handlers that are executed when the i’th event is triggered during the execution of c.

e_i

Default Strategy

P_0(c) = 1

Coverage Strategy

P_1(c) = 1 - cov(e_1) \times ... \times cov(e_n)

Read/Write Strategy

P_2(c) = \dfrac{|(written(e_1) \cup ... \cup writter(e_{n-1}))\cap read(e_n)|+1}{|read(e_n)+1|}

Input Generator

Default Strategy

G_0

Reasonable event parameters

Dynamically. Collected Strategy

G_1

maintains

\varepsilon \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ const(e)

 

  • Does the events feedback-directed algorithm achieve significantly better coverage than initial?

Research Questions

 

  • What level of code coverage is achieved by each of the test generation algorithms with the same number of tests?

Research Questions

 

  • How quickly does each of the feedback-directed algorithms converge on the maximal coverage that it will achieve?

Research Questions

 

  • How many HTML validity errors and runtime errors are detected by the different algorithms?

Research Questions

Experimental Methodology

+ Minified Javascript

+ Dynamically generated code (eval or <script>)

+ Dynamically generated code by Server

Performance

100 test inputs
at most 2 minutes.

 

PC running Linux
3.2Ghz CPU and 2GB of memory

JS Testing

By amir

JS Testing

  • 948