# @drptbl/gremlins\.js 中文文档

规范地址：https://npmcn.com/package/%40drptbl/gremlins.js/

版本：2\.2\.1
npm 元数据更新时间：2022-04-05T05:42:37.784Z
中文译文更新时间：2026-11-12T20:39:10.221Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40drptbl/gremlins.js
原文对照：https://npmcn.com/package/%40drptbl/gremlins.js/?lang=original
项目主页：https://github.com/marmelab/gremlins.js
源码仓库：https://github.com/marmelab/gremlins.js

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：914 kB，5 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- 运行依赖：2 个
- 首次发布：2021-10-26T11:22:12.876Z
- 最新版本发布：2021-10-26T11:22:13.120Z
- 近 30 天下载量：7108（2026-10-13 至 2026-11-11，npm 官方下载统计）
- 已发布版本数：1（近 12 个月 0 个）

## 中文简介

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

## 安装

```sh
npm install @drptbl/gremlins.js
```

也可以使用：`pnpm add @drptbl/gremlins.js`、`yarn add @drptbl/gremlins.js`、`bun add @drptbl/gremlins.js`

## README

# gremlins.js (英语)

![gremlins](https://raw.githubusercontent.com/marmelab/gremlins.js/master/other/gremlins.png)

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

  

[**生成书签**](https://marmelab.com/gremlins.js/) | [安装文件](https://npmcn.com/package/%40drptbl/gremlins.js/#readme-Installation)

  

* * *

[![version](https://img.shields.io/npm/v/gremlins.js.svg?style=flat-square)](https://www.npmjs.com/package/gremlins.js) [![downloads](https://img.shields.io/npm/dm/gremlins.js.svg?style=flat-square)](https://www.npmtrends.com/gremlins.js) [![Build Status](https://img.shields.io/travis/marmelab/gremlins.js.svg?style=flat-square)](https://travis-ci.org/github/marmelab/gremlins.js)

[![PRs Welcome](https://img.shields.io/badge/prs-welcome-brightgreen.svg?style=flat-square)](https://github.com/marmelab/gremlins.js/pulls?q=is%3Apr+is%3Aopen+sort%3Aupdated-desc) [![Code of Conduct](https://img.shields.io/badge/code%20of-conduct-ff69b4.svg?style=flat-square)](https://github.com/marmelab/gremlins.js/blob/master/code_of_conduct.md) [![MIT License](https://img.shields.io/npm/l/gremlins.js.svg?style=flat-square)](https://github.com/marmelab/gremlins.js/blob/master/license)

[![Tweet](https://img.shields.io/twitter/url/https/github.com/marmelab/gremlins.js.svg?style=social)](https://twitter.com/intent/tweet?text=check%20out%20gremlins.js%20by%20%40marmelab%20https%3a%2f%2fgithub.com%2fmarmelab%2fgremlins.js%20%f0%9f%91%8d)

![TodoMVC attacked by gremlins](http://static.marmelab.com/todo.gif)

> 凯特: _他们是什么,比利?_
> 
> 比利・佩兹: _他们就像弗特曼先生说的一样._

## 目录

-   [目的](https://npmcn.com/package/%40drptbl/gremlins.js/#readme-purpose)
-   [安装](https://npmcn.com/package/%40drptbl/gremlins.js/#readme-installation)
-   [基本用途](https://npmcn.com/package/%40drptbl/gremlins.js/#readme-basic-usage)
-   [高级使用](https://npmcn.com/package/%40drptbl/gremlins.js/#readme-advanced-usage)
    -   [设置 Gremlins 和 Mogwais 在测试中使用](https://npmcn.com/package/%40drptbl/gremlins.js/#readme-setting-gremlins-and-mogwais-to-use-in-a-test)
    -   [配置格伦林](https://npmcn.com/package/%40drptbl/gremlins.js/#readme-configuring-gremlins)
    -   [种子随机器](https://npmcn.com/package/%40drptbl/gremlins.js/#readme-seeding-the-randomizer)
    -   [攻击前后执行代码](https://npmcn.com/package/%40drptbl/gremlins.js/#readme-executing-code-before-or-after-the-attack)
    -   [制定战略](https://npmcn.com/package/%40drptbl/gremlins.js/#readme-setting-up-a-strategy)
    -   [停止攻击](https://npmcn.com/package/%40drptbl/gremlins.js/#readme-stopping-the-attack)
    -   [自定义 Logger](https://npmcn.com/package/%40drptbl/gremlins.js/#readme-customizing-the-logger)
    -   [齐压](https://npmcn.com/package/%40drptbl/gremlins.js/#readme-cypress)
-   [文档](https://npmcn.com/package/%40drptbl/gremlins.js/#readme-docs)
    -   [问题](https://npmcn.com/package/%40drptbl/gremlins.js/#readme-issues)
    -   [QQ 错误](https://npmcn.com/package/%40drptbl/gremlins.js/#readme--bugs)
    -   [QQ 特性请求](https://npmcn.com/package/%40drptbl/gremlins.js/#readme--feature-requests)
-   [许可证](https://npmcn.com/package/%40drptbl/gremlins.js/#readme-license)

## 目的

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

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

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

## 安装

此模块通过 [无](https://www.npmjs.com/) 与 [节点](https://nodejs.org/en/) 并且应该安装为您的项目之一 `dependencies`数字 :

```
npm i gremlins.js
```

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

`gremlins.js` 也可作为 **书签**转到 [此页面](https://marmelab.com/gremlins.js/),抓住它,并在任何网页上发布群.

## 基本用途

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

```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 pzdoyzshh0k9@o8cpskdb73nmi.r7r 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动作的数量,使攻击持续更长的时间:

```js
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,非常容易开发:

```js
// 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 物种, 使用自定义配置对象 :

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

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

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

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

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

-   [点击器Gremlin](https://npmcn.com/package/%40drptbl/gremlins.js/src/species/clicker.js) 单击文档可见区域的任何位置
-   [触摸器Gremlin](https://npmcn.com/package/%40drptbl/gremlins.js/src/species/toucher.js) 触摸文档可见区域的任何地方
-   [窗体FillerGremlin](https://npmcn.com/package/%40drptbl/gremlins.js/src/species/formFiller.js) 通过输入数据、选择选项、点击复选框等方式填充表格
-   [卷轴格勒姆林](https://npmcn.com/package/%40drptbl/gremlins.js/src/species/scroller.js) 滚动视图以显示文档的另一部分
-   [转接器Gremlin](https://npmcn.com/package/%40drptbl/gremlins.js/src/species/typer.js) 键盘上的键类型
-   [提醒莫格瓦伊语Name](https://npmcn.com/package/%40drptbl/gremlins.js/src/mogwais/alert.js) 防止呼叫提醒( ) 阻断测试
-   [fps. 莫格瓦伊语](https://npmcn.com/package/%40drptbl/gremlins.js/src/mogwais/fps.js) 记录浏览器每秒帧数
-   [兹莫·莫格瓦伊](https://npmcn.com/package/%40drptbl/gremlins.js/src/mogwais/gizmo.js) 格林林人走得太远就阻止了

### 配置格伦林

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

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

```js
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都有自己的定制方法,检查来源详情.

### 种子随机器

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

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

### 攻击前后执行代码

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

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

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

```js
const horde = gremlins.createHorde();

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

### 制定战略

默认情况下,gremlins会以随机顺序出击,统一分布,以10ms的延迟相隔. 这个攻击策略叫做 [分配](https://npmcn.com/package/%40drptbl/gremlins.js/src/strategies/distribution.js) 战略。 您可以使用策略自定义对象 :

```js
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种格林林](https://github.com/marmelab/gremlins.js/blob/master/src/index.js#L52)。上一个示例将给出一个 0 值,用于上一个 Gremlin specie .

您也可以使用另一种策略。 一个策略只是一个函数,期望一个参数:一阵"克林". 将另外两项战略捆绑在一起([一起来](https://npmcn.com/package/%40drptbl/gremlins.js/src/strategies/allTogether.js) 财务报告和审定财务报表 [字节](https://npmcn.com/package/%40drptbl/gremlins.js/src/strategies/bySpecies.js)更复杂的攻击情景应该很容易执行定制战略.

### 停止攻击

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

### 自定义 Logger

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

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

### 齐压

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

```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(() => {
            /* ... */
        });
    });
});
```

## 文档

### 问题

_想做贡献吗? 寻找 [好,第一个问题](https://github.com/marmelab/gremlins.js/issues?q=is%3aissue+is%3aopen+sort%3areactions-%2b1-desc) 标签._

### QQ 错误

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

[**见臭虫**](https://github.com/marmelab/gremlins.js/issues?q=is%3aissue+is%3aopen+label%3abug+sort%3acreated-desc)

### QQ 特性请求

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

[**参见特性请求**](https://github.com/marmelab/gremlins.js/issues?q=is%3aissue+sort%3areactions-%2b1-desc+label%3aenhancement+is%3aopen)

## 许可证

gremlins.js 获得以下许可: [麻省理工学院许可证](https://npmcn.com/package/%40drptbl/gremlins.js/LICENSE),礼貌 [马梅拉布](http://marmelab.com/)。 。 。 .

## 常见问题

### @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 和提交记录判断。

