@drptbl/gremlins.js

中文文档
2.2.1发布于 2021/10/26MITCommonJS近 30 天下载 7108

一个用JavaScript编写的猴子测试库,用于Node.js和浏览器. 用它来检查网络应用的稳健性 通过释放出一群没有纪律的克林人.

中文使用文档
文档目录18 节
  1. 目录
  2. 目的
  3. 安装
  4. 基本用途
  5. 高级使用
  6. 设置 Gremlins 和 Mogwais 在测试中使用
  7. 配置格伦林
  8. 种子随机器
  9. 攻击前后执行代码
  10. 制定战略
  11. 停止攻击
  12. 自定义 Logger
  13. 齐压
  14. 文档
  15. 问题
  16. QQ 错误
  17. QQ 特性请求
  18. 许可证

gremlins.js (英语)

gremlins

一个用JavaScript编写的猴子测试库,用于Node.js和浏览器. 用它来检查网络应用的稳健性 通过释放出一群没有纪律的克林人.


生成书签 | 安装文件



version downloads Build Status

PRs Welcome Code of Conduct MIT License

Tweet

TodoMVC attacked by gremlins

凯特: 他们是什么,比利?

比利・佩兹: 他们就像弗特曼先生说的一样.

目录

目的

在开发 HTML5 应用程序时, 您是否预见到不同寻常的用户交互 ? 你成功检测和补补补了所有的内存出漏? 如果没有,申请可能迟早会中断。 如果n随机动作可以使应用程序出故障,在测试时最好承认,而不是让用户发现.

Gremlins.js模拟了随机用户动作:gremlins点击窗口的任意位置,在形式上输入随机数据,或者将鼠标移动到不期待的元素上. 他们的目标:触发JavaScript错误,或使应用程序失败. 如果格林林斯不能打破申请,恭喜! 应用程序足够强大,可以发布给真正的用户.

这种做法,也称为 猴子检测 或者说 模糊测试,在移动应用程序开发中非常常见(例如参见: 安卓猴计划) (中文(简体) ). 现在前端(MV *, d3.js, Backbone.js, Angular.js等)和后端(Node.js)的开发使用持续的JavaScript应用,这种技术对网络应用变得有价值.

安装

此模块通过 无 与 节点 并且应该安装为您的项目之一 dependencies数字 :

npm i gremlins.js

这个图书馆 dependencies 清单 chance。 。 。 .

gremlins.js 也可作为 书签转到 此页面,抓住它,并在任何网页上发布群.

基本用途

绿宝石 军团 是一支专门精锐的军队 准备破坏你的申请. 释放 开始压力测试:

const horde = gremlins.createHorde();
horde.unleash();
// gremlins will act randomly, at 10 ms interval, 1000 times

gremlins.js 提供数个格林林 物种:有的点击页面上随处可见,有的以窗体输入数据,有的则以每个可能的方向滚动窗口等.

在屏幕(它们留下了红色的痕迹)和控制台日志中,你会看到Gremlins动作的痕迹:

gremlin formFiller input 5 in <input type=​"number" name=​"age">​
gremlin formFiller input [email protected] in <input type=​"email" name=​"email">​
gremlin clicker    click at 1219 301
gremlin scroller   scroll to 100 25
...

一群人还包含 莫格瓦斯语name,它们是无害的腺素(或者,你可以说,腺素是有害的莫克瓦斯)。 Mogwais只监视应用程序的活动,并将其记录在日志上. 例如,"fps" mogwai监视每秒帧数,每500ms:

mogwai  fps  33.21
mogwai  fps  59.45
mogwai  fps  12.67
...

Mogwais也报告gremlins破解应用时的情况. 例如, 如果每秒帧数下降到 10 下, fps mogwai 会记录一个错误 :

mogwai  fps  12.67
mogwai  fps  23.56
err > mogwai  fps  7.54 < err
mogwai  fps  15.76
...

10个出错后,一个特制的摩格瓦伊停止了测试. 他被叫来 吉兹莫而且他防止了葛林斯坏掉应用 毕竟,一旦Gremlins发现了前10个错误,你已经知道该怎么做才能让你的应用程序更坚固.

如果没有被Gizmo阻止,默认的激流在大约1分钟后停止. 可以增加Gremlins动作的数量,使攻击持续更长的时间:

horde.createHorde({
    strategies: [gremlins.strategies.allTogether({ nb: 10000 })],
});
horde.unleash();
// gremlins will attack at 10 ms interval, 10,000 times

Gremlins同mogwais一样,是简单的JavaScript函数. 若为 gremlins.js 不提供可以破坏你的应用的gremlin,非常容易开发:

// Create a new custom gremlin to blur an input randomly selected
function customGremlin({ logger, randomizer, window }) {
    // Code executed once at initialization
    logger.log('Input blur gremlin initialized');
    // Return a function that will be executed at each attack
    return function attack() {
        var inputs = document.querySelectorAll('input');
        var element = randomizer.pick(element);
        element.blur();
        window.alert('attack done');
    };
}

// Add it to your horde
horde.createHorde({
    species: [customGremlin],
});

里面的东西 gremlins.js 。您会发现非常容易扩展并适应您使用的案例.

高级使用

设置 Gremlins 和 Mogwais 在测试中使用

默认情况下会将所有革兰和莫克瓦斯物种都加入到荷花属中.

您也可以选择只添加您想要的 gremlins 物种, 使用自定义配置对象 :

gremlins
    .createHorde({
        species: [
            gremlins.species.formFiller(),
            gremlins.species.clicker({
                clickTypes: ['click'],
            }),
            gremlins.species.toucher(),
        ],
    })
    .unleash();

