BuildWise

Continuous Testing Server with Functional UI test execution in parallel

Version 1.1.9

All Platforms

Test Frameworks

BuildWise supports executing tests in the following test frameworks: RSpec, Cucumber, PyTest nad Mocha.

RSpec

RSpec is the first and most popular Behaviour Driven Development (BDD) Framework fo Ruby.

Sample RSpec test

describe "User Login" do
  
  before(:all) do
    @driver = Selenium::WebDriver.for(browser_type)
    driver.navigate.to("http://travel.agileway.net")
  end

  after(:all) do
    driver.quit
  end

  it "[1] Can sign in OK" do    
    login_page = LoginPage.new(driver)
    login_page.login("agileway", "testwise")  
    try_for(3) {  expect(driver.page_source).to include("Welcome")}
    driver.find_element(:link_text, "Sign off").click
  end

Execute RSpec test to report file in JUnit XML format

CI::Reporter

gem 'ci_reporter'
gem 'rspec'
require 'rspec/core/rake_task'
require 'ci/reporter/rake/rspec'
# standard RSpec Rake task
RSpec::Core::RakeTask.new("ui_tests:quick") do |t|
  specs_to_be_executed = specs_for_quick_build  # list of files
  t.rspec_opts = "#{specs_to_be_executed.join(' ')} --order defined"
end

# 
task "ci:ui_tests:quick" => ["ci:setup:rspec"] do  
  # ...
  Rake::Task["ui_tests:quick"].invoke
  # ...
end

Cucumber

Cucumber is a BDD Framework for Ruby with test script syntax in plain-text alike English.

Sample Cucumber test

Feature: User Authentication
  As a reigstered user
  I can log in 

  Scenario: Deny access due to invalid password
    Given I am on the home page
    When enter user name "agileway" and password "badpass"
    And click "Sign in" button
    Then I should see an log in error message

Cucumber makes no sense to me unless you have clients reading the tests. Why would you build a test-specific parser for English? - DHH, creator of Ruby on Rails

Execute Cucumber test to report file in JUnit XML format

gem 'ci_reporter'
gem 'ci_reporter_cucumber'
require 'rspec/core/rake_task'
require 'ci/reporter/rake/cucumber'
# standard Cucumber Rake task
Cucumber::Rake::Task.new("ui_tests:quick")  do |t|

  features_to_be_executed = features_for_quick_build  # a function return array of files

  log_dir = File.expand_path(File.join(File.dirname(__FILE__), "log"))
  FileUtils.rm_rf(log_dir) if File.exists?(log_dir)
  FileUtils.mkdir(log_dir)

  file_list = features_to_be_executed.join(" ")
  t.cucumber_opts = [
    "--format progress -o log/features.log",
    "--format junit    -o log/",
    "--format html     -o log/features.html",
    file_list
  ]
end

# 
task "ci:ui_tests:quick" => ["ci:setup:cucumber"] do  
  # ...
  Rake::Task["ui_tests:quick"].invoke
  # ...
end

PyTest

pytest is a

class LoginTestCase(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.driver = webdriver.Chrome()

    @classmethod
    def tearDownClass(cls):
        cls.driver.quit()

    def setUp(self):
        self.driver.get("http://travel.agileway.net")

    def test_sign_in_ok(self):
        self.driver.find_element_by_id("username").send_keys("agileway")
        self.driver.find_element_by_id("password").send_keys("testwise")
        self.driver.find_element_by_xpath("//input[@value='Sign in']").click()
        self.assertIn("Signed in!", self.driver.page_source)

Execute pytest test to report file in JUnit XML format

Install packages with pip.

pip install -U pytest
pip install xmlrunner

Run tests with JUnit XML report.

pytest --junitxml=XMLFILE TESTFILE

Mocha

Mocha is a JavaScript test framework running on Node.js.

Sample Mocha test script

var webdriver = require('selenium-webdriver');
var test = require('selenium-webdriver/testing');
var assert = require('assert');

var driver;
const timeOut = 15000;

String.prototype.contains = function(it) { return this.indexOf(it) != -1; };

test.describe('User Authentication', function () {

  test.before(function() {
    this.timeout(timeOut);
    driver = new webdriver.Builder().forBrowser('chrome').build();
  });

  test.beforeEach(function() {
    this.timeout(timeOut);
    driver.get('http://travel.agileway.net');
  });

  test.after(function() {
    driver.quit();
  });

  test.it('Invalid user', function() {
     this.timeout(timeOut);	  
     driver.findElement(webdriver.By.name('username')).sendKeys('agileway');
     driver.findElement(webdriver.By.name('password')).sendKeys('badpass');
     driver.findElement(webdriver.By.name('commit')).click();
		 driver.getPageSource().then(function(page_source){
	     assert(page_source.contains("Invalid email or password"))
	});
  });

Execute Mocha test to report file in JUnit XML format

JUnit Reporter for Mocha produces JUnit-style XML test results for Mocha tests.

npm install -g mocha
npm install -g mocha-junit-reporter

Run all tests in spec, and output a results file at ./test-results.xml.

mocha spec --reporter mocha-junit-reporter

Run specific tests and output report to a specific file.

mocha  --reporter mocha-junit-reporter --reporter-options mochaFile=</pre>