笔者近几月某公司WiFi测试平台项目中,了解到他们测试WiFi一直是人工手动测试,因此在老师提议下,决定采用puppeteer去实现页面数据的爬取和更改的自动化,在实施过程中,发现--路由管理页面--登陆后只有cookie加密,并且页面的数据和操作通过向同一接口传递不同参数实现,因此可以通过promise-request方法快速的实现上述功能。
本文主要记录、总结:
- node.js子进程的创建:node.js:child_process(官方文档)
- fork和spawn的区别与联系
- Ipc实现进程间通信
- WebSocket实现进程间通信
1. node.js子进程的创建
node创建子进程的方法可以参考上述官方文档,里面有详细的配置和说明。在本文中,笔者着重介绍笔者使用到的child_process.spawn()
方法和child_process.fork()
方法。
Master进程代码:
const child_process = require(\'child_process\');//引入child_process模块
const {recLog} = require(\"./utils/log\");//由于执行父进程,子进程无法在控制台打印信息,因此封装了log4js方法。
const gChildProcessNumber = 3;//创建子进程数量-全局
creatProcess();
async function creatProcess() {
for (let i = 0; i < gChildProcessNumber; i += 1) {
const workerProcess = child_process.spawn(\'node\', [\'./Request_Test/ChildProcess.js\']);
}
}
Child进程代码:
const {recLog} = require(\"./utils/log\");
recLog(`子进程创建成功,执行ChildProcess.js文件,进程pid为:${process.pid}`)
执行结果:
注意:这里使用child_process.spawn()
方法,由于笔者子进程运行的文件为js文件,因此直接用node运行,如果运行的是其他文件,比如笔者之前运行的×××.e2e.js文件时,笔者运行指令为npm test ×××.e2e.js,就需要写成如下:
const workerProcess = child_process.spawn(\'npm.cmd\', [\'test\', \'./Request_Test/request.e2e.js\'], {
});
因为在Windows上,当我们执行npm 时,我们实际执行的是npm. cnd批处理,所以一定要显示的执行npm.cmd否则会出现Error: spawn npm ENOENT
的错误。
(未完)