我一直在搞乱节点重放(https://github.com/assaf/node-replay),看看是否有一种方法,我可以把它与我的量角器测试挂钩,让我的测试运行记录的数据(所以他们运行得更快,而不是那么该死的慢)。
我按照github页面上的指示安装了node-replay。然后在我的测试文件中,我包括一些节点重放代码,如下所示
describe('E2E: Checking Initial Content', function(){
'use strict';
var ptor;
var Replay = require('replay');
Replay.localhost('127.0.0.1:9000/');
// keep track of the protractor instance
beforeEach(function(){
browser.get('http://127.0.0.1:9000/');
ptor = protractor.getInstance();
});
和我的配置文件看起来像这样:
exports.config = {
seleniumAddress: 'http://0.0.0.0:4444/wd/hub',
// Capabilities to be passed to the webdriver instance.
capabilities: {
'browserName': 'chrome'
},
// Spec patterns are relatie to the current working directly when
// protractor is called.
specs: ['test/e2e/**/*.spec.js'],
// Options to be passed to Jasmine-node.
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 300000
}
};
然后我试着用咕哝来摩擦我的测试,说
REPLAY=record grunt protractor
但是我失败了很多次。在我添加节点重播之前,Grunt量度器运行所有测试都很好,没有失败,所以也许我的逻辑在如何将这两者连接在一起是有缺陷的。有什么建议吗?
1) E2E: Sample test 1
Message:
UnknownError:
Stacktrace:
UnknownError:
at <anonymous>
问题是对127.0.0.1:9000
的http请求是由浏览器完成的,而不是在你的NodeJS Protractor代码中,所以重放在这个基础设施场景中不起作用。
关于没有后端的Protractor测试的讨论正在进行中,有些人依赖于用Protractor的addMockModule模拟后端客户端,就像他们已经为Karma单元测试所做的那样。
我个人不同意嘲弄e2e,因为端到端的全部意义是测试整个真实的应用程序。
HTTP重放可能不是一个坏主意,让事情更快。
理想情况下,我希望找到一个像这样工作的工具:
-
第一次运行代理捕获http服务器,以便以后重放:
capture 127.0.0.1:9000—into-port 3333
-
针对
baseUrl = '127.0.0.1:3333';
运行端到端测试。所有的请求/响应将被缓存/保存。 -
从现在开始提供缓存内容:
-
再次运行您的端到端测试,仍然在baseUrl por 3333上。这次它应该运行得更快,因为它提供的是缓存内容。
找不到,如果你有更好的运气告诉我!