CasperJS,使用测试框架并行浏览

2023-11-21

问题:我想知道是否可以进行并行浏览将测试框架放在一个脚本文件中,因此使用 tester 模块和 casperjs test 命令。

我见过有些人创建了两个 casper 实例:CasperJS并发请求 and https://groups.google.com/forum/#!topic/casperjs/Scx4Cjqp7hE,但正如文档中所述,我们无法在测试脚本中创建新的 casper 实例。

所以我尝试使用 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');
});

我的问题是重定向和打开新网址相当长,所以我希望其中一些并行执行。我可以做 XXX 文件并与节点并行启动它们,但我不想要带有 5 行代码的 XXX 文件,所以如果有人成功(如果可能的话)在没有节点的同一个测试文件中并行打开 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();
    });
});

链接我的指令,如果我的一个步骤失败(承诺被拒绝)而不是执行每个 casper 步骤,它会阻塞所有链吗?

因此,最好将指令与依赖步骤链接起来 [例如 thenClick(selector)],并使用具有独立步骤的 casper 对象(例如打开一个新 url),不是吗?

编辑:我尝试过,如果一个步骤失败,无论是否链接,它将停止所有后续步骤,所以我看不出使用或不使用链接步骤的区别...


好吧,每次链接或使用 casper 对象只是一个品味问题,它的作用是一样的,而且我们不能在测试脚本中启动多个 casper 实例。如果您有一个打开某些链接的循环,则必须等待每个页面按顺序加载。

要使用测试框架启动并行浏览,您必须执行多个进程,因此使用节点可以解决问题。