如果您只想在默认的外加自有克林,请使用 allSpecies 常数 :

gremlins
    .createHorde({
        species: [...gremlins.allSpecies, customGremlin],
    })
    .unleash();

只需加入你想要的摩格瓦 就用 mogwai 配置和 allMogwais() 恒相如来相.

gremlins.js 目前提供几种甘油和莫克瓦斯:

配置格伦林

所有由Gremlins和Mogwais提供 由 gremlins.js 为: 可配置,即可以通过插入自定义配置来改变工作方式.

例如,点击器gremlin是一个将对象作为自定义配置的函数:

const customClicker = gremlins.species.clicker({
    // which mouse event types will be triggered
    clickTypes: ['click'],
    // Click only if parent is has class test-class
    canClick: (element) => element.parentElement.className === 'test-class',
    // by default, the clicker gremlin shows its action by a red circle
    // overriding showAction() with an empty function makes the gremlin action invisible
    showAction: (x, y) => {},
});
gremlins.createHorde({
    species: [customClicker],
});

每个特定的gremlin或mogwai都有自己的定制方法,检查来源详情.

种子随机器

如果想要攻击是可重复的, 你需要种子随机数生成器 :

// seed the randomizer
horde.createHorde({
    randomizer: new gremlins.Chance(1234);
});

攻击前后执行代码

在开始攻击之前, 您可能想要执行自定义代码 。 这对于:

  • 启动配置器
  • 禁用一些特性以更好地瞄准测试
  • 启动应用程序

幸运的是, unleashHorde 是一个承诺。 如果你想在释放前后执行代码,只需:

const horde = gremlins.createHorde();

console.profile('gremlins');
horde.unleash().then(() => {
    console.profileEnd();
});

制定战略

默认情况下,gremlins会以随机顺序出击,统一分布,以10ms的延迟相隔. 这个攻击策略叫做 分配 战略。 您可以使用策略自定义对象 :

const distributionStrategy = gremlins.strategies.distribution({
    distribution: [0.3, 0.3, 0.3, 0.1], // the first three gremlins have more chances to be executed than the last
    delay: 50, // wait 50 ms between each action
});

请注意,如果使用默认的腺素,则有 5种格林林。上一个示例将给出一个 0 值,用于上一个 Gremlin specie .

您也可以使用另一种策略。 一个策略只是一个函数,期望一个参数:一阵"克林". 将另外两项战略捆绑在一起(一起来 财务报告和审定财务报表 字节更复杂的攻击情景应该很容易执行定制战略.

停止攻击

敌军在紧急情况下可以停止攻击 horde.stop() 方法Gizmo在10个出错后使用这种方法来防止应用程序的进一步损坏,如果不想继续攻击,也可以使用.

自定义 Logger

默认情况下,gremlins.js记录了控制台中所有的gremlin动作和mogwai观测. 如果您更喜欢使用替代的日志方法(例如,将腺素活性存储在本地Storage中并每10秒发送一次在Ajax),只需为日志对象提供4个方法(log、信息、警告和出错)即可 logger() 方法 :

const customLogger = {
    log: function (msg) {
        /* .. */
    },
    info: function (msg) {
        /* .. */
    },
    warn: function (msg) {
        /* .. */
    },
    error: function (msg) {
        /* .. */
    },
};
horde.createHorde({ logger: customLogger });

齐压

要在囊压测试中运行 gremlins.js, 你需要提供测试窗口:

import { createHorde } from 'gremlins.js';

describe('Run gremlins.js inside a cypress test', () => {
    let horde;
    beforeEach(() =>
        cy.window().then((testedWindow) => {
            horde = createHorde({ window: testedWindow });
        })
    );
    it('should run gremlins.js', () => {
        return cy.wrap(horde.unleash()).then(() => {
            /* ... */
        });
    });
});

文档

问题

想做贡献吗? 寻找 好,第一个问题 标签.

QQ 错误

请为错误、 缺少文档或意外行为存档 .

见臭虫

QQ 特性请求

请提出一个问题来建议新的功能。 通过添加对专题请求进行表决 (单位:千美元) 这有助于维护者确定工作的优先次序.

参见特性请求

许可证

gremlins.js 获得以下许可: 麻省理工学院许可证,礼貌 马梅拉布。 。 。 .

版本与发布记录

@drptbl/gremlins.js 共发布 1 个版本,首次发布于 2021/10/26;过去 12 个月发布了 0 个版本。

版本发布日期距今
2.2.1latest2021/10/265 年前

关于 @drptbl/gremlins.js 的常见问题

@drptbl/gremlins.js 是什么?

一个用JavaScript编写的猴子测试库,用于Node.js和浏览器. 用它来检查网络应用的稳健性 通过释放出一群没有纪律的克林人.

如何安装 @drptbl/gremlins.js?

在项目目录运行 npm install @drptbl/gremlins.js,或使用 pnpm add / yarn add / bun add。

@drptbl/gremlins.js 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/drptbl__gremlins.js 是否存在。

@drptbl/gremlins.js 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@drptbl/gremlins.js 可以商用吗?

@drptbl/gremlins.js 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@drptbl/gremlins.js 的下载量有多少?

根据 npm 官方下载统计,@drptbl/gremlins.js 在 2026/10/13 – 2026/11/11 这 30 天内被下载 7,108 次,日均约 237 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@drptbl/gremlins.js 还在维护吗?

最新版本 2.2.1 发布于 2021/10/26(5 年前);至今共发布 1 个版本,其中过去 12 个月发布了 0 个;首次发布于 2021/10/26。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。