2017-08-31 66 views
0

我有一種情況需要動態生成功能測試。基本上,我想使用BrowserStack在各種不同的環境下運行我的測試,但我想註冊一個不同的測試套件,具體取決於我是在臺式機還是移動設備上運行。TheIntern - 確定動態測試生成的環境

下面是從踢東西了文件的代碼片段,這樣你就可以得到我怎麼回事關於它的想法:

define(function (require) { 
    var registerSuite = require('intern!object'); 
    var assert = require('intern/chai!assert'); 
    var config = require('intern/dojo/node!../../node_modules/our-repo/config'); 
    // RIGHT HERE I NEED TO KNOW PLATFORM + BROWSER INFO! 
    var our_sites = ['A', 'C', 'C', 'D']; 
    for (let i=0; i<our_sites.length; i++) { 
     homepage_basic_site_test_suites(registerSuite, our_sites[i], config, assert); 
    } 
}); 

我然後通過配置運行,動態地生成測試並致電registerSuite

我希望能夠通過一個更多的參數 - 已選擇的環境。

https://theintern.io/leadfoot/module-leadfoot_Server.html#getSessionCapabilities好像它會提供我需要的信息,但我不知道如何獲得它。

我對TheIntern配置包括以下環境的名單,我想知道哪一個已被選定爲一個特定運行調用homepage_basic_site_test_suites()功能之前:

environments: [ 
    { 
     browserName: 'IE', 
     version: ['11'], 
     platform: ['WINDOWS'] 
    }, 
    { 
     browserName: 'Edge', 
     version: ['13', 'latest'], 
     platform: ['WINDOWS'] 
    }, 
    { 
     browserName: 'Firefox', 
     version: ['54', 'latest'], 
     platform: [ 'WINDOWS', 'MAC'] 
    }, 
    { 
     browserName: 'Chrome', 
     version: ['45', 'latest'], 
     platform: ['WINDOWS', 'MAC'] 
    }, 
    { 
     browserName: 'Safari', 
     version: ['10.1', 'latest'], 
     platform: 'MAC' 
    }, 
    { 
     browserName: 'iPhone', 
     platform: 'MAC', 
     device: ['iPhone 6'], 
     realMobile: true 
    }, 
    { 
     browserName: 'iPad', 
     platform: 'MAC', 
     device: ['iPad 4th'], 
     realMobile: true 
    }, 
    { 
     browserName: 'android', 
     platform: 'ANDROID', 
     device: ['Samsung Galaxy S5'], 
     realMobile: true 
    } 
] 

回答

1

你可以從環境信息遠程會話。在套件生命週期方法或測試中,您可以使用this.remote.session.capabilities。但是,在調用registerSuite時,該遙控器不可用。

您可以在套件本身,其中遠程可用中添加測試:

registerSuite({ 
    name: 'my suite', 

    before: function() { 
     if (this.remote.session.capabilities.something) { 
      // Test is from intern/lib/Test 
      this.tests.push(new Test({ 
       name: 'a test', 
       parent: this, 
       test: function() { 
        // test function 
       } 
      }); 
     } 
    }, 

    ... 
}); 

另一種選擇將是使特定的遠程功能套房和使用遠程專用CONFIGS加載它們。就像,有一個Android配置,加載特定於Android的functionalSuites,以及一個iOS配置,加載特定於iOS的functionalSuites。這些配置可以從中央配置繼承,以便共享大多數屬性。