经过挖掘,我最终拆分了具有太多重定向的文件,使其不长于无法拆分的主要场景。在本地计算机上,一个包含 15 个文件的文件夹将在 2/4 分钟内并行执行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CasperJS,使用测试框架并行浏览 的相关文章

  • RSA Java 加密和 Node.js 解密不起作用

    我有一个系统 需要在 javascript 中生成 RSA 密钥对 然后将公钥存储在服务器端的数据库中 作为字符串 然后 Java 中的服务器端将使用存储的公钥对字符串进行加密密钥并将其发送到客户端 客户端将使用私钥解密该字符串 我在客户端
  • 如果数据库关闭一段时间,MongoDB 会更改流超时

    我在nodejs中使用mongoDB更改流 一切正常 但如果数据库关闭需要超过10 5秒才能启动更改流会引发超时错误 这是我的更改流观察程序代码 Service prototype watcher function db let colle
  • 如何阻止我的 App Engine 应用程序的“appspot.com”?

    我添加了一个自定义域 并将其添加到 App Engine 例如 假设我的自定义域是 example com 我的应用程序由 Node js 提供服务 当我通过 App Engine 部署我的应用程序时 它会向我提供以下地址来访问它 exam
  • Promise链基本问题

    我正在尝试理解 Promise 我创建了一些有效的承诺链 而另一些则无效 我已经取得了进步 但显然缺乏基本概念 例如 以下承诺链不起作用 这是一个愚蠢的例子 但说明了问题 我正在尝试在链中使用 Node 的函数 randomBytes 两次
  • NodeJS 生成用于签名和验证消息的有效 PEM 密钥

    Context 来自关于 Node v10 9 0 的 TLS SSL 的 NodeJS 文档 2018 年 8 月 https nodejs org api tls html tls tls ssl concepts https node
  • setImmediate 与 nextTick

    Node js 0 10 版本今天发布并推出setImmediate The API变更 https github com nodejs node wiki API changes between v0 8 and v0 10文档建议在进行
  • npm 安装完成时播放声音或通知

    我在想 在 npm 完成运行任务 例如长时间安装 后获取通知 声音或弹出窗口 会有所帮助且高效吗 我正在使用 vscode 并在集成终端中运行大部分命令 在等待它完成的过程中 我最终花费了更多时间来执行其他非生产性任务 所以我们可以把它分解
  • 如何发布 NPM 范围的包/未找到 NPM 范围?

    我想开始将 npm 包发布到某个范围 我需要注册为用户并将范围作为我的用户名吗 例如 如果我创建一个像这样的包 ole MKI firstpackage npm init Use npm install
  • 确定预保存回调中的记录是否“是新的”

    有没有办法在猫鼬模型模式的预保存回调中找出记录是否 是新的 尚未保存 是的 有一个isNew http mongoosejs com docs api html document Document isNew模型实例上指示这一点的布尔属性
  • jade模板条件类nodejsexpressjs

    我的标题有一个 jade 模板文件 并使用引导标记 根据用户所在的页面 导航栏需要将 active 类添加到该导航项 避免这样的长代码的最佳方法是什么 header jade if nav home li active a href Hom
  • MongoDB 和 Mongoose 的区别

    我想使用 mongodb 数据库 但我注意到有两种不同的数据库 它们有自己的网站和安装方法 mongodb 和 mongoose 所以我问自己这个问题 我该使用哪一个 因此 为了回答这个问题 我向社区询问您是否可以解释一下这两者之间的区别是
  • 如何让WebStorm解析模块是函数?

    WebStorm 在解析从 CommonJS 模块作为方法返回的函数 并读取与它们关联的 JsDoc 方面做得非常好 例如 utils valid js Returns true no matter what param HTMLEleme
  • Mongoose:如何在不填充第一层字段的情况下填充 2 层深层人口?在 mongodb 中

    这是我的猫鼬架构 var SchemaA new Schema field1 String fieldB type Schema Types ObjectId ref SchemaB var SchemaB new Schema field
  • 使用吞咽时。有什么方法可以抑制某些任务的“开始”和“完成”日志条目

    使用吞咽时 有什么方法可以抑制某些任务的 开始 和 完成 日志条目吗 我想使用依赖关系树 但树中有一些我不想记录的任务 因为它们是具有自己的日志记录设施的中间步骤 您可以使用 silent使用 gulp CLI 标记以禁用所有 gulp 日
  • 在aws lambda中使用nodejs在s3存储桶中上传多个图像?

    我正在使用AWS lambda函数和nodejs 我尝试在 s3 存储桶中插入多个图像 查找以下内容供您参考 var AWS require aws sdk var fileType require file type var bucket
  • 将变量传递到 mongo 更新中?

    我有一个 mongo 文档 如下所示 id 4fb2a4809ad7324ccba1f6b8 events 4fb2a4809ad7324ccba1f6b9 a z 1 b z 2 c z 3 4fb2a4809ad7324ccba1f61
  • 尝试使用 Mocha 测试 Node.js 服务器进程

    对 Node js 还很陌生 制作了一个运行服务器进程并提供文件的应用程序 不使用express或任何框架 现在我正在尝试对其进行单元测试 我正在尝试为此使用摩卡测试 我打算启动我的服务器进程 然后对其运行请求以测试预期结果 统计代码 正文
  • AngularJS 拦截器不会将 JWT Bearer 放入 Node.js 应用程序的每个请求中

    我将 JWT 身份验证系统放入节点应用程序中 我使用拦截器将 Bearer 放入每个请求中 如果我在 Angular 中调用受限路由 或者如果我卷曲并在标头中指定令牌 那么效果很好 但如果我直接在地址栏中输入限制路由 则不起作用 heade
  • 当导入具有绝对路径的组件时,Jest 给出“找不到模块”

    运行 Jest 时收到以下错误 Cannot find module src views app from index jsx at Resolver resolveModule node modules jest resolve buil
  • 人们使用什么 javascript 模拟框架? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在使用 Jasmine 来测试客户端和服务器端 javascript 并且需要进行一些模拟 有人对一个好的 javascript 模拟框架有

