Upload
joseph-chiang
View
1.355
Download
0
Embed Size (px)
Citation preview
FUNCTIONAL TESTINGautomatically with Selenium
@josephj6802
Functional Testing in Stackla
Can u borrow me your iPhone 5?
Headless vs. SeleniumHeadless Browser
Selenium
MisunderstandingsOnly available in Firefox
Need to write Java for Selenium test cases or use Selenium IDE to record
(Probably true in Selenium 1.0)
Selenium 2.0Selenium 1.0 + = Selenium 2.0
npm install selenium-webdriver
gem install selenium-webdriver
composer.phar require facebook/webdriver
Manipulate Chrome w/ Node.js + ChromeDriver
Get Feet Wet!
var webdriver = require(‘selenium-webdriver'), expect = require('expect'), driver = new webdriver.Builder().forBrowser('chrome').build();
driver.get('http://stackla.com');driver.getTitle().then(function (title) { expect(title).toBe(“Stackla - Social Media Aggregator“);});driver.quit();
Tip: Node.JS 4.x
Scalability
Scalability
Trial Run with
Manual Testing
Manual Testing
Automated Testing
My ToolsBrowser testing on SauceLabs
Jasmine
Webdriver.io
Grunt
SauceLabs
exports.config = { user: process.env.SAUCE_USERNAME, key: process.env.SAUCE_ACCESS_KEY, updateJob: true, specs: ['./tests/*_test.js'], capabilities: [{ browserName: 'firefox', version: 37, name: 'Firefox Selenium tests', build: 'build-' + process.env.TRAVIS_BUILD_ID, 'tunnel-identifier': process.env.TRAVIS_JOB_NUMBER },{ browserName: 'chrome', version: 43, name: 'Chrome Selenium tests', build: 'build-' + process.env.TRAVIS_BUILD_ID, 'tunnel-identifier': process.env.TRAVIS_JOB_NUMBER },{ browserName: 'internet explorer', version: 11, name: 'IE Selenium tests', build: 'build-' + process.env.TRAVIS_BUILD_ID, 'tunnel-identifier': process.env.TRAVIS_JOB_NUMBER },{ browserName: 'safari', version: 6, name: 'Safari Selenium tests', build: 'build-' + process.env.TRAVIS_BUILD_ID, 'tunnel-identifier': process.env.TRAVIS_JOB_NUMBER }], baseUrl: 'http://localhost:8585', framework: 'jasmine', reporter: ‘spec'};
./wdio-saucelab.conf.js // browser - webdriver instancedescribe('Index Page', function() { it('should have title', function* () { yield browser.url('/index.html'); expect(yield browser.getTitle()).toBe('Browser Testing'); }); it('shoud have Stackla widget', function* () { yield browser.url('/'); expect(yield browser.isExisting('.stackla-widget')); });});
./tests/index_test.js
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>Browser Testing</title> </head> <body> <h1>Browser Testing</h1> <div class="stackla-widget" data-id="6605" data-hash="5663ac9e3843f" data-ct="" data-alias="josephj.stackla.com" data-ttl="30" style="width: 100%; overflow: hidden;"></div> <script type="text/javascript"> (function (d, id) { if (d.getElementById(id)) return; var t = d.createElement('script'); t.type = 'text/javascript'; t.src = '//assetscdn.stackla.com/media/js/widget/fluid-embed.js'; t.id = id; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(t); }(document, 'stackla-widget-js')); </script> </body></html>
http://localhost:8585/index.html
Need to build a web server and tunnel
$ wdio wdio-saucelab.conf.js
Automated Build
TravisCI
My ToolsDelegating testing task to CI Server
Jasmine
Webdriver.io
Grunt
SauceLabs
Whenever user makes git push
Set environment variables for SauceConnect
Settings
language: node_jsnode_js: - "4.1"before_script: - npm install grunt-cli -g - npm install webdriverio -g - npm install jasmine -gaddons: sauce_connect: truebranches: only: - master - gh-pagesscript: - grunt test:saucelabs
Config File./travis.yml
https://travis-ci.org/josephj/browser-testing
Let’s Build!
$ git push
Todo List
Pricing
Unlimted Automation Testing but slow with 1 parallel VM
Better speed but with limited time
Fastest and quiet enough time
Google Trends
BrowserStack is the most popular one
Resourceshttps://github.com/josephj/browser-testing