2016-12-29 68 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