fix: 全局变量使用说明

This commit is contained in:
gaoxiaolin.gao 2018-07-18 18:04:44 +08:00
parent 9d3e41e1a1
commit d099d8c55f
28 changed files with 133 additions and 103 deletions

View File

@ -1,7 +1,7 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import './index.scss';
import { Icon, Row, Col, Form, Input, Select, Button, AutoComplete } from 'antd';
import { Icon, Row, Col, Form, Input, Select, Button, AutoComplete, Tooltip } from 'antd';
const FormItem = Form.Item;
const Option = Select.Option;
import constants from 'client/constants/variable.js';
@ -54,8 +54,7 @@ class ProjectEnvContent extends Component {
name: '',
value: ''
}
]
];
const curheader = curdata.header;
const curGlobal = curdata.global;
@ -81,12 +80,12 @@ class ProjectEnvContent extends Component {
});
}
if(curGlobal && curGlobal.length !== 0) {
if (curGlobal && curGlobal.length !== 0) {
curGlobal.forEach(item => {
global.unshift(item)
})
global.unshift(item);
});
}
return { header, cookie, global }
return { header, cookie, global };
}
constructor(props) {
@ -141,7 +140,7 @@ class ProjectEnvContent extends Component {
});
let global = values.global.filter(val => {
return val.name !== '';
})
});
if (cookie.length > 0) {
header.push({
name: 'Cookie',
@ -342,7 +341,19 @@ class ProjectEnvContent extends Component {
return commonTpl(item, index, 'cookie');
})}
<h3 className="env-label">global</h3>
<h3 className="env-label">
global
<a
target="_blank"
rel="noopener noreferrer"
href="https://yapi.ymfe.org/documents/project.html#%E9%85%8D%E7%BD%AE%E7%8E%AF%E5%A2%83"
style={{ marginLeft: 8 }}
>
<Tooltip title="点击查看文档">
<Icon type="question-circle-o" />
</Tooltip>
</a>
</h3>
{this.state.global.map((item, index) => {
return commonTpl(item, index, 'global');
})}

View File

@ -67,6 +67,9 @@
.env-label{
padding-bottom: 8px;
a {
color: #636363;
}
}
.env-last-row {

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

View File

@ -30,18 +30,19 @@
## 项目迁移
YApi中支持项目迁移到不同的分组中。
YApi 中支持项目迁移到不同的分组中。
<img src="./images/project-remove.png" />
迁移权限: 只有管理员和该项目的owner有权限对位置进行修改。项目owner主要有创建该项目的人、项目中的组长、创建分组的人、分组中的组长。
迁移权限: 只有管理员和该项目的 owner 有权限对位置进行修改。项目 owner 主要有创建该项目的人、项目中的组长、创建分组的人、分组中的组长。
> Tips: owner权限判断的优先级是 项目权限 > 分组权限
> Tips: owner 权限判断的优先级是 项目权限 > 分组权限
## 项目拷贝
该功能在 v1.3.12 版本上线,项目克隆功能可复制项目全部接口到一个新项目,如下图所示,点击红色框里面的 icon 使用。
YApi支持项目复制功能但是无法复制项目中的测试集合list。
YApi 支持项目复制功能,但是无法复制项目中的测试集合 list。
操作: 点击下图左上角的复制按钮,在弹窗中写入复制项目名称点击确定就可以完成项目复制
@ -59,16 +60,24 @@ YApi支持项目复制功能但是无法复制项目中的测试集合list。
## 配置环境
`环境配置` 一项可以添加该项目下接口的实际环境,供 [接口测试](./case.md) 使用这里增加了全局header可以在项目中设置全局header值。在接口运行页面的选择环境select中也增加`环境配置`弹层。
`环境配置` 一项可以添加该项目下接口的实际环境,供 [接口测试](./case.md) 使用,这里增加了全局 header可以在项目中设置全局 header 值。在接口运行页面的选择环境 select 中也增加`环境配置`弹层。
<img src="./images/usage/project_setting_env.png" />
v1.3.20 新增全局变量,用户可以在环境列表中定义全局变量的名称和值, 接口运行或者测试集合里面可以通过 {{ global.err }} 来访问当前环境变量下定义的全局变量
<img src="./images/usage/project_setting_global.png" />
## 请求配置
通过自定义 js 脚本方式改变请求的参数和返回的 response 数据
### 请求参数示例
以 jquery ajax 为例,假设当前的请求参数是
```
{
url: '/api/user?id=1',
@ -82,8 +91,8 @@ YApi支持项目复制功能但是无法复制项目中的测试集合list。
}
```
那么公共变量 context 包含以下属性:
```
context = {
pathname: '/api/user',
@ -104,11 +113,12 @@ context = {
```
context.query.token = context.utils.md5(context.pathname + 'salt');
```
### 返回数据示例
在上面的示例请求完成后,假设返回 responseBody={a:1},公共变量 context 包含以下属性:
```
context = {
pathname: '/api/user',
@ -136,11 +146,13 @@ context = {
```
context.responseBody.a = 2;
```
> v1.3.16+新增context.href和context.hostname
> v1.3.16+新增context.href 和 context.hostname
> v1.3.17+新增context.caseId 测试用例的唯一 key 值
### 工具函数
```
context.utils = {
_ //underscore 函数,详细 API 查看官网 http://underscorejs.org/
@ -156,56 +168,52 @@ context.utils = {
axios // axios 库,可用于 api 请求,官网 https://github.com/axios/axios
}
```
CryptoJS 具体用法
```javascript
var data = [{id: 1}, {id: 2}]
var data = [{ id: 1 }, { id: 2 }];
// Encrypt
var ciphertext = context.utils.CryptoJS.AES.encrypt(JSON.stringify(data), 'secret key 123');
// Decrypt
var bytes = context.utils.CryptoJS.AES.decrypt(ciphertext.toString(), 'secret key 123');
var bytes = context.utils.CryptoJS.AES.decrypt(ciphertext.toString(), 'secret key 123');
var decryptedData = JSON.parse(bytes.toString(CryptoJS.enc.Utf8));
console.log('decryptedData',decryptedData);
console.log('decryptedData', decryptedData);
```
### 异步处理v1.3.13+支持)
处理请求参数,或返回数据,可能还会涉及到异步处理,比如 ajax 请求YApi 在 v1.3.13 版本支持了异步处理。
```javascript
context.promise = new Promise(function(resolve){
var api = context.utils.axios.get('http://yapi.local.qunar.com:3000/api/user/status')
api.then(function(result){
//...
console.log(result.data)
resolve()
})
})
context.promise = new Promise(function(resolve) {
var api = context.utils.axios.get('http://yapi.local.qunar.com:3000/api/user/status');
api.then(function(result) {
//...
console.log(result.data);
resolve();
});
});
```
promise 还可以来设置接口延迟
```javascript
context.promise = new Promise(function(resolve){
setTimeout(function(){
console.log('delay 1000ms')
resolve('ok')
}, 1000)
})
context.promise = new Promise(function(resolve) {
setTimeout(function() {
console.log('delay 1000ms');
resolve('ok');
}, 1000);
});
```
使用方法就是在 `context` 里面添加 `promise` 参数,并且返回一个 Promise不熟悉 Promise 的童鞋可以查下相关用法ajax 请求可以使用 `context.utils.axios` 库。
> 处理完成后,不要忘记 `resolve()`,不然会一直处于挂起状态
## token 配置
## token配置
每个项目都有唯一的标识token用户可以使用这个token值来请求项目的所有资源数据。目前用到的地方是接口的<a href="./case.md">自动化测试</a>,用户不需要登录就可以访问接口测试结果信息。
每个项目都有唯一的标识 token用户可以使用这个 token 值来请求项目的所有资源数据。目前用到的地方是接口的<a href="./case.md">自动化测试</a>,用户不需要登录就可以访问接口测试结果信息。

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

View File

@ -28,15 +28,15 @@
<p>点击项目图标,可以修改图标及背景色:</p>
<img src="./images/usage/project_setting_logo.png">
<h2 id="项目迁移">项目迁移</h2>
<p>YApi中支持项目迁移到不同的分组中。</p>
<p>YApi 中支持项目迁移到不同的分组中。</p>
<img src="./images/project-remove.png">
<p>迁移权限: 只有管理员和该项目的owner有权限对位置进行修改。项目owner主要有创建该项目的人、项目中的组长、创建分组的人、分组中的组长。</p>
<p>迁移权限: 只有管理员和该项目的 owner 有权限对位置进行修改。项目 owner 主要有创建该项目的人、项目中的组长、创建分组的人、分组中的组长。</p>
<blockquote>
<p>Tips: owner权限判断的优先级是 项目权限 &gt; 分组权限</p>
<p>Tips: owner 权限判断的优先级是 项目权限 &gt; 分组权限</p>
</blockquote>
<h2 id="项目拷贝">项目拷贝</h2>
<p>该功能在 v1.3.12 版本上线,项目克隆功能可复制项目全部接口到一个新项目,如下图所示,点击红色框里面的 icon 使用。</p>
<p>YApi支持项目复制功能但是无法复制项目中的测试集合list。</p>
<p>YApi 支持项目复制功能,但是无法复制项目中的测试集合 list。</p>
<p>操作: 点击下图左上角的复制按钮,在弹窗中写入复制项目名称点击确定就可以完成项目复制</p>
<img src="./images/usage/projectCopy.png">
<img src="./images/usage/project_copy_ok.png">
@ -49,8 +49,10 @@
<p>删除项目是高风险操作,因此 YApi 对这个操作进行了特别的约束。</p>
</blockquote>
<h2 id="配置环境">配置环境</h2>
<p><code>环境配置</code> 一项可以添加该项目下接口的实际环境,供 <a href="./case.html">接口测试</a> 使用这里增加了全局header可以在项目中设置全局header值。在接口运行页面的选择环境select中也增加<code>环境配置</code>弹层。</p>
<p><code>环境配置</code> 一项可以添加该项目下接口的实际环境,供 <a href="./case.html">接口测试</a> 使用,这里增加了全局 header可以在项目中设置全局 header 值。在接口运行页面的选择环境 select 中也增加<code>环境配置</code>弹层。</p>
<img src="./images/usage/project_setting_env.png">
<p>v1.3.20 新增全局变量,用户可以在环境列表中定义全局变量的名称和值, 接口运行或者测试集合里面可以通过 {{ global.err }} 来访问当前环境变量下定义的全局变量</p>
<img src="./images/usage/project_setting_global.png">
<h2 id="请求配置">请求配置</h2>
<p>通过自定义 js 脚本方式改变请求的参数和返回的 response 数据</p>
<h3 id="请求配置-请求参数示例">请求参数示例</h3>
@ -83,7 +85,6 @@
</code></pre>
<p>假设我们需要在一组接口的 url 上增加一个公共的 token 参数,可以写如下自定义脚本:</p>
<pre><code>context.query.token = context.utils.md5(context.pathname + &#x27;salt&#x27;);
</code></pre>
<h3 id="请求配置-返回数据示例">返回数据示例</h3>
<p>在上面的示例请求完成后,假设返回 responseBody={a:1},公共变量 context 包含以下属性:</p>
@ -110,10 +111,9 @@
</code></pre>
<p>假设我们需要修改响应数据 responseBody a 的值为 2可以填写如下自定义脚本</p>
<pre><code>context.responseBody.a = 2;
</code></pre>
<blockquote>
<p>v1.3.16+新增context.href和context.hostname<br>
<p>v1.3.16+新增context.href context.hostname<br>
v1.3.17+新增context.caseId 测试用例的唯一 key 值</p>
</blockquote>
<h3 id="请求配置-工具函数">工具函数</h3>
@ -132,43 +132,42 @@
}
</code></pre>
<p>CryptoJS 具体用法</p>
<pre><code class="language-javascript"><span class="token keyword">var</span> data <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">{</span>id<span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span>id<span class="token punctuation">:</span> <span class="token number">2</span><span class="token punctuation">}</span><span class="token punctuation">]</span>
<pre><code class="language-javascript"><span class="token keyword">var</span> data <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">{</span> id<span class="token punctuation">:</span> <span class="token number">1</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> id<span class="token punctuation">:</span> <span class="token number">2</span> <span class="token punctuation">}</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
<span class="token comment">// Encrypt</span>
<span class="token keyword">var</span> ciphertext <span class="token operator">=</span> context<span class="token punctuation">.</span>utils<span class="token punctuation">.</span>CryptoJS<span class="token punctuation">.</span><span class="token constant">AES</span><span class="token punctuation">.</span><span class="token function">encrypt</span><span class="token punctuation">(</span><span class="token constant">JSON</span><span class="token punctuation">.</span><span class="token function">stringify</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">'secret key 123'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// Decrypt</span>
<span class="token keyword">var</span> bytes <span class="token operator">=</span> context<span class="token punctuation">.</span>utils<span class="token punctuation">.</span>CryptoJS<span class="token punctuation">.</span><span class="token constant">AES</span><span class="token punctuation">.</span><span class="token function">decrypt</span><span class="token punctuation">(</span>ciphertext<span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">'secret key 123'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">var</span> bytes <span class="token operator">=</span> context<span class="token punctuation">.</span>utils<span class="token punctuation">.</span>CryptoJS<span class="token punctuation">.</span><span class="token constant">AES</span><span class="token punctuation">.</span><span class="token function">decrypt</span><span class="token punctuation">(</span>ciphertext<span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">'secret key 123'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">var</span> decryptedData <span class="token operator">=</span> <span class="token constant">JSON</span><span class="token punctuation">.</span><span class="token function">parse</span><span class="token punctuation">(</span>bytes<span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span>CryptoJS<span class="token punctuation">.</span>enc<span class="token punctuation">.</span>Utf8<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'decryptedData'</span><span class="token punctuation">,</span>decryptedData<span class="token punctuation">)</span><span class="token punctuation">;</span>
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'decryptedData'</span><span class="token punctuation">,</span> decryptedData<span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre>
<h3 id="请求配置-异步处理v1.3.13+支持)">异步处理v1.3.13+支持)</h3>
<p>处理请求参数,或返回数据,可能还会涉及到异步处理,比如 ajax 请求YApi 在 v1.3.13 版本支持了异步处理。</p>
<pre><code class="language-javascript">context<span class="token punctuation">.</span>promise <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Promise</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span>resolve<span class="token punctuation">)</span><span class="token punctuation">{</span>
<span class="token keyword">var</span> api <span class="token operator">=</span> context<span class="token punctuation">.</span>utils<span class="token punctuation">.</span>axios<span class="token punctuation">.</span><span class="token keyword">get</span><span class="token punctuation">(</span><span class="token string">'http://yapi.local.qunar.com:3000/api/user/status'</span><span class="token punctuation">)</span>
api<span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span>result<span class="token punctuation">)</span><span class="token punctuation">{</span>
<span class="token comment">//...</span>
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>result<span class="token punctuation">.</span>data<span class="token punctuation">)</span>
<span class="token function">resolve</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>
<pre><code class="language-javascript">context<span class="token punctuation">.</span>promise <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Promise</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span>resolve<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">var</span> api <span class="token operator">=</span> context<span class="token punctuation">.</span>utils<span class="token punctuation">.</span>axios<span class="token punctuation">.</span><span class="token keyword">get</span><span class="token punctuation">(</span><span class="token string">'http://yapi.local.qunar.com:3000/api/user/status'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
api<span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span>result<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token comment">//...</span>
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>result<span class="token punctuation">.</span>data<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">resolve</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre>
<p>promise 还可以来设置接口延迟</p>
<pre><code class="language-javascript">context<span class="token punctuation">.</span>promise <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Promise</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span>resolve<span class="token punctuation">)</span><span class="token punctuation">{</span>
<span class="token function">setTimeout</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'delay 1000ms'</span><span class="token punctuation">)</span>
<span class="token function">resolve</span><span class="token punctuation">(</span><span class="token string">'ok'</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token number">1000</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>
<pre><code class="language-javascript">context<span class="token punctuation">.</span>promise <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Promise</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span>resolve<span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token function">setTimeout</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'delay 1000ms'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">resolve</span><span class="token punctuation">(</span><span class="token string">'ok'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token number">1000</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre>
<p>使用方法就是在 <code>context</code> 里面添加 <code>promise</code> 参数,并且返回一个 Promise不熟悉 Promise 的童鞋可以查下相关用法ajax 请求可以使用 <code>context.utils.axios</code> 库。</p>
<blockquote>
<p>处理完成后,不要忘记 <code>resolve()</code>,不然会一直处于挂起状态</p>
</blockquote>
<h2 id="token配置">token配置</h2>
<p>每个项目都有唯一的标识token用户可以使用这个token值来请求项目的所有资源数据。目前用到的地方是接口的<a href="./case.html">自动化测试</a>,用户不需要登录就可以访问接口测试结果信息。</p>
<h2 id="token-配置">token 配置</h2>
<p>每个项目都有唯一的标识 token用户可以使用这个 token 值来请求项目的所有资源数据。目前用到的地方是接口的<a href="./case.html">自动化测试</a>,用户不需要登录就可以访问接口测试结果信息。</p>
</div><div class="m-content-container m-paging"><div class="m-paging-prev m-paging-item"><a href="manage.html" class="href"><span class="ui-font-ydoc"></span>权限</a></div><div class="m-paging-next m-paging-item"><a href="api.html" class="href">接口操作<span class="ui-font-ydoc"></span></a></div></div></div></div></div><div><div class="m-mask js-mask">
<div class="container">
<img src="" alt="" class="img js-mask-img" />

View File

@ -195,12 +195,12 @@ window.ydoc_plugin_search_json = {
{
"title": "项目迁移",
"url": "/documents/project.html#项目迁移",
"content": "项目迁移YApi中支持项目迁移到不同的分组中。迁移权限: 只有管理员和该项目的owner有权限对位置进行修改。项目owner主要有创建该项目的人、项目中的组长、创建分组的人、分组中的组长。Tips: owner权限判断的优先级是 项目权限 > 分组权限\n"
"content": "项目迁移YApi 中支持项目迁移到不同的分组中。迁移权限: 只有管理员和该项目的 owner 有权限对位置进行修改。项目 owner 主要有创建该项目的人、项目中的组长、创建分组的人、分组中的组长。Tips: owner 权限判断的优先级是 项目权限 > 分组权限\n"
},
{
"title": "项目拷贝",
"url": "/documents/project.html#项目拷贝",
"content": "项目拷贝该功能在 v1.3.12 版本上线,项目克隆功能可复制项目全部接口到一个新项目,如下图所示,点击红色框里面的 icon 使用。YApi支持项目复制功能但是无法复制项目中的测试集合list。操作 点击下图左上角的复制按钮在弹窗中写入复制项目名称点击确定就可以完成项目复制Tips: 如果你在该分组下有新建项目的权限,那你也同时拥有复制项目的权限\n"
"content": "项目拷贝该功能在 v1.3.12 版本上线,项目克隆功能可复制项目全部接口到一个新项目,如下图所示,点击红色框里面的 icon 使用。YApi 支持项目复制功能,但是无法复制项目中的测试集合 list。操作 点击下图左上角的复制按钮在弹窗中写入复制项目名称点击确定就可以完成项目复制Tips: 如果你在该分组下有新建项目的权限,那你也同时拥有复制项目的权限\n"
},
{
"title": "删除项目",
@ -210,7 +210,7 @@ window.ydoc_plugin_search_json = {
{
"title": "配置环境",
"url": "/documents/project.html#配置环境",
"content": "配置环境环境配置 一项可以添加该项目下接口的实际环境,供 接口测试 使用,这里增加了全局header可以在项目中设置全局header值。在接口运行页面的选择环境select中也增加环境配置弹层。"
"content": "配置环境环境配置 一项可以添加该项目下接口的实际环境,供 接口测试 使用,这里增加了全局 header可以在项目中设置全局 header 值。在接口运行页面的选择环境 select 中也增加环境配置弹层。v1.3.20 新增全局变量,用户可以在环境列表中定义全局变量的名称和值, 接口运行或者测试集合里面可以通过 {{ global.err }} 来访问当前环境变量下定义的全局变量"
},
{
"title": "请求配置",
@ -220,27 +220,27 @@ window.ydoc_plugin_search_json = {
{
"title": "请求参数示例",
"url": "/documents/project.html#请求配置-请求参数示例",
"content": "请求参数示例以 jquery ajax 为例,假设当前的请求参数是{ url: '/api/user?id=1',\n method: 'POST',\n headers: {\n xxx: 'xxx'\n },\n data: {\n type: 1\n }\n}\n那么公共变量 context 包含以下属性context = { pathname: '/api/user',\n query: {\n id: 1\n },\n requestHeader: {\n xxx: 'xxx'\n },\n method: 'POST',\n requestBody: {\n type:1\n }\n}\n假设我们需要在一组接口的 url 上增加一个公共的 token 参数可以写如下自定义脚本context.query.token = context.utils.md5(context.pathname + 'salt');\n"
"content": "请求参数示例以 jquery ajax 为例,假设当前的请求参数是{ url: '/api/user?id=1',\n method: 'POST',\n headers: {\n xxx: 'xxx'\n },\n data: {\n type: 1\n }\n}\n那么公共变量 context 包含以下属性context = { pathname: '/api/user',\n query: {\n id: 1\n },\n requestHeader: {\n xxx: 'xxx'\n },\n method: 'POST',\n requestBody: {\n type:1\n }\n}\n假设我们需要在一组接口的 url 上增加一个公共的 token 参数可以写如下自定义脚本context.query.token = context.utils.md5(context.pathname + 'salt');"
},
{
"title": "返回数据示例",
"url": "/documents/project.html#请求配置-返回数据示例",
"content": "返回数据示例在上面的示例请求完成后,假设返回 responseBody={a:1},公共变量 context 包含以下属性context = { pathname: '/api/user',\n query: {\n id: 1\n },\n requestHeader: {\n xxx: 'xxx'\n },\n method: 'POST',\n requestBody: {\n type:1\n },\n responseData: {\n a:1\n },\n responseHeader: {\n content-type: 'application/json'\n ...\n }\n}\n假设我们需要修改响应数据 responseBody a 的值为 2可以填写如下自定义脚本context.responseBody.a = 2;\nv1.3.16+新增context.href和context.hostname\nv1.3.17+新增context.caseId 测试用例的唯一 key 值\n"
"content": "返回数据示例在上面的示例请求完成后,假设返回 responseBody={a:1},公共变量 context 包含以下属性context = { pathname: '/api/user',\n query: {\n id: 1\n },\n requestHeader: {\n xxx: 'xxx'\n },\n method: 'POST',\n requestBody: {\n type:1\n },\n responseData: {\n a:1\n },\n responseHeader: {\n content-type: 'application/json'\n ...\n }\n}\n假设我们需要修改响应数据 responseBody a 的值为 2可以填写如下自定义脚本context.responseBody.a = 2;v1.3.16+新增context.href context.hostname\nv1.3.17+新增context.caseId 测试用例的唯一 key 值\n"
},
{
"title": "工具函数",
"url": "/documents/project.html#请求配置-工具函数",
"content": "工具函数context.utils = { _ //underscore 函数,详细 API 查看官网 http://underscorejs.org/\n CryptoJS // crypto-jsv1.3.20+新增), 详细用法看 https://github.com/brix/crypto-js\n base64 //转换字符串为 base64 编码\n md5 //转换字符串为 md5 编码\n sha1 //转换字符串为 sha1 编码\n sha224 //转换字符串为 sha224 编码\n sha256 //转换字符串为 sha256 编码\n sha384 //转换字符串为 sha384 编码\n sha512 //转换字符串为 sha512 编码\n unbase64 //转换 base64 编码为字符串 \n axios // axios 库,可用于 api 请求,官网 https://github.com/axios/axios\n}\nCryptoJS 具体用法var data = [{id: 1}, {id: 2}] \n// Encrypt\nvar ciphertext = context.utils.CryptoJS.AES.encrypt(JSON.stringify(data), 'secret key 123');\n\n// Decrypt\nvar bytes = context.utils.CryptoJS.AES.decrypt(ciphertext.toString(), 'secret key 123');\nvar decryptedData = JSON.parse(bytes.toString(CryptoJS.enc.Utf8));\n \nconsole.log('decryptedData',decryptedData);\n"
"content": "工具函数context.utils = { _ //underscore 函数,详细 API 查看官网 http://underscorejs.org/\n CryptoJS // crypto-jsv1.3.20+新增), 详细用法看 https://github.com/brix/crypto-js\n base64 //转换字符串为 base64 编码\n md5 //转换字符串为 md5 编码\n sha1 //转换字符串为 sha1 编码\n sha224 //转换字符串为 sha224 编码\n sha256 //转换字符串为 sha256 编码\n sha384 //转换字符串为 sha384 编码\n sha512 //转换字符串为 sha512 编码\n unbase64 //转换 base64 编码为字符串 \n axios // axios 库,可用于 api 请求,官网 https://github.com/axios/axios\n}\nCryptoJS 具体用法var data = [{ id: 1 }, { id: 2 }];\n// Encrypt\nvar ciphertext = context.utils.CryptoJS.AES.encrypt(JSON.stringify(data), 'secret key 123');\n\n// Decrypt\nvar bytes = context.utils.CryptoJS.AES.decrypt(ciphertext.toString(), 'secret key 123');\nvar decryptedData = JSON.parse(bytes.toString(CryptoJS.enc.Utf8));\n\nconsole.log('decryptedData', decryptedData);\n"
},
{
"title": "异步处理v1.3.13+支持)",
"url": "/documents/project.html#请求配置-异步处理v1.3.13+支持)",
"content": "异步处理v1.3.13+支持)处理请求参数,或返回数据,可能还会涉及到异步处理,比如 ajax 请求YApi 在 v1.3.13 版本支持了异步处理。context.promise = new Promise(function(resolve){ var api = context.utils.axios.get('http://yapi.local.qunar.com:3000/api/user/status')\n api.then(function(result){\n //...\n console.log(result.data)\n resolve()\n })\n\n})\npromise 还可以来设置接口延迟context.promise = new Promise(function(resolve){ setTimeout(function(){\n console.log('delay 1000ms')\n resolve('ok')\n\t}, 1000)\n})\n使用方法就是在 context 里面添加 promise 参数,并且返回一个 Promise不熟悉 Promise 的童鞋可以查下相关用法ajax 请求可以使用 context.utils.axios 库。处理完成后,不要忘记 resolve(),不然会一直处于挂起状态\n"
"content": "异步处理v1.3.13+支持)处理请求参数,或返回数据,可能还会涉及到异步处理,比如 ajax 请求YApi 在 v1.3.13 版本支持了异步处理。context.promise = new Promise(function(resolve) { var api = context.utils.axios.get('http://yapi.local.qunar.com:3000/api/user/status');\n api.then(function(result) {\n //...\n console.log(result.data);\n resolve();\n });\n});\npromise 还可以来设置接口延迟context.promise = new Promise(function(resolve) { setTimeout(function() {\n console.log('delay 1000ms');\n resolve('ok');\n }, 1000);\n});\n使用方法就是在 context 里面添加 promise 参数,并且返回一个 Promise不熟悉 Promise 的童鞋可以查下相关用法ajax 请求可以使用 context.utils.axios 库。处理完成后,不要忘记 resolve(),不然会一直处于挂起状态\n"
},
{
"title": "token配置",
"url": "/documents/project.html#token配置",
"content": "token配置每个项目都有唯一的标识token用户可以使用这个token值来请求项目的所有资源数据。目前用到的地方是接口的自动化测试用户不需要登录就可以访问接口测试结果信息。"
"title": "token 配置",
"url": "/documents/project.html#token-配置",
"content": "token 配置每个项目都有唯一的标识 token用户可以使用这个 token 值来请求项目的所有资源数据。目前用到的地方是接口的自动化测试,用户不需要登录就可以访问接口测试结果信息。"
}
]
},
@ -267,12 +267,12 @@ window.ydoc_plugin_search_json = {
{
"title": "项目迁移",
"url": "/documents/project.html#项目迁移",
"content": "项目迁移YApi中支持项目迁移到不同的分组中。迁移权限: 只有管理员和该项目的owner有权限对位置进行修改。项目owner主要有创建该项目的人、项目中的组长、创建分组的人、分组中的组长。Tips: owner权限判断的优先级是 项目权限 > 分组权限\n"
"content": "项目迁移YApi 中支持项目迁移到不同的分组中。迁移权限: 只有管理员和该项目的 owner 有权限对位置进行修改。项目 owner 主要有创建该项目的人、项目中的组长、创建分组的人、分组中的组长。Tips: owner 权限判断的优先级是 项目权限 > 分组权限\n"
},
{
"title": "项目拷贝",
"url": "/documents/project.html#项目拷贝",
"content": "项目拷贝该功能在 v1.3.12 版本上线,项目克隆功能可复制项目全部接口到一个新项目,如下图所示,点击红色框里面的 icon 使用。YApi支持项目复制功能但是无法复制项目中的测试集合list。操作 点击下图左上角的复制按钮在弹窗中写入复制项目名称点击确定就可以完成项目复制Tips: 如果你在该分组下有新建项目的权限,那你也同时拥有复制项目的权限\n"
"content": "项目拷贝该功能在 v1.3.12 版本上线,项目克隆功能可复制项目全部接口到一个新项目,如下图所示,点击红色框里面的 icon 使用。YApi 支持项目复制功能,但是无法复制项目中的测试集合 list。操作 点击下图左上角的复制按钮在弹窗中写入复制项目名称点击确定就可以完成项目复制Tips: 如果你在该分组下有新建项目的权限,那你也同时拥有复制项目的权限\n"
},
{
"title": "删除项目",
@ -282,7 +282,7 @@ window.ydoc_plugin_search_json = {
{
"title": "配置环境",
"url": "/documents/project.html#配置环境",
"content": "配置环境环境配置 一项可以添加该项目下接口的实际环境,供 接口测试 使用,这里增加了全局header可以在项目中设置全局header值。在接口运行页面的选择环境select中也增加环境配置弹层。"
"content": "配置环境环境配置 一项可以添加该项目下接口的实际环境,供 接口测试 使用,这里增加了全局 header可以在项目中设置全局 header 值。在接口运行页面的选择环境 select 中也增加环境配置弹层。v1.3.20 新增全局变量,用户可以在环境列表中定义全局变量的名称和值, 接口运行或者测试集合里面可以通过 {{ global.err }} 来访问当前环境变量下定义的全局变量"
},
{
"title": "请求配置",
@ -292,27 +292,27 @@ window.ydoc_plugin_search_json = {
{
"title": "请求参数示例",
"url": "/documents/project.html#请求配置-请求参数示例",
"content": "请求参数示例以 jquery ajax 为例,假设当前的请求参数是{ url: '/api/user?id=1',\n method: 'POST',\n headers: {\n xxx: 'xxx'\n },\n data: {\n type: 1\n }\n}\n那么公共变量 context 包含以下属性context = { pathname: '/api/user',\n query: {\n id: 1\n },\n requestHeader: {\n xxx: 'xxx'\n },\n method: 'POST',\n requestBody: {\n type:1\n }\n}\n假设我们需要在一组接口的 url 上增加一个公共的 token 参数可以写如下自定义脚本context.query.token = context.utils.md5(context.pathname + 'salt');\n"
"content": "请求参数示例以 jquery ajax 为例,假设当前的请求参数是{ url: '/api/user?id=1',\n method: 'POST',\n headers: {\n xxx: 'xxx'\n },\n data: {\n type: 1\n }\n}\n那么公共变量 context 包含以下属性context = { pathname: '/api/user',\n query: {\n id: 1\n },\n requestHeader: {\n xxx: 'xxx'\n },\n method: 'POST',\n requestBody: {\n type:1\n }\n}\n假设我们需要在一组接口的 url 上增加一个公共的 token 参数可以写如下自定义脚本context.query.token = context.utils.md5(context.pathname + 'salt');"
},
{
"title": "返回数据示例",
"url": "/documents/project.html#请求配置-返回数据示例",
"content": "返回数据示例在上面的示例请求完成后,假设返回 responseBody={a:1},公共变量 context 包含以下属性context = { pathname: '/api/user',\n query: {\n id: 1\n },\n requestHeader: {\n xxx: 'xxx'\n },\n method: 'POST',\n requestBody: {\n type:1\n },\n responseData: {\n a:1\n },\n responseHeader: {\n content-type: 'application/json'\n ...\n }\n}\n假设我们需要修改响应数据 responseBody a 的值为 2可以填写如下自定义脚本context.responseBody.a = 2;\nv1.3.16+新增context.href和context.hostname\nv1.3.17+新增context.caseId 测试用例的唯一 key 值\n"
"content": "返回数据示例在上面的示例请求完成后,假设返回 responseBody={a:1},公共变量 context 包含以下属性context = { pathname: '/api/user',\n query: {\n id: 1\n },\n requestHeader: {\n xxx: 'xxx'\n },\n method: 'POST',\n requestBody: {\n type:1\n },\n responseData: {\n a:1\n },\n responseHeader: {\n content-type: 'application/json'\n ...\n }\n}\n假设我们需要修改响应数据 responseBody a 的值为 2可以填写如下自定义脚本context.responseBody.a = 2;v1.3.16+新增context.href context.hostname\nv1.3.17+新增context.caseId 测试用例的唯一 key 值\n"
},
{
"title": "工具函数",
"url": "/documents/project.html#请求配置-工具函数",
"content": "工具函数context.utils = { _ //underscore 函数,详细 API 查看官网 http://underscorejs.org/\n CryptoJS // crypto-jsv1.3.20+新增), 详细用法看 https://github.com/brix/crypto-js\n base64 //转换字符串为 base64 编码\n md5 //转换字符串为 md5 编码\n sha1 //转换字符串为 sha1 编码\n sha224 //转换字符串为 sha224 编码\n sha256 //转换字符串为 sha256 编码\n sha384 //转换字符串为 sha384 编码\n sha512 //转换字符串为 sha512 编码\n unbase64 //转换 base64 编码为字符串 \n axios // axios 库,可用于 api 请求,官网 https://github.com/axios/axios\n}\nCryptoJS 具体用法var data = [{id: 1}, {id: 2}] \n// Encrypt\nvar ciphertext = context.utils.CryptoJS.AES.encrypt(JSON.stringify(data), 'secret key 123');\n\n// Decrypt\nvar bytes = context.utils.CryptoJS.AES.decrypt(ciphertext.toString(), 'secret key 123');\nvar decryptedData = JSON.parse(bytes.toString(CryptoJS.enc.Utf8));\n \nconsole.log('decryptedData',decryptedData);\n"
"content": "工具函数context.utils = { _ //underscore 函数,详细 API 查看官网 http://underscorejs.org/\n CryptoJS // crypto-jsv1.3.20+新增), 详细用法看 https://github.com/brix/crypto-js\n base64 //转换字符串为 base64 编码\n md5 //转换字符串为 md5 编码\n sha1 //转换字符串为 sha1 编码\n sha224 //转换字符串为 sha224 编码\n sha256 //转换字符串为 sha256 编码\n sha384 //转换字符串为 sha384 编码\n sha512 //转换字符串为 sha512 编码\n unbase64 //转换 base64 编码为字符串 \n axios // axios 库,可用于 api 请求,官网 https://github.com/axios/axios\n}\nCryptoJS 具体用法var data = [{ id: 1 }, { id: 2 }];\n// Encrypt\nvar ciphertext = context.utils.CryptoJS.AES.encrypt(JSON.stringify(data), 'secret key 123');\n\n// Decrypt\nvar bytes = context.utils.CryptoJS.AES.decrypt(ciphertext.toString(), 'secret key 123');\nvar decryptedData = JSON.parse(bytes.toString(CryptoJS.enc.Utf8));\n\nconsole.log('decryptedData', decryptedData);\n"
},
{
"title": "异步处理v1.3.13+支持)",
"url": "/documents/project.html#请求配置-异步处理v1.3.13+支持)",
"content": "异步处理v1.3.13+支持)处理请求参数,或返回数据,可能还会涉及到异步处理,比如 ajax 请求YApi 在 v1.3.13 版本支持了异步处理。context.promise = new Promise(function(resolve){ var api = context.utils.axios.get('http://yapi.local.qunar.com:3000/api/user/status')\n api.then(function(result){\n //...\n console.log(result.data)\n resolve()\n })\n\n})\npromise 还可以来设置接口延迟context.promise = new Promise(function(resolve){ setTimeout(function(){\n console.log('delay 1000ms')\n resolve('ok')\n\t}, 1000)\n})\n使用方法就是在 context 里面添加 promise 参数,并且返回一个 Promise不熟悉 Promise 的童鞋可以查下相关用法ajax 请求可以使用 context.utils.axios 库。处理完成后,不要忘记 resolve(),不然会一直处于挂起状态\n"
"content": "异步处理v1.3.13+支持)处理请求参数,或返回数据,可能还会涉及到异步处理,比如 ajax 请求YApi 在 v1.3.13 版本支持了异步处理。context.promise = new Promise(function(resolve) { var api = context.utils.axios.get('http://yapi.local.qunar.com:3000/api/user/status');\n api.then(function(result) {\n //...\n console.log(result.data);\n resolve();\n });\n});\npromise 还可以来设置接口延迟context.promise = new Promise(function(resolve) { setTimeout(function() {\n console.log('delay 1000ms');\n resolve('ok');\n }, 1000);\n});\n使用方法就是在 context 里面添加 promise 参数,并且返回一个 Promise不熟悉 Promise 的童鞋可以查下相关用法ajax 请求可以使用 context.utils.axios 库。处理完成后,不要忘记 resolve(),不然会一直处于挂起状态\n"
},
{
"title": "token配置",
"url": "/documents/project.html#token配置",
"content": "token配置每个项目都有唯一的标识token用户可以使用这个token值来请求项目的所有资源数据。目前用到的地方是接口的自动化测试用户不需要登录就可以访问接口测试结果信息。"
"title": "token 配置",
"url": "/documents/project.html#token-配置",
"content": "token 配置每个项目都有唯一的标识 token用户可以使用这个 token 值来请求项目的所有资源数据。目前用到的地方是接口的自动化测试,用户不需要登录就可以访问接口测试结果信息。"
}
]
},

View File

@ -1 +1 @@
window.WEBPACK_ASSETS = {"index.js":{"js":"index@3d2695f16ea6890c1ed7.js","css":"index@3d2695f16ea6890c1ed7.css"},"lib":{"js":"lib.min.js"},"lib2":{"js":"lib2.min.js"},"lib3":{"js":"lib3.min.js"},"manifest":{"js":"manifest.min.js"}}
window.WEBPACK_ASSETS = {"index.js":{"js":"index@874cd2dbf0ee7c7efcb9.js","css":"index@874cd2dbf0ee7c7efcb9.css"},"lib":{"js":"lib@13620124c2e9635aa71b.js"},"lib2":{"js":"lib2@3816abef9866026bd174.js"},"lib3":{"js":"lib3@a3ee1c0b1f37a4c25962.js"},"manifest":{"js":"manifest@f2f4bd774d6c221b3d5f.js"}}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -191,6 +191,15 @@ module.exports = {
loader: 'json-loader'
});
baseConfig.module.preLoaders.push({
test: /\.(gif|jpg|jpeg|png|woff|woff2|eot|ttf|svg)(\?v=.+)?$/,
loader: 'url-loader',
options: {
limit: 20480,
name: ['[path][name].[ext]?[sha256:hash:base64:8]']
}
});
if (this.env == 'prd') {
baseConfig.plugins.push(assetsPluginInstance);
baseConfig.plugins.push(compressPlugin);