随机推荐

  • Postgresql:带有转义换行符的 CSV 导出

    我使用此处发布的 所有 指令从 postgresql 数据库导出了一些数据 将 PostgreSQL 的 PL pgSQL 输出保存到 CSV 文件 但某些导出的字段包含换行符 换行符 因此我得到了一个 CSV 文件 如下所示 header
  • 调试的最佳实践

    最近 我使用 Visual Studio 和 WinDbg 对托管应用程序进行了大量调试 因此我经常被要求协助同事进行调试 有好几次我发现人们只是到处插入断点并希望得到最好的结果 根据我的经验 这很少是一种有用的技术 我的方法是这样的 重现
  • 通过 GraphQL API 显示超过 100 个条目

    我已经厌倦了使用 github grpahQL API 中的 endCursor 和 hasNextPage 进行分页来获取超过 100 个数据 我使用的查询是 query organization login XXX repository
  • 动态创建的元素上的事件绑定?

    这个问题的答案是社区努力 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我有一些代码 我循环遍历页面上的所有选择框并绑定 hover事件让他们在宽度上做一些调整mouse on off 这发生在页面准备好并且工作得很好 我遇到的问题
  • 获取调整大小的 html 图像元素的原始尺寸

    有没有一种简单有效的方法来获取显示在 JavaScript 中的图像的真实尺寸 在 JavaScript 中 img 具有可能不同渲染大小的元素 例如 通过max height or max width 有存在naturalWidth an
  • 使用 GraphicsEnvironment 取消注册字体?

    我最近发现了如何向本地 GraphicsEnvironment 注册 TTF 字体 对于我的用例 SVG 到 PNG 转码 Apache Batik 可能会识别该字体 import java awt Font import java awt
  • 运行 ASP.NET Web 应用程序时找不到 System.Runtime 4.1.0.0

    我使用以下projects json 创建了一个可移植类库 supports dependencies Microsoft CSharp 4 0 1 Microsoft NETCore Portable Compatibility 1 0
  • 使用 Visual Studio 在源代码中显示日语字体

    我有一些源文件 其中有用日语写的注释 当我在 Visual Studio 中打开这些文件时 它们显示如下 FNCAP p X b h 我使用的是英文版 WinXP 但是有没有办法让 Visual Studio 显示实际的日语字符而不是当前的
  • 将自定义模型绑定器应用于asp.net core中的对象属性

    我正在尝试为模型的 DateTime 类型属性应用自定义模型绑定器 这是 IModelBinder 和 IModelBinderProvider 的实现 public class DateTimeModelBinderProvider IM
  • 获取与 c# 中的 ProcessStartInfo 一起使用的可用动词(文件关联)列表

    我正在尝试使用 ProcessStartInfo 类打开和打印文件 文件可以是任何内容 但我们假设它是 PDF 文件 ProcessStartInfo pi new ProcessStartInfo file pi Arguments Pa
  • 更改 iOS 中禁用的栏按钮项目的颜色

    我需要在导航栏中显示我的应用程序的图标 为此 我将其添加为右栏按钮项目 我不希望它可点击 我只需要那里的图标 所以我将其设置为禁用 问题是图标显示为灰色 而不是绿色 有没有办法禁用此按钮但又保留其原始颜色 尝试这个 let barButto
  • wcf 测试客户端不支持此操作,因为它使用类型 system.object[]

    您好 在运行我的 wcf 服务时 出现错误 wcf 测试客户端不支持此操作 因为它使用类型 system object 我正在尝试检索正在运行的进程列表 ServiceBehavior InstanceContextMode Instanc
  • Windows UDP 套接字:recvfrom() 失败并出现错误 10054

    大家好 我正在尝试使用 Windows 套接字发送和接收 UDP 数据包 在 C 中 它一直运行良好 直到三天前程序停止正常运行 总结一下情况 当在我的套接字上调用 WSAPoll 时 即使没有启动服务器 它也总是返回用所有可能的 reve
  • 在 Perl 6 中继承私有属性

    我在文档中找不到任何内容 但似乎子类中无法访问其超类的私有变量 我对吗 class A has a class B is A has b method set a x a x my var B new var set a 5 say var
  • 使用 linq 表达式通过键列表过滤字典

    我有一本包含所有用户及其相应年龄的字典 Dictionary
  • 如何强制 DriverManager.getConnection() 方法调用超时?

    我有一个应用程序将与 MySQL 建立数据库连接并执行查询 有时 DriverManager getConnection 方法调用需要2秒 有时需要30秒 有没有办法控制这个方法2秒后超时 DriverManager setLoginTim
  • Flask SQLAlchemy 分页错误

    我有这个代码和all 方法和所有其他方法都适用于此 我已经查看了所有内容 我可以认为该方法paginate 致力于BaseQuery这也是Query app route app route index app route blog app
  • 如何修复 xamarin android 中的“不允许到 x 的明文 HTTP 流量”

    我的应用程序存在问题 不允许到 x 的明文 HTTP 流量 我已经尝试将 android usesCleartextTraffic true 放入我的清单中 但我想将 android usesCleartextTraffic 标志更改为 f
  • 在 F# 中,谁负责消息队列?

    在 F 中 如果我做类似的事情 让表单 新表单 文本 MyForm 在FSI中运行它 表单将正常显示和更新 甚至可以接收消息 然而 谁在泵送消息队列呢 这里没有 Application Run 调用 我有点困惑 正如 ildjarn 所说
  • CasperJS,使用测试框架并行浏览

    问题 我想知道是否可以进行并行浏览将测试框架放在一个脚本文件中 因此使用 tester 模块和 casperjs test 命令 我见过有些人创建了两个 casper 实例 CasperJS并发请求 and https groups goo