SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our User Agreement and Privacy Policy.
SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our Privacy Policy and User Agreement for details.
Successfully reported this slideshow.
Activate your 14 day free trial to unlock unlimited reading.
Testing is an important part of all software projects – and so is keeping sane. In order to not make the developers and testers lose their minds while verifying that a huge amount of features still work, the testing should be automated. What’s worse, the complexity of the underlying technologies often make it more challenging to test web applications than conventional software.
This talk will show you some tools and methodologies for automated testing of web apps and especially the user interface layer of web apps. It will discuss how to architect a web app for easy testing and what kind of tests should go where and in which situation. We’ll even have a look at how the customer requirements can be automatically tested and verified to work – exactly as specified by the ones paying the bills.
Testing is an important part of all software projects – and so is keeping sane. In order to not make the developers and testers lose their minds while verifying that a huge amount of features still work, the testing should be automated. What’s worse, the complexity of the underlying technologies often make it more challenging to test web applications than conventional software.
This talk will show you some tools and methodologies for automated testing of web apps and especially the user interface layer of web apps. It will discuss how to architect a web app for easy testing and what kind of tests should go where and in which situation. We’ll even have a look at how the customer requirements can be automatically tested and verified to work – exactly as specified by the ones paying the bills.
15.
1. You will ALWAYS have code that worked a minute ago
2. You will have more and more automatic tests that can be
run all the time
3. You will have usage examples for all of your code and API
4. All your code will be testable by default
17.
Most unit tests could be
replaced by assertions
18.
Focus on continuous integration
and system testing
19.
B E H AV I O R D R I V E N D E V E L O P M E N T
20.
Scenario 1: Account has sufficient funds
Given the account balance is $100
And the card is valid
And the machine contains enough money
When the Account Holder requests $20
Then the ATM should dispense $20
And the account balance should be $80
And the card should be returned
21.
1. Easy to define end-to-end behavior to be tested
2. Business value easily translates to this format
3. You're probably already defining user stories
22.
A G E N D A
• Software testing in general
• Architecting for testability
• Testing web UIs
• What should I do?
23.
• Cross browser differences
• Logic that depends on the DOM
• Asynchronous execution
• Possibly slow execution
24.
M V P
Presenter
Model
(State)
View
Rendering
logic
Event
handling
logic
33.
Narrative:
As a user
I want to perform calculations
So that I can easily get the results without
calculating in my head
Scenario: Calculate 1+2
Given I have the calculator open
When I push 1+2
Then the result should be 3.0
34.
public class CalculatorSteps extends TestBenchTestCase {
private WebDriver driver;
private CalculatorPageObject calculator;
@BeforeScenario
public void setUpWebDriver() {
driver = TestBench.createDriver(new FirefoxDriver());
calculator = PageFactory.initElements(driver,
CalculatorPageObject.class);
}
@AfterScenario
public void tearDownWebDriver() {
driver.quit();
}
35.
@Given("I have the calculator open")
public void theCalculatorIsOpen() {
calculator.open();
}
@When("I push $buttons")
public void enter(String buttons) {
calculator.enter(buttons);
}
@Then("the result should be $result")
public void assertResult(String result) {
assertEquals(result, calculator.getResult());
}
}
36.
public class SimpleCalculation extends JUnitStory {
@Override
public Configuration configuration() {
return new MostUsefulConfiguration()
.useStoryLoader(new LoadFromClasspath(this.getClass()))
.useStoryReporterBuilder(new StoryReporterBuilder()
.withDefaultFormats()
.withFormats(Format.CONSOLE, Format.TXT));
}
@Override
public InjectableStepsFactory stepsFactory() {
return new InstanceStepsFactory(configuration(),
new CalculatorSteps());
}
}
47.
Q & A
Please rate the presentation at
gwtcreate.com/agenda
48.
I M A G E S U S E D
• https://flic.kr/p/671Z4A
• https://flic.kr/p/bsozXc
• https://flic.kr/p/hRfBC
• https://flic.kr/p/nQ7ac5
• https://flic.kr/p/8sf5Xt
• https://flic.kr/p/4LH5Eo
• https://flic.kr/p/7Lx9Kk
• https://flic.kr/p/nAi4GZ
• https://flic.kr/p/eguHX8
• https://flic.kr/p/4fmu9E
• https://flic.kr/p/dtSHid
• https://flic.kr/p/bwpVQ7
• https://flic.kr/p/fGyo6Q