UNPKG

4.76 kBMarkdownView Raw
1# matman
2
3[matman](https://github.com/matmanjs/matman) 端对端测试方案中的核心操作库。
4
5## 1. 安装
6
7```
8$ npm install matman --save
9```
10
11## 2. API
12
13### 2.1 CaseParser 类
14
15测试用例处理类。每一个测试用例都是一个 CaseParser 对象。
16
17#### 2.1.1 constructor(rootPath, opts)
18
19- `rootPath`: `String`, 测试用例的脚本目录,必填项
20- `opts`: 额外参数
21
22#### 2.1.2 getCrawlerScriptPath(relativePath)
23
24获得构建之后的爬虫脚本文件的绝对路径路径。
25
26`relativePath` 是一个相对路径,而返回的是该文件的绝对路径。在确定 `relativePath` 值时,可以参考 CommonJS 规范中的 `require` 方法。
27
28```javascript
29
30const { CaseParser } = require('matman');
31const caseParser = new CaseParser(__dirname);
32
33// 获取 crawlerScript 爬虫脚本路径,返回构建之后文件的绝对路径,例如: /user/xxx/yyy/crawlers/get-page-info
34const crawlerScriptPath = caseParser.getCrawlerScriptPath('../../crawlers/get-page-info');
35
36```
37
38#### 2.1.3 handleOperate(pageUrl, crawlerScriptPath, opts = {}, callAction)
39
40模拟用户进行交互操作。
41
42请求参数:
43
44- `pageUrl``String`,必填,页面的 URL 地址
45- `crawlerScriptPath``String`,必填,运行在浏览器中的前端爬虫脚本的绝对路径,建议使用 `getCrawlerScriptPath(relativePath)` 方法来动态获取
46- `opts``Object`,额外参数
47 - `opts.show``Boolean`,运行时的无头浏览器是否需要可见,默认为 `false`,即隐藏在后台运行
48 - `opts.proxyServer``String`,代理服务器,例如 `127.0.0.1:8899`,或者 `my_proxy_server.example.com:8080` ,会直接透传给 [nightmare 的 switches 配置项](https://github.com/segmentio/nightmare#switches) 中的 `proxy-server` 字段
49 - `opts.wait``String | Number`,wait 配置,会直接透传给 [nightmare 的 wait 配置项](https://github.com/segmentio/nightmare#waitms)
50 - `opts.doNotEnd``Boolean`,是否在执行完成之后不要关闭浏览器,默认为 `false`
51 - `opts.cookie``String`,为浏览器注入cookie,格式与 `document.cookie` 一致
52 - `opts.mockstarQuery``Object`,指定 mockstar 的query参数,用于数据打桩,为 [mockstar](https://www.npmjs.com/package/mockstar) 中的 `MockStarQuery` 对象
53 - `opts.screenshot``String | Boolean | Object`,截图设置,如果是 `Object` 值,则需要包含 `path``clip` 两个属性,处理之后会直接透传给 [nightmare 的 screenshot 配置项](https://github.com/segmentio/nightmare#screenshotpath-clip)
54 - `opts.device``String | Object`,设备设置,如果是 `Object` 值,则需要包含 `name``UA``width``height` 两个属性,处理之后会直接透传给 [nightmare-handler 的 exDevice 配置项](https://github.com/helinjiang/nightmare-handler/blob/HEAD/docs/exDevice.md)
55- `callAction``Function`,定义用户交互行为的函数,接受一个 `BaseHandle` 对象参数
56
57返回一个 `Promise``resolve` 返回的值为 `CaseParserOperateResult` 对象,除了包含了 `{data: Array, _dataIndexMap:Object, globalInfo: Object}` ,同时提供了以下方法:
58
59- `get(key)` ,获得指定自定义行为名字的数据结果
60- `getQueue()`,获得所有的事件结果
61- `getNetwork(resourceType)`,获得指定 `resourceType` 的网络请求列表,若 `resourceType` 为空,则返回所有。`resourceType` 目前支持八种:`mainFrame``subFrame``stylesheet``script``image``object``xhr``other`
62- `isExistInNetwork(partialURL, query, resourceType)`,从网络请求列表过滤出匹配的结果
63- `isExistPage(partialURL, query)`,从网络请求列表过滤出匹配的结果,且指定 `resourceType``mainFrame`
64- `isExistXHR(partialURL, query)`,从网络请求列表过滤出匹配的结果,且指定 `resourceType``xhr`
65
66
67#### 3.1.4 handleScan(pageUrl, crawlerScriptPath, opts, delayBeforeClose)
68
69获取页面信息,适合无交互行为的场景。
70
71请求参数和返回请参考 `handleOperate` 方法,也是返回一个 `Promise`, 但 `resolve` 返回的值结构为 `{data: Object, globalInfo: Object}`
72
73另外定义了一个 `delayBeforeClose` 参数,该值会在 `opts.useRecorder``true` 时启用,用于延迟关闭窗口,以便能够完整收集一些异步请求信息。
74
75它本质上是 `handleOperate` 的一个特殊场景,近似等效于:
76
77```
78return this.handleOperate(pageUrl, crawlerScriptPath, opts, (testAction) => {
79 // scan 行为是一种特殊的操作,因为它只有一个行为,且结果也不再是数组
80 testAction.addAction(function (nightmareRun) {
81 return nightmareRun.wait(opts.wait || 500);
82 });
83})
84```