2016-12-29 30 views
1

所以我不得不重新編寫一個報告工具,用於量角器/茉莉花E2E測試的HTML報告。現在,我可以很好地寫入一個文件的所有測試結果,以便運行一個測試文件(例如test1.spec.js)。如何判斷量角器/茉莉花何時完成? (報告工具邏輯)

我的問題來自於我一次運行多個文件(例如['./test1.spec.js','./test2.spec.js'])。理想情況下,我想要做的就是將來自兩個測試的所有信息存儲到一個文件數據對象/變量中,然後在所有測試文件完成後將該變量寫入文件。

我試過在jasmineDone函數中編寫代碼,但是在每個測試文件完成後會發生這種情況,所以它會複製我從報告中獲得的信息或者覆蓋/弄亂報告的樣式。

this.jasmineDone = function() { 
    fileData += styles.closeReportTags; 
    fileData += styles.closeBodyHtmlTag; 
    fs.appendFileSync("C:/Reports/testing1.html", fileData); 
} 

我也創造了我的量角器配置文件中定義的afterLaunch方法,並在報表工具文件中使用這樣:

this.afterLaunch = function (callback) { 
    fs.writeFile("C:/Reports/testing1.html", fileData); 
} 

在上面我試圖追加所有測試結果爲fileData變量遍歷每個運行,然後在完成後將它全部寫回,但fileData似乎並沒有正確傳遞給afterLaunch方法(它不會將任何內容寫入文件,只會創建一個空白html文件)。

所以我的問題是,在什麼方法可以保持運行計數或標誌,以確定是否有更多的測試文件排隊量角器/茉莉花,以確定何時實際測試運行是完成,並在哪個範圍內可以使用它來編寫我的文件。

謝謝。

回答

1

我有同樣的問題。最終,Jasmine/Protractor中所有的鉤子都不夠好(特別是如果你正在進行分片測試)。最終爲我工作的是創建我自己的cli,解析/存儲我想要的結果,然後然後進行報告。

下面是一個例子CLI:

#!/usr/bin/env node 

var spawn = require('child_process').spawn; 
var output = []; 

// get protractor args from cli, and skip first two (node and self) 
var args = process.argv.slice(2); 
// run protractor 
protractor = spawn('node_modules/.bin/protractor', args); 

/** 
* process listeners 
*/ 
protractor.stdout.on('data', function(buffer) { 
    var text = buffer.toString(); 
    // parse results here... 
    console.log(text); 
}); 

protractor.stderr.on('data', function(buffer) { 
    var text = buffer.toString(); 
    console.log(text); 
}); 

protractor.on('exit', function(status) { 
    // protractor is _done_ done, report your results here... 
}); 

確保和chmod文件是可執行文件(例如,chmod 755)。然後,正是如此運行:

./myCI conf.js --baseUrl http://example.com

+0

其實我想通一些東西,與我目前的解決方案的工作,但我仍然在尋找自己的方式來規劃!欣賞迴應。這一直是一個巨大的頭痛哈哈。 –

+0

不用擔心。是的,這是一個痛苦... – Brine