前处理、后处理
## 介绍
`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}}` 代替他的值

我们可以在前处理脚本中给他赋值,如下图,这里是调用了一个登录接口去获取了token,然后赋值。

>s 更好的方法, 使用全局变量简化
如果你每个请求都需要token,按照上面的做法,那你每个接口都需要在前处理获取token。
使用全局变量,可以在登录成功后把token保存到一个全局变量里面(实际上是存储到sessionStorage里了),在后面需要token的地方,你都只需要填写{{token}}就可以了。
登陆成功后把token保存到全局变量,然后其他接口可直接使用这个变量
