CasperJS, параллельный просмотр с рамкой тестирования
Вопрос: Хотелось бы узнать, можно ли делать параллельный просмотрсо структурой тестирования в одном файле сценариято же самое с модулем тестирования и командой тестирования casperjs.
Я видел, как некоторые люди создавали два экземпляра Каспера:CasperJS одновременные запросы а такжеhttps://groups.google.com/forum/#!topic/casperjs/Scx4Cjqp7hE , но, как сказано в документе, мы не можем создать новый экземпляр Casper в тестовом скрипте.
Поэтому я попытался сделать что-то похожее - простой пример - со скриптом тестирования Каспера (просто скопируйте и выполните это, это будет работать):
var url1 = "http://casperjs.readthedocs.org/en/latest/testing.html"
,url2 = "http://casperjs.readthedocs.org/en/latest/testing.html"
;
var casperActions = {
process1: function () {
casper.test.begin('\n********* First processus with our test suite : ***********\n', function suite(test) {
"use strict";
casper.start()
.thenOpen(url1,function(){
this.echo("1","INFO");
});
casper.wait(10000,function(){
casper.test.comment("If parallel, it won't be printed before comment of the second processus !");
})
.run(function() {
this.test.comment('----------------------- First processus over ------------------------\n');
test.done();
});
});
},
process2: function () {
casper.test.begin('\n********* Second processus with our test suite : ***********\n', function suite(test) {
"use strict";
casper.start()
.thenOpen(url1,function(){
this.echo("2","INFO");
});
casper.test.comment("Hi, if parallel, i'm first !");
casper.run(function() {
this.test.comment('----------------------- Second processus over ------------------------\n');
test.done();
});
});
}
};
['process1', 'process2'].forEach(function(href) {
casperActions[href]();
});
Но это не параллельно, они выполняются один за другим. В настоящее время я делаю параллельный просмотр, но с узлом, а не в самом файле, используя дочерний процесс. Поэтому, если вы разделите мой предыдущий код на два файла -proc1.js, proc2.js- (только два сценария-> casper.test.begin {...}) и запустите приведенный ниже код через узел, что-то вроде этого будет работать с Linux, я должен искать эквивалентный синтаксис для windows:
var exec = require("child_process").exec
;
exec('casperjs test proc1.js',function(err,stdout,stderr){
console.log('stdout: ' + stdout);
console.log('endprocess1');
});
exec('casperjs test proc2.js',function(err,stdout,stderr){
console.log('stdout: ' + stdout);
console.log('endprocess2');
});
Моя проблема в том, что перенаправления и открытые новые URL-адреса довольно длинные, поэтому я хочу, чтобы некоторые из них выполнялись параллельно. Я мог бы создавать файлы XXX и запускать их параллельно с узлом, но я не хочу, чтобы файлы XXX имели 5 строк кода, поэтому, если кому-то удастся (если это возможно), открыть URL-адреса параллельно в одном и том же файле тестирования без узла (так что без нескольких процессов), пожалуйста, научите меня!
И я хотел бы знать, в чем разница между инструкциями по цепочке, или каждый раз повторно использовать объект casper:
так между этим:
casper.test.begin('\n********* First processus with our test suite : ***********\n', function suite(test) {
"use strict";
casper.start()
.thenOpen(url1,function(){
this.echo("1","INFO");
})
.wait(10000,function(){
casper.test.comment("If parallel, it won't be print before comment of the second processus !");
})
.run(function() {
this.test.comment('----------------------- First processus over ------------------------\n');
test.done();
});
});
И это:
casper.test.begin('\n********* First processus with our test suite : ***********\n', function suite(test) {
"use strict";
casper.start();
casper.thenOpen(url1,function(){
this.echo("1","INFO");
});
casper.wait(10000,function(){
casper.test.comment("If parallel, it won't be print before comment of the second processus !");
})
casper.run(function() {
this.test.comment('----------------------- First processus over ------------------------\n');
test.done();
});
});
Связывая мои инструкции, заблокирует ли он всю цепочку, если один из моих шагов будет неудачным (обещание отклонено) вместо выполнения каждого шага Каспера?
Так что было бы лучше объединить инструкции с зависимыми шагами [как thenClick (селектор)] и использовать объект casper с независимыми шагами (как открыть новый URL), не так ли?
Редактировать: я пытался, и если шаг провалился, цепочкой или нет, он остановит все последующие шаги, поэтому я не вижу разницы, используя цепные шаги или нет ...