如何在 webdriver.io wdio.conf.js 文件中集成 sauce-connect-launcher

How to integrate sauce-connect-launcher on webdriver.io wdio.conf.js file

我读了这个 http://webdriver.io/guide/testrunner/cloudservices.html,但没有找到如何在 wdio.conf.js 中启动隧道以及如何集成。

更新:

现在webdriver.io最新版本有集成云测试服务的文档。

查看更多:

http://webdriver.io/guide/testrunner/cloudservices.html


以前集成 sauce-connect-launcher 需要 wdio.conf.js 文件,并在文件中配置 sauce-connect-launcher 来启动隧道,例如 wdio.conf.js 文件:

var sauceConnectLauncher = require('sauce-connect-launcher');
global.sauceConnectProcess = null;

exports.config = {

//
// ==================
// Specify Test Files
// ==================
// Define which test specs should run. The pattern is relative to the directory
// from which `wdio` was called. Notice that, if you are calling `wdio` from an
// NPM script (see https://docs.npmjs.com/cli/run-script) then the current working
// directory is where your package.json resides, so `wdio` will be called from there.
//

user: 'the_pianist2',
key: '27dde83a-1cf7-450d-8c88-857c4d3cde43',    
specs: [
    //command line
    //'spec/**/*.js' wdio wdio.conf.js
    //grunt
    './www-test/e2e/spec/*.js'
],
// Patterns to exclude.
exclude: [
    // 'path/to/excluded/files'
],
//
// ============
// Capabilities
// ============
// Define your capabilities here. WebdriverIO can run multiple capabilties at the same
// time. Depending on the number of capabilities, WebdriverIO launches several test
// sessions. Within your capabilities you can overwrite the spec and exclude option in
// order to group specific specs to a specific capability.
//
// If you have trouble getting all important capabilities together, check out the
// Sauce Labs platform configurator - a great tool to configure your capabilities:
// https://docs.saucelabs.com/reference/platforms-configurator
//
capabilities: [{
    browserName: 'chrome'
},
{
    browserName: 'firefox'
}
],
//
// ===================
// Test Configurations
// ===================
// Define all options that are relevant for the WebdriverIO instance here
//
// Level of logging verbosity.
//logLevel: 'result',
//
// Enables colors for log output.
coloredLogs: true,
//
// Saves a screenshot to a given path if a command fails.
screenshotPath: './errorShots/',
//
// Set a base URL in order to shorten url command calls. If your url parameter starts
// with "/", the base url gets prepended.
//desarrollo
baseUrl: 'http://localhost:3001',
//produccion
//baseUrl: 'http://www.example.com',
//
// Default timeout for all waitForXXX commands.
waitforTimeout: 20000,
//
// Initialize the browser instance with a WebdriverIO plugin. The object should have the
// plugin name as key and the desired plugin options as property. Make sure you have
// the plugin installed before running any tests. The following plugins are currently
// available:
// WebdriverCSS: https://github.com/webdriverio/webdrivercss
// WebdriverRTC: https://github.com/webdriverio/webdriverrtc
// Browserevent: https://github.com/webdriverio/browserevent
// plugins: {
//     webdrivercss: {
//         screenshotRoot: 'my-shots',
//         failedComparisonsRoot: 'diffs',
//         misMatchTolerance: 0.05,
//         screenWidth: [320,480,640,1024]
//     },
//     webdriverrtc: {},
//     browserevent: {}
// },
//
// Framework you want to run your specs with.
// The following are supported: mocha, jasmine and cucumber
// see also: http://webdriver.io/guide/testrunner/frameworks.html
//
// Make sure you have the node package for the specific framework installed before running
// any tests. If not please install the following package:
// Mocha: `$ npm install mocha`
// Jasmine: `$ npm install jasmine`
// Cucumber: `$ npm install cucumber`
framework: 'jasmine',
//
// Test reporter for stdout.
// The following are supported: dot (default), spec and xunit
// see also: http://webdriver.io/guide/testrunner/reporters.html
reporter: 'spec',
reporterOptions: {
    //
    // If you are using the "xunit" reporter you should define the directory where
    // WebdriverIO should save all unit reports.
    outputDir: './'
},
//
// Options to be passed to Jasmine.
jasmineNodeOpts: {
    //
    // Jasmine default timeout
    defaultTimeoutInterval: 20000,
    //
    // The Jasmine framework allows it to intercept each assertion in order to log the state of the application
    // or website depending on the result. For example it is pretty handy to take a screenshot everytime
    // an assertion fails.
    expectationResultHandler: function(passed, assertion) {

    }
},

//
// =====
// Hooks
// =====
// Run functions before or after the test. If one of them returns with a promise, WebdriverIO
// will wait until that promise got resolved to continue.
//
// Gets executed before all workers get launched.
onPrepare: function() {
    return new Promise(function(resolve, reject) {
        sauceConnectLauncher({
          username: 'the_pianist2',
          accessKey: '27dde83a-1cf7-450d-8c88-857c4d3cde43',
        }, function (err, sauceConnectProcess) {
            if (err) {
                return reject(err);
            }
            console.log('conexion realizada');
            global.sauceConnectProcess = sauceConnectProcess
            resolve();
        });
    });


},
//
// Gets executed before test execution begins. At this point you will have access to all global
// variables like `browser`. It is the perfect place to define custom commands.
before: function() {
    // do something
},
//
// Gets executed after all tests are done. You still have access to all global variables from
// the test.
after: function(failures, pid) {
    // do something
},
//
// Gets executed after all workers got shut down and the process is about to exit. It is not
// possible to defer the end of the process using a promise.
onComplete: function() {
    console.log('Test completado');
      global.sauceConnectProcess.close(function () {
        console.log("Closed Sauce Connect process");
        return true;
      });        
}};

在钩子中'onPrepare'启动连接隧道的脚本,内部Promise非常重要,因为等待连接的回调和运行完成onPrepare函数后的下一步:

https://github.com/webdriverio/webdriverio/issues/1062

之后,测试将在服务器 saucelabs 上启动。