前执行脚本和后执行脚本的帮助说明
<h3>执行脚本是什么</h3>
<p>执行脚本是一段符合JavaScript语法的代码片段。其中,前执行脚本,会在接口请求前执行。而后执行脚本,则在接口请求后执行。这种脚本通常会被用来对环境变量/请求参数等做一些自定义修改。比如说,我想通过动态地获取到A接口的返回token,设置进变量里,然后B接口则可以直接使用这个新变量值了。
用户使用runapi调试具体某个接口的时候,会在填写地址的输入框下方看到前后执行脚本的入口</p>
<h3>语法参考</h3>
<ul>
<li>
<h4>前执行脚本</h4>
</li>
</ul>
<pre><code>runapi.getVar(&quot;name&quot;) //获取当前环境的一个变量
runapi.setVar(&quot;name&quot;,&quot;value&quot;)//设置当前环境的一个变量
runapi.clearVar(&quot;name&quot;)//清理当前环境的一个变量
runapi.getParam(name): 获取请求参数(通用方法,GET请求获取query参数,POST/PUT/DELETE请求获取body参数)
runapi.setParam(name, value): 设置请求参数(通用方法,GET请求设置query参数,POST/PUT/DELETE请求设置body参数)
runapi.deleteParam(name): 删除请求参数(通用方法,GET请求删除query参数,POST/PUT/DELETE请求删除body参数)
runapi.getAllParam(): 获取所有参数列表(通用方法,GET请求返回query参数列表,POST/PUT/DELETE请求返回body参数列表),你可以runapi.alert()出来看看数据结构
runapi.getParamJson() // 获取请求参数为json的json对象
runapi.setParamJson(json) //设置请求参数为json的json对象
runapi.getHeader(&quot;name&quot;) //根据name获取header
runapi.setHeader(&quot;name&quot;,&quot;value&quot;) //根据name设置header
runapi.alert(&#039;调试信息&#039; ); // 弹窗显示调试信息
runapi.getMethod() // 获取请求方法
runapi.getUrl() // 获取请求url
runapi.setUrl(url): 设置请求URL(可用于动态修改请求地址,如根据环境切换API地址)
</code></pre>
<ul>
<li>
<h4>后执行脚本</h4>
</li>
</ul>
<pre><code>runapi.getVar(&quot;name&quot;) //获取当前环境的一个变量
runapi.setVar(&quot;name&quot;,&quot;value&quot;)//设置当前环境的一个变量
runapi.clearVar(&quot;name&quot;)//清理当前环境的一个变量
runapi.responseBody //响应体对象
runapi.responseHeader //响应体对象
runapi.status // 响应码
runapi.alert(&#039;调试信息&#039; );
// 后执行脚本还支持断言操作,可配合流程测试功能一起使用
runapi.assert(&#039;status==200&#039;) // 表示响应码为200的时候断言通过
runapi.assert(&#039;responseTime&lt;100&#039;) // 表示响应时间小于100毫秒的时候断言通过
runapi.assert(&quot;bodyIsJson()&quot;) // 响应内容为json格式字符串的时候断言通过
// 关于断言的更多语法和说明,请访问 https://www.showdoc.com.cn/p/4949225ee3575af88b0748ae0e6fc105
</code></pre>
<ul>
<li>
<h4>后执行脚本里的断言</h4>
<p>关于断言的更多语法和说明,[可点击这里](<a href="https://www.showdoc.com.cn/p/4949225ee3575af88b0748ae0e6fc105">https://www.showdoc.com.cn/p/4949225ee3575af88b0748ae0e6fc105</a> "可点击这里")</p>
</li>
<li>
<h4>网络请求方法</h4>
</li>
</ul>
<pre><code>/*
runapi.ajax 兼容前端juqey库的ajax方法,你可以查看jquery ajax参数说明教程 ,
或者在网络搜索更多。网络上关于jquery ajax的历史资料很丰富。
下面给出一个post表单数据的例子
*/
runapi.ajax({
url: &#039;https://www.showdoc.cc/server/api/user/login&#039;,
type: &#039;post&#039;,
dataType: &#039;json&#039;,
data: {
name: &quot;xu&quot;,
foo: &#039;bar&#039;
},
headers: {
&#039;Content-Type&#039;: &#039;application/x-www-form-urlencoded&#039;
},
success: function(res) {
runapi.alert(res)
},
error: function(e) {
}
});
</code></pre>
<ul>
<li>
<h4>加密库</h4>
</li>
</ul>
<pre><code>// runapi可以引用CryptoJS这个加密库来实现类似md5/SHA等常见加密运算
var md5 = runapi.CryptoJS.MD5(&#039;string&#039;).toString() ;
var sha256 = runapi.CryptoJS.SHA256(&#039;string&#039;).toString() ;
runapi.alert(md5)
runapi.alert(sha256)
// 关于CryptoJS还有哪些算法,可以网络搜索之。网上中英文资料都很丰富。
</code></pre>
<ul>
<li>
<h4>时间日期库</h4>
</li>
</ul>
<pre><code>// runapi可以引用MomentJs这个库来简化时间运算
var time1 = runapi.moment().format(&#039;MMMM Do YYYY, h:mm:ss a&#039;) ;
var time2 = runapi.moment().format(&#039;YYYYMMDD&#039;) ;
runapi.alert(time1);
runapi.alert(time2);
// 关于MomentJs还有哪些用法,可以网络搜索之。网上中英文资料都很丰富。
</code></pre>
<h3>一些Demo示例</h3>
<ul>
<li>
<h4>前执行脚本</h4>
</li>
</ul>
<pre><code>
// 获取当前以毫秒为单位的时间戳
var timestamp = new Date().getTime();
//将时间戳设置成环境变量(调用setVar方法时候,若环境变量不存在则会自动创建)
runapi.setVar(&quot;timestamp&quot;,timestamp)
// 将时间戳设置为请求头
runapi.setHeader(&quot;timestamp&quot;,timestamp)
// 从请求头获取刚才设置的值
var timeFromHeader = runapi.getHeader(&quot;timestamp&quot;)
// 将该数值转化为以秒为单位的时间戳
var timestamp2 = Math.round(timeFromHeader/1000) ;
// 将该值设置进请求体参数里
runapi.setParam(&quot;timestamp2&quot;,timestamp2)
</code></pre>
<ul>
<li>
<h4>后执行脚本</h4>
</li>
</ul>
<pre><code>
//如果接口返回是标准json,比如{&quot;testKey&quot;:&quot;hello&quot;},
// 那么访问该对象的testKey可以runapi.responseBody.testKey这样
//为了简洁,我们可以把runapi.responseBody赋值到一个叫body的变量,这样就可以body.testKey
var body = runapi.responseBody
// runapi.alert(body.testKey)
//获取响应码和响应头
var status = runapi.status
var header = runapi.responseHeader
//从响应头中获取时间信息
var date =header.date
//从响应头中获取content-type信息
var type =header[&#039;content-type&#039;]
// 若响应码为200
if(status == 200 ){
// 把date设置进环境变量
runapi.setVar(&quot;testDate&quot;,date)
}else{
// 把ua设置进环境变量
runapi.setVar(&quot;testType&quot;,type)
}
</code></pre>