Transcript
Page 1: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

Software quality assurance days19 Международная конференция по вопросам качества ПОsqadays.com

Санкт-Петербург. 20–21 мая 2016

Владислав РоманенкоIntellectsoft. Минск, Беларусь

Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

Page 2: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

QA-инженер в IntellectsoftВ тестировании >2 лет, до этого работал инженером географических информационных систем (ГИС)

Тестирую мобильные и веб приложения

Сертификат ISTQB Foundation level

[email protected]

Page 3: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

BDD is like Jazz.

There is no

authoritative

definition of what it is

Page 4: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

BDD

is a process designed to aid

the management and the delivery

of software development projects

by improving communication

between engineers and business

professionals

Page 5: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire
Page 6: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

w o r k s h o p

1.

Page 7: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

1.

BA

QA

dev

Page 8: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

2.=> Cucumber format

Given…

When…

Then…

Gherkin:

Page 9: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

3.

ruby

=> step definitions

Page 10: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

3. => tests execution

Page 11: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire
Page 12: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

- prevent the bug

To do list:

Page 13: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

- exhaustive list

of scenarios

To do list:

Page 14: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

What’s to avoid?

Page 15: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

What’s to avoid?

- Leaking scenarios

Given When Then

A BX

Page 16: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

What’s to avoid?

- All is end-to-end

Page 17: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

What’s to avoid?

- Fixtures

Page 18: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

BDD is not:

Equal to

Functional testing

Page 19: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

BDD is not:

Only about

testing

Page 20: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

a quick fix,...

BDD is not:

Page 21: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

...an investment

BDD is:

Page 22: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

SQA DAys-18 talk:

“Behat-trick:...”

Page 23: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

w e b d r i v e r

Page 24: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

bddfire:

Write your tests,

not framework

Page 25: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire
Page 26: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

Why “Cucumber”?

Page 27: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

bddfire:

Capybara

Selenium Webdriver

Docker

RestClient

Poltergeist

Gatling

Appium

Saucelabs

Relish, Yard

Axe accessibility engine

Rubocop

Page 28: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

Installation:

$ gem install bddfire

$ bddfire fire_cucumber

$ cd cucumber & bundle install

Page 29: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

Predefined steps:

Given I am on “url”

When I click on element having text “foo"

Then The page title is “bar"

Page 30: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

Predefined steps definitions:

Then(/^page contains "(.*?)"$/) do |element| page.should have_css(element)end

Then(/^I should see "(.*?)"$/) do |text| page.should have_content textend

Page 31: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

Scenario: Signing in as an existing user

Given I am on "http://test.org/auth"

When I fill in "email" with the text "[email protected]"

And I fill in "password" with the text "qwerty"

And I click on element having text "Sign In"

Then The page title is "Homepage"

Hello world scenario:

Page 32: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

Natural risks

forest fire

avalanche

Project overview:

Actions

Rescue people

Put out the fire

Warn alpinists

Budget€ 1000€ 2000

-

€ 50€ 5000

Page 33: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

1. Features

Project structure:

Scenario: I can see the quantity of risks in each state

Given I'm a rescue team member

When I observe the table of risks

Then I see the correct quantity of risks by state

Page 34: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

Project structure:

When (/^I want to view the details of a Risk/) do risk_num = rand(1...10).to_s link = '#/steps/' + risk_num + '/details' find(:xpath,"(//*[@href='#{link}'])[1]").clickend

2. Step definitions

Page 35: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

Project structure:

Capybara.configure do |config| config.run_server = false

... config.default_selector = :xpath config.default_wait_time = 60end

3. Support code

Page 36: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

Project structure:

After dopage.evaluate_script('window.confirm = function()

{ return true; }')find(:xpath, '//*[@ng-click="vm.logOut()"]').click

end

4. Hooks

Page 37: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

Project structure:

default: -p seleniumhtml: --format --out reports/test.htmlapi : DRIVER=poltergeist --tags @apichrome: DRIVER=chromepretty: -f pretty

5. Configuration file

Page 38: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

Project structure:

source 'http://rubygems.org'gem 'cucumber'gem 'capybara'gem 'bddfire'gem 'selenium-webdriver'

6. Dependencies

Page 39: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

Project structure:

6. Reports / Docs folders

Page 40: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

What’s included?

1. Capybara

Acceptance test framework for web

applications.

It simulates how a real user would

interact with the app

Page 41: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

Why “Capybara”?

Page 42: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

Why “Capybara”?

Webrat => Capybara

Page 43: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

What’s included?

1. Capybara

Given(/^I am on homepage$/) do visit('http://risk.piemont.org/#/login')end

Given(/^I want to see Risk timeline/) do find(:xpath,'//*[@ui-sref="risk.timeline"]').clickend

Page 44: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

What’s included?

2. Poltergeist

allows runNing Capybara tests on a headless browser

Page 45: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

What’s included?

2. Poltergeist

@poltergeistScenario: Signing in as an existing user

Given I am on "http://test.org/auth"When I fill in "email" with the text "[email protected]"And I fill in "password" with the text "qwerty"And I click on element having text "Sign In"Then The page title is "Homepage"

Page 46: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

What’s included?

3. parallel_tests

Page 47: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

What’s included?

4. BrowserStack

Cloud-based cross-browser testing tool

Page 48: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

What’s included?

4. BrowserStack

Page 49: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

What’s included?

5. Rubocop

Code style checker

based on the community-driven Style Guide

Page 50: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

What’s included?

5. Rubocop

Page 51: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

What’s included?

6. CukeSniffer

Static analysis tool for the Cucumber.

Page 52: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

What’s included?

6. CukeSniffer

Page 53: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

What’s included?

7. Yard

A Requirements Documentation Tool

Page 54: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

What’s included?

7. Yard

Page 55: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

What’s included?

8. RestClient

Simple HTTP and REST client for Ruby

Page 56: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

What’s included?

8. RestClient

Given I send a GET request for "<your_uri>"

Given I send a GET/PUT/POST/DELETE request for "<your_uri>" with the following: """<your_payload> """

Then the response should be JSON

Page 57: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

What’s included?

9. Axe

Page 58: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

What’s included?

9. Axe

Page 59: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

What’s included?

10. Gatling

load testing framework

Page 60: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

What’s included?

10. Gatling

Page 61: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

What’s included?

11. Docker

platform for distributed applications

Page 62: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

Summary:

$ gem install bddfire

$ bddfire fire_cucumber

$ cd cucumber & bundle install

Page 63: Игры с огнём: знакомимся с BDD и Cucumber фреймворком BDDfire

Thanks!

Questions?

[email protected]


Top Related