前处理、后处理

## 介绍 `Pre-Script`、`Post-Script` 也就是前处理、后处理,使用 `Javascript` 编写。 方便接口测试时进行一些额外的处理。 前处理会在接口调用前执行、后处理在数据返回后运行。 前处理有时候非常有用,例如:动态生成一个`token`并设置到`header`、调用其他接口获得参数、数据加密等 后处理可以用来处理返回后的数据,例如:解密数据,判断返回是否正确、保存到一个全局变量。 [视频教程](https://www.bilibili.com/video/BV1nh411974p?p=6) ## 前处理可用代码 设置变量:`ed.var.set("param_name", "value")`,替换{{param_name}}的值 获取变量:`ed.var.get("param_name")` 设置全局变量:`ed.globals.set("param_name", "value")`,替换{{param_name}}的值 获取全局变量:`ed.globals.get("param_name")` 设置头部参数:`ed.headers.set("param_name", "value")` 获取头部参数:`ed.headers.get("param_name")` 设置Body参数:`ed.body.set("param_name", "value")` 获取Body参数:`ed.body.get("param_name")` 发送请求:请看下面的请求示例 ## 后处理可用代码 设置变量:`ed.var.set("param_name", "value")` 获取变量:`ed.var.get("param_name")` 设置全局变量:`ed.globals.set("param_name", "value")`,替换{{param_name}}的值 获取全局变量:`ed.globals.get("param_name")` 响应码:`ed.status` 响应码描述:`ed.statusText` 响应数据:`ed.data` 完整响应内容:`ed.response`、`response` 发送请求:请看下面的请求示例 ## 加载使用第三方库 可以使用 loadLib 来引用一些第三方库,例如,你需要使用 crypto-js 这个库来计算 sha256 ```javascript await ed.loadLib("https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js") console.log("sha256 value", CryptoJS.SHA256('your string')) ``` ## 获取更多数据 在前处理脚本中,ed.body.get(xxx) 这种方式只能获取到formdata类型的数据,如果需要 json 这类的数据,变量 requestData 中有所有的请求相关的数据,varDict 中有环境变量相关的数据,可以打印出来看下: ```javascript console.log(requestData, varDict) ``` ## Http 请求示例 > post 请求示例 ```json ed.sendRequest({ method: "post", url: "http://127.0.0.1:9981/api/login", headers: { }, dataType: "formData", // 数据类型,还可以是:formUrlEncoded、json,默认formData data: { "email": "hello@qq.com", "password": "123456" } }, res=>{ console.log("status code:" + res.status + ", msg:" + res.statusText) ed.var.set("token", res.data.token) }) ``` > get 请求示例 ```json ed.sendRequest({ method: "get", url: "http://127.0.0.1:9981/api/login?username=hello", }, res=>{ console.log("status code:" + res.status + ", msg:" + res.statusText) ed.var.set("token", res.data.token) }) ``` >w 接口请求记录可以在Chrome的扩展中心,找到Easydoc插件,打开 background.html 查看 ## 使用举例 在请求链接、参数中你可以使用`{{param_name}}`方式定义一个变量占位符,在脚本中你可以给这个变量赋值。如下图中的 `authorization` 参数,使用一个 `{{token}}` 代替他的值 ![image.png](https://cos.easydoc.net/46901064/files/k4pgkg5o.png) 我们可以在前处理脚本中给他赋值,如下图,这里是调用了一个登录接口去获取了token,然后赋值。 ![image.png](https://cos.easydoc.net/46901064/files/k4pgm8br.png) >s 更好的方法, 使用全局变量简化 如果你每个请求都需要token,按照上面的做法,那你每个接口都需要在前处理获取token。 使用全局变量,可以在登录成功后把token保存到一个全局变量里面(实际上是存储到sessionStorage里了),在后面需要token的地方,你都只需要填写{{token}}就可以了。 登陆成功后把token保存到全局变量,然后其他接口可直接使用这个变量 ![image.png](https://cos.easydoc.net/46901064/files/k8lij0br.png)