2014-11-06 68 views
15

我想用Karma使用多個瀏覽器運行一些測試。但是,測試是與數據庫交互的集成測試(獲取和更新數據)。由於相同的測試在多個瀏覽器中運行,它們都與相同的測試數據交互。在Karma中限制並行瀏覽器實例

因此,如果測試在多個瀏覽器中同時運行,則一個測試可能會影響在其他瀏覽器中運行的其他測試。

如何限制併發瀏覽器的數量,同時仍然使用多個瀏覽器進行測試? (例如,限制設置爲1將導致運行測試在序列中的每個瀏覽器,而不是並行地)

+0

嗨,你是怎麼最終解決這個問題呢? – Malki 2015-02-18 12:26:47

回答

3

這已被固定在https://github.com/karma-runner/karma/pull/1646合併爲0.13.2

併發

類型:Number

默認值:無限

描述:有多少瀏覽器噶並行啓動。

尤其是在像SauceLabs和Browserstack這樣的服務中,只有一次啓動有限數量的瀏覽器纔有意義,並且只有在完成時纔會啓動更多。使用此配置,您可以確定在任何給定時間點應該一次運行多少個瀏覽器。

https://karma-runner.github.io/2.0/config/configuration-file.html

+0

這是正確的。使用內置功能 – 2016-07-23 09:11:04

0

只是一個粗略的想法:

  • 創建圍繞因緣的包裝來創建基於配置對象您的條件
    • 在這種情況下,它會按瀏覽器類型的配置對象我想
    • 你可以存儲在一個karma.conf.js文件中的「配置模板」無瀏覽器屬性
    • 有以「豐富」這個模板添加更多的特性
  • 填充這些配置對象隊列中的編程方式(它可以是一個簡單的數組)
  • 使用karma API啓動因緣服務器經過正確的配置每
  • 時間

提示:您可以在這一點上「包裝」配置停止如果一個運行實例面臨一些錯誤

的這段代碼演示瞭如何加載和填充模板配置:

function getConfigTemplate(path){ 
    var config = { 
    // Maybe you want to add/remove some files from the list 
    // based on some criteria 
    files: [...], 
    // Path of the template file 
    configFile: path 
    } 
    return config; 
} 

var template = getConfigTemplate('/path/to/the/file'); 
// Here I can append more stuff 
template.browsers = ['Chrome'] 

注意:因果報應用於兩種配置的併購戰略的工作如下:
- 如果屬性在模板上,然後直接進入最終配置
- 如果某個屬性不在模板上,則查找該屬性的配置「包裝器」對象
- 如果您是模板上的屬性並添加更多隻有包裝前者將被使用,後者將被忽略。

此代碼,而不是可用於「鏈」你的人緣服務器:

var currentServer = 0; 
var configs = [ ... ]; 

function startKarmaServer(config, callback){ 
    karma.server.start(config, function (exitCode){ 

    if(exitCode){ 
     // an error occurred 
     // stop karma! 
    } else { 
     currentServer++; 
     callback(); 
    } 
    }); 
} 

function startServers(){ 
    // here some code to run the karma servers in series 
} 

我會建議async.jsstartServers功能。

如果您使用的是較舊版本的業力(0.10或更低版本),您可能會看到at this fix用於在執行後關閉Web服務器。

此外,請注意連續性集成標誌(autoWatch)應關閉以便進行鏈接工作。

0

如果您使用gruntgrunt-karma我寫了this task,這是你想要的。