1.0.10-beta.9 • Published 4 days ago

@arextest/arex-node-agent v1.0.10-beta.9

Weekly downloads
-
License
ISC
Repository
-
Last release
4 days ago

背景

arex nodejs-agent 实现

环境

  1. js
  2. monkey patch
  3. rollup 打包
  4. ctrip npm 部署
  5. npm
  6. node v18
  7. semver

v1 内容

  • 支持入口为express的api
  • 支持http wrap
  • 支持knex db wrap
  • 支持上下文录制回放交互
  • 预留arex api mock

项目结构

  • 模块agent: nodeagent实现逻辑
  • 模块app: 目标应用
  • 模块app/instrumentation.js: 启动中间件

启动node-agent

  • 自定义中间件启动器,按需配置中间件 参考 app/instrumentation node --require ./instrumentation.js index.js
  • 通过arex-runner启动agent
    1. 环境变量指定appid,host
    2. 平台配置更多中间件
    3. app/Dockerfile CMD ["node", "--require", "--require @arextest/arex-node-agent/dist/runner.js", "index.js"]
  • 调试本地agent debug: DEBUG=@arextest:* node --require ./instrumentation_local.js index.js

实现

  • 代理流程
  1. 初始化配置
  2. 代理一个入口函数 生成上下文context,store
  3. 装载入口函数
  4. 装载函数调用的io,自定义装载等
    • 加载context
    • 录制/回放
    • 存储/加载
    • 结束
  5. 线程结束
    • 卸载patch

案例 - express 请求一个 updateUser 接口

录制操作

  1. Express 中间件
    • 创建recordId
    • 调用client.saveRecord
    • 保存updateUser请求的request, response信息
  2. service 被测代码逻辑
    • 调用client.saveRecord
    • 保存service.updateUserName 的request, response信息

回放操作

  1. Express 中间件
    • 适配回放标识 arex-record-id
    • 创建replayId
    • 调用client.queryRecord
    • 查询并提交updateUser请求的request,response信息
  2. service 被测代码逻辑
    • 调用client.queryRecord
    • 查询service.updateUserName 的request, response信息
    • 替换方法的返回结果

发布

v1.0.6 1. 提取静态字段 2. 修复option读取失败 v1.0.10 1. 支持mysql2

参考

  1. 演练场 /jagong/node-agent-payload/-/tree/main/node_arex_agent
  2. npm 发布流程
  • 申请权限
  • npm login --registry https://registry.npmjs.org
  • npm publish --registry https://registry.npmjs.org --access=public
  1. mock http :Nock 或 Sinon 等库来进行请求拦截和模拟响应
1.0.10-beta.7

4 days ago

1.0.10-beta.9

4 days ago

1.0.10-beta.6

5 days ago

1.0.10-beta.2

12 days ago

1.0.10-beta.4

12 days ago

1.0.10-beta.3

12 days ago

1.0.10-beta.5

12 days ago

1.0.1-0.beta.1

15 days ago

1.0.1-0.beta.2

15 days ago

1.0.10-beta.1

15 days ago

1.0.10

16 days ago

1.0.8

18 days ago

1.0.8-bate.1

18 days ago

1.0.7-beta.8

18 days ago

1.0.9-beta.1

18 days ago

1.0.9-beta.5

17 days ago

1.0.9-beta.6

17 days ago

1.0.9-beta.3

18 days ago

1.0.9-beta.4

18 days ago

1.0.7-beta.5

19 days ago

1.0.7-beta.6

19 days ago

1.0.7-beta.7

19 days ago

1.0.7-beta.1

19 days ago

1.0.7-beta.2

19 days ago

1.0.7-beta.4

19 days ago

1.0.6

1 month ago

1.0.5

1 month ago

1.0.4-beta.1

2 months ago

1.0.4

2 months ago

1.0.3-beta.3

2 months ago

1.0.3-beta.2

2 months ago

1.0.3-beta.1

2 months ago

1.0.3

2 months ago

1.0.2

2 months ago