Compare commits

...

No commits in common. "master" and "gh-pages" have entirely different histories.

388 changed files with 14497 additions and 12192 deletions

121
.gitignore vendored
View File

@ -1,121 +0,0 @@
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
.python-version
# celery beat schedule file
celerybeat-schedule
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# pycahrm
.idea
# pytest
.pytest_cache

0
.nojekyll Normal file
View File

519
404.html Executable file
View File

@ -0,0 +1,519 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="/assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.1.4">
<title>apiAutoTest手册</title>
<link rel="stylesheet" href="/assets/stylesheets/main.bde7dde4.min.css">
<link rel="stylesheet" href="/assets/stylesheets/palette.ef6f36e2.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
<style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Roboto Mono"}</style>
</head>
<body dir="ltr" data-md-color-scheme="" data-md-color-primary="none" data-md-color-accent="none">
<script>function __prefix(e){return new URL("/",location).pathname+"."+e}function __get(e,t=localStorage){return JSON.parse(t.getItem(__prefix(e)))}</script>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="/." title="apiAutoTest手册" class="md-header__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
apiAutoTest手册
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="/." title="apiAutoTest手册" class="md-nav__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
apiAutoTest手册
</label>
<div class="md-nav__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="/." class="md-nav__link">
介绍
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2" type="checkbox" id="__nav_2" >
<label class="md-nav__link" for="__nav_2">
使用
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="使用" data-md-level="1">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
使用
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="/apiAutoTest/use/" class="md-nav__link">
1. 进行体验
</a>
</li>
<li class="md-nav__item">
<a href="/apiAutoTest/structure/" class="md-nav__link">
2. 目录结构
</a>
</li>
<li class="md-nav__item">
<a href="/apiAutoTest/config/" class="md-nav__link">
3. 配置文件
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_4" type="checkbox" id="__nav_2_4" >
<label class="md-nav__link" for="__nav_2_4">
4. 用例文件
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="4. 用例文件" data-md-level="2">
<label class="md-nav__title" for="__nav_2_4">
<span class="md-nav__icon md-icon"></span>
4. 用例文件
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="/apiAutoTest/case/base/" class="md-nav__link">
4.1 基本介绍
</a>
</li>
<li class="md-nav__item">
<a href="/apiAutoTest/case/header/" class="md-nav__link">
4.2 请求头
</a>
</li>
<li class="md-nav__item">
<a href="/apiAutoTest/case/url/" class="md-nav__link">
4.3 接口地址
</a>
</li>
<li class="md-nav__item">
<a href="/apiAutoTest/case/files/" class="md-nav__link">
4.4 上传文件
</a>
</li>
<li class="md-nav__item">
<a href="/apiAutoTest/case/data/" class="md-nav__link">
4.5 请求数据
</a>
</li>
<li class="md-nav__item">
<a href="/apiAutoTest/case/extra/" class="md-nav__link">
4.6 提取参数
</a>
</li>
<li class="md-nav__item">
<a href="/apiAutoTest/case/sql/" class="md-nav__link">
4.7 后置sql
</a>
</li>
<li class="md-nav__item">
<a href="/apiAutoTest/case/assert/" class="md-nav__link">
4.8 预期结果
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="/apiAutoTest/hooks/" class="md-nav__link">
5. 自定义函数
</a>
</li>
<li class="md-nav__item">
<a href="/apiAutoTest/jenkins/" class="md-nav__link">
6. Jenkins集成
</a>
</li>
<li class="md-nav__item">
<a href="/apiAutoTest/recording/" class="md-nav__link">
7. 接口录制
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="/about/" class="md-nav__link">
关于
</a>
</li>
<li class="md-nav__item">
<a href="/change/" class="md-nav__link">
更新日志
</a>
</li>
<li class="md-nav__item">
<a href="/license/" class="md-nav__link">
开源协议
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1>404 - Not found</h1>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "/", "features": [], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "/assets/javascripts/workers/search.4fa0e4ee.min.js", "version": null}</script>
<script src="/assets/javascripts/bundle.1d3bfcf1.min.js"></script>
</body>
</html>

21
LICENSE
View File

@ -1,21 +0,0 @@
MIT License
Copyright (c) 2020 zy7y
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -1,83 +0,0 @@
![](https://img.shields.io/github/license/zy7y/apiAutoTest)
![](https://img.shields.io/github/stars/zy7y/apiAutoTest)
![](https://img.shields.io/github/forks/zy7y/apiAutoTest)
> 使用Python为语言工具 + Python第三方库 实现的接口自动化测试工具
[![IsXMnO.png](https://z3.ax1x.com/2021/11/13/IsXMnO.png)](https://imgtu.com/i/IsXMnO)
## 配套资源(点击即可跳转)
- [x] [使用手册](https://zy7y.github.io/apiAutoTest)
- [x] [视频解析](https://www.bilibili.com/video/BV1rr4y1r754)
- [x] [国内Gitee](https://gitee.com/zy7y/apiAutoTest)
## 实现功能
- 测试数据隔离: 测试前后进行数据库备份/还原
- 接口直接的数据依赖: 需要B接口使用A接口响应中的某个字段作为参数
- 对接数据库: 讲数据库的查询结果可直接用于断言操作
- 动态多断言: 可(多个)动态提取实际预期结果与指定的预期结果进行比较断言操作
- 自定义扩展方法: 在用例中使用自定义方法(如:获取当前时间戳...)的返回值
- 邮件发送将allure报告压缩后已附件形式发送
- 接口录制录制指定包含url的接口,生成用例数据
## 依赖库
```
allure-pytest==2.8.17 # allure报告
jsonpath==0.82 # json解析库
loguru==0.5.1 # 日志库
pytest==6.0.1 # 参数化
PyYAML==5.3.1 # 读取ymal
requests==2.24.0 # 请求HTTP/HTTPS
xlrd==1.2.0 # 读取excel
yagmail==0.11.224 # 发送邮件
PyMySQL==0.10.1 # 连接mysql数据库
pytest-rerunfailures==9.1.1 # 用例失败重跑
paramiko==2.7.2 # SSH2 连接
xlwt==1.3.0 # 写excel 用例文件
mitmproxy==6.0.2 # 抓包工具
```
## 目录结构
```shell
├─api
│ └─client.py # 请求封装
├─backup_sqls
│ └─xxx.sql # 数据库备份文件
├─config
│ └─config.yaml # 配置文件
├─data
│ └─test_data.xlsx # 用例文件
├─log
│ └─run...x.log # 日志文件
├─report
│ ├─data
│ └─html # allure报告
├─test
│ ├─conftest.py # 依赖对象初始化
│ └─test_api.py # 测试文件
├─tools # 工具包
│ ├─__init__.py # 常用方法封装
│ ├─data_clearing.py # 数据隔离
│ ├─data_process.py # 依赖数据处理
│ ├─db.py # 数据库连接对象
│ ├─hooks.py # 自定义扩展方法(可用于用例)文件
│ ├─read_file.py # 用例、配置项读取
│ ├─recording.py # 接口录制,写入用例文件
│ └─send_email.py # 邮件发送、报告压缩
├─项目实战接口文档.md # 配套项目相关接口文档
├─requirements.txt # 项目依赖库文件
└─run.py # 主启动文件
```
## 接口服务
服务提供者https://space.bilibili.com/283273603?spm_id_from=333.788.b_636f6d6d656e74.6
## Jenkins集成
https://www.cnblogs.com/zy7y/p/13448102.html
## 视频
version1.0 版本-B站https://www.bilibili.com/video/BV1pv411i7zK/
master版本-B站: https://www.bilibili.com/video/BV1rr4y1r754

683
about/index.html Executable file
View File

@ -0,0 +1,683 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.1.4">
<title>关于 - apiAutoTest手册</title>
<link rel="stylesheet" href="../assets/stylesheets/main.bde7dde4.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.ef6f36e2.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
<style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Roboto Mono"}</style>
</head>
<body dir="ltr" data-md-color-scheme="" data-md-color-primary="none" data-md-color-accent="none">
<script>function __prefix(e){return new URL("..",location).pathname+"."+e}function __get(e,t=localStorage){return JSON.parse(t.getItem(__prefix(e)))}</script>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#_1" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href=".." title="apiAutoTest手册" class="md-header__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
apiAutoTest手册
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
关于
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href=".." title="apiAutoTest手册" class="md-nav__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
apiAutoTest手册
</label>
<div class="md-nav__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." class="md-nav__link">
介绍
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2" type="checkbox" id="__nav_2" >
<label class="md-nav__link" for="__nav_2">
使用
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="使用" data-md-level="1">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
使用
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../apiAutoTest/use/" class="md-nav__link">
1. 进行体验
</a>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/structure/" class="md-nav__link">
2. 目录结构
</a>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/config/" class="md-nav__link">
3. 配置文件
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_4" type="checkbox" id="__nav_2_4" >
<label class="md-nav__link" for="__nav_2_4">
4. 用例文件
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="4. 用例文件" data-md-level="2">
<label class="md-nav__title" for="__nav_2_4">
<span class="md-nav__icon md-icon"></span>
4. 用例文件
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../apiAutoTest/case/base/" class="md-nav__link">
4.1 基本介绍
</a>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/case/header/" class="md-nav__link">
4.2 请求头
</a>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/case/url/" class="md-nav__link">
4.3 接口地址
</a>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/case/files/" class="md-nav__link">
4.4 上传文件
</a>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/case/data/" class="md-nav__link">
4.5 请求数据
</a>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/case/extra/" class="md-nav__link">
4.6 提取参数
</a>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/case/sql/" class="md-nav__link">
4.7 后置sql
</a>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/case/assert/" class="md-nav__link">
4.8 预期结果
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/hooks/" class="md-nav__link">
5. 自定义函数
</a>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/jenkins/" class="md-nav__link">
6. Jenkins集成
</a>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/recording/" class="md-nav__link">
7. 接口录制
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
关于
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
关于
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
本项目资源
</a>
</li>
<li class="md-nav__item">
<a href="#_2" class="md-nav__link">
其他项目
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../change/" class="md-nav__link">
更新日志
</a>
</li>
<li class="md-nav__item">
<a href="../license/" class="md-nav__link">
开源协议
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
本项目资源
</a>
</li>
<li class="md-nav__item">
<a href="#_2" class="md-nav__link">
其他项目
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/zy7y/apiAutoTest/edit/master/docs/about.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
</a>
<h1>关于</h1>
<h2 id="_1">本项目资源<a class="headerlink" href="#_1" title="Permanent link">&para;</a></h2>
<details class="success" open="open"><summary>B站视频解析</summary><ul class="task-list">
<li class="task-list-item"><input type="checkbox" disabled checked/> <a href="https://www.bilibili.com/video/BV1rr4y1r754">master 分支 当下最新版本代码的解析视频</a></li>
<li class="task-list-item"><input type="checkbox" disabled checked/> <a href="https://www.bilibili.com/video/BV1pv411i7zK">version1.0 分支 2020年8月 最初版本的解析视频</a></li>
</ul>
</details>
<details class="success" open="open"><summary>源码获取</summary><ul class="task-list">
<li class="task-list-item"><input type="checkbox" disabled checked/> <a href="https://gitee.com/zy7y/apiAutoTest">Gitee 代码最新</a></li>
<li class="task-list-item"><input type="checkbox" disabled checked/> <a href="https://github.com/zy7y/apiAutoTest">GitHub</a> </li>
</ul>
</details>
<details class="success" open="open"><summary>前置环境</summary><ul class="task-list">
<li class="task-list-item"><input type="checkbox" disabled checked/> jdk 链接:<a href="https://pan.baidu.com/s/1q9TIbHoOKIvoZMv1m7WA-g">https://pan.baidu.com/s/1q9TIbHoOKIvoZMv1m7WA-g</a>
提取码2fbs </li>
<li class="task-list-item"><input type="checkbox" disabled checked/> allure 链接:<a href="https://pan.baidu.com/s/1Tut7BDsusgChhA41ZSkrkg">https://pan.baidu.com/s/1Tut7BDsusgChhA41ZSkrkg</a>
提取码tlei</li>
</ul>
</details>
<details class="faq" open="open"><summary>联系</summary><ul class="task-list">
<li class="task-list-item"><input type="checkbox" disabled checked/> 测试交流QQ群: 930902996</li>
<li class="task-list-item"><input type="checkbox" disabled checked/> 博客园:<a href="https://cnblogs.com/zy7y">https://cnblogs.com/zy7y</a></li>
<li class="task-list-item"><input type="checkbox" disabled checked/> B站<a href="https://space.bilibili.com/438858333">https://space.bilibili.com/438858333</a></li>
</ul>
</details>
<h2 id="_2">其他项目<a class="headerlink" href="#_2" title="Permanent link">&para;</a></h2>
<details class="tip" open="open"><summary>watch-fastapi前后端分离</summary><p><img alt="" src="https://img.shields.io/github/license/zy7y/watch-fastapi" />
<img alt="" src="https://img.shields.io/github/stars/zy7y/watch-fastapi" />
<img alt="" src="https://img.shields.io/github/forks/zy7y/watch-fastapi" /><br />
FastAPI + Vue3 + ElementPlus + Vite2 + Vue-Router + Vuex 翻抄的<a href="https://helloflask.com/book/3/">HelloFlask</a>一书中的实战项目 </p>
<div class="admonition abstract">
<p class="admonition-title">配套资源</p>
<p><a href="https://github.com/zy7y/watch-fastapi">Gtihub</a> | <a href="https://gitee.com/zy7y/watch-fastapi">Gitee</a> | <a href="https://www.bilibili.com/video/BV1Ef4y177My">B站教程</a></p>
</div>
</details>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer">
<a href="../apiAutoTest/recording/" class="md-footer__link md-footer__link--prev" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</div>
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Previous
</span>
7. 接口录制
</div>
</div>
</a>
<a href="../change/" class="md-footer__link md-footer__link--next" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Next
</span>
更新日志
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": [], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../assets/javascripts/workers/search.4fa0e4ee.min.js", "version": null}</script>
<script src="../assets/javascripts/bundle.1d3bfcf1.min.js"></script>
</body>
</html>

View File

@ -1,10 +0,0 @@
#!/usr/bin/env/python3
# -*- coding:utf-8 -*-
"""
@project: apiAutoTest
@author: zy7y
@file: __init__.py.py
@ide: PyCharm
@time: 2020/7/31
"""
from .base_requests import BaseRequest

View File

@ -1,102 +0,0 @@
#!/usr/bin/env/python3
# -*- coding:utf-8 -*-
"""
@project: apiAutoTest
@author: zy7y
@file: base_requests.py
@ide: PyCharm
@time: 2020/7/31
"""
import requests
from tools import allure_step, allure_title, logger, allure_step_no
from tools.data_process import DataProcess
class BaseRequest(object):
session = None
@classmethod
def get_session(cls):
"""
单例模式保证测试过程中使用的都是一个session对象
:return:
"""
if cls.session is None:
cls.session = requests.Session()
return cls.session
@classmethod
def send_request(cls, case: list, env: str = 'dev') -> object:
"""处理case数据转换成可用数据发送请求
:param case: 读取出来的每一行用例内容可进行解包
:param env: 环境名称 默认使用config.yaml server下的 dev 后面的基准地址
return: 响应结果 预期结果
"""
case_number, case_title, header, path, method, parametric_key, file_obj, data, extra, sql, expect = case
logger.debug(
f"用例进行处理前数据: \n 接口路径: {path} \n 请求参数: {data} \n 提取参数: {extra} \n 后置sql: {sql} \n 预期结果: {expect} \n ")
# allure报告 用例标题
allure_title(case_title)
# 处理url、header、data、file、的前置方法
url = DataProcess.handle_path(path, env)
header = DataProcess.handle_header(header)
data = DataProcess.handle_data(data)
allure_step('请求数据', data)
file = DataProcess.handler_files(file_obj)
# 发送请求
response = cls.send_api(url, method, parametric_key, header, data, file)
# 提取参数
DataProcess.handle_extra(extra, response)
return response, expect, sql
@classmethod
def send_api(
cls,
url,
method,
parametric_key,
header=None,
data=None,
file=None) -> dict:
"""
:param method: 请求方法
:param url: 请求url
:param parametric_key: 入参关键字 params(查询参数类型明文传输一般在url?参数名=参数值), data(一般用于form表单类型参数)
json(一般用于json类型请求参数)
:param data: 参数数据默认等于None
:param file: 文件对象
:param header: 请求头
:return: 返回res对象
"""
session = cls.get_session()
if parametric_key == 'params':
res = session.request(
method=method,
url=url,
params=data,
headers=header)
elif parametric_key == 'data':
res = session.request(
method=method,
url=url,
data=data,
files=file,
headers=header)
elif parametric_key == 'json':
res = session.request(
method=method,
url=url,
json=data,
files=file,
headers=header)
else:
raise ValueError(
'可选关键字为params, json, data')
response = res.json()
logger.info(
f'\n最终请求地址:{res.url}\n请求方法:{method}\n请求头:{header}\n请求参数:{data}\n上传文件:{file}\n响应数据:{response}')
allure_step_no(f'响应耗时(s): {res.elapsed.total_seconds()}')
allure_step('响应结果', response)
return response

View File

@ -0,0 +1,720 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="../../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.1.4">
<title>4.8 预期结果 - apiAutoTest手册</title>
<link rel="stylesheet" href="../../../assets/stylesheets/main.bde7dde4.min.css">
<link rel="stylesheet" href="../../../assets/stylesheets/palette.ef6f36e2.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
<style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Roboto Mono"}</style>
</head>
<body dir="ltr" data-md-color-scheme="" data-md-color-primary="none" data-md-color-accent="none">
<script>function __prefix(e){return new URL("../../..",location).pathname+"."+e}function __get(e,t=localStorage){return JSON.parse(t.getItem(__prefix(e)))}</script>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#_1" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../../.." title="apiAutoTest手册" class="md-header__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
apiAutoTest手册
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
4.8 预期结果
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../../.." title="apiAutoTest手册" class="md-nav__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
apiAutoTest手册
</label>
<div class="md-nav__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../.." class="md-nav__link">
介绍
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2" type="checkbox" id="__nav_2" checked>
<label class="md-nav__link" for="__nav_2">
使用
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="使用" data-md-level="1">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
使用
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../use/" class="md-nav__link">
1. 进行体验
</a>
</li>
<li class="md-nav__item">
<a href="../../structure/" class="md-nav__link">
2. 目录结构
</a>
</li>
<li class="md-nav__item">
<a href="../../config/" class="md-nav__link">
3. 配置文件
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_4" type="checkbox" id="__nav_2_4" checked>
<label class="md-nav__link" for="__nav_2_4">
4. 用例文件
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="4. 用例文件" data-md-level="2">
<label class="md-nav__title" for="__nav_2_4">
<span class="md-nav__icon md-icon"></span>
4. 用例文件
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../base/" class="md-nav__link">
4.1 基本介绍
</a>
</li>
<li class="md-nav__item">
<a href="../header/" class="md-nav__link">
4.2 请求头
</a>
</li>
<li class="md-nav__item">
<a href="../url/" class="md-nav__link">
4.3 接口地址
</a>
</li>
<li class="md-nav__item">
<a href="../files/" class="md-nav__link">
4.4 上传文件
</a>
</li>
<li class="md-nav__item">
<a href="../data/" class="md-nav__link">
4.5 请求数据
</a>
</li>
<li class="md-nav__item">
<a href="../extra/" class="md-nav__link">
4.6 提取参数
</a>
</li>
<li class="md-nav__item">
<a href="../sql/" class="md-nav__link">
4.7 后置sql
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
4.8 预期结果
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
4.8 预期结果
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
机制
</a>
</li>
<li class="md-nav__item">
<a href="#_2" class="md-nav__link">
示例
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../hooks/" class="md-nav__link">
5. 自定义函数
</a>
</li>
<li class="md-nav__item">
<a href="../../jenkins/" class="md-nav__link">
6. Jenkins集成
</a>
</li>
<li class="md-nav__item">
<a href="../../recording/" class="md-nav__link">
7. 接口录制
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../../about/" class="md-nav__link">
关于
</a>
</li>
<li class="md-nav__item">
<a href="../../../change/" class="md-nav__link">
更新日志
</a>
</li>
<li class="md-nav__item">
<a href="../../../license/" class="md-nav__link">
开源协议
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
机制
</a>
</li>
<li class="md-nav__item">
<a href="#_2" class="md-nav__link">
示例
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/zy7y/apiAutoTest/edit/master/docs/apiAutoTest/case/assert.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
</a>
<h1>4.8 预期结果</h1>
<h2 id="_1">机制<a class="headerlink" href="#_1" title="Permanent link">&para;</a></h2>
<blockquote>
<p>绝对相等的断言形式, 多个断言时,一个断言不通过则该用例不通过</p>
<p>实际结果可动态从当强响应中提取, 预期结果可以使用<code>${}</code>语法</p>
</blockquote>
<h2 id="_2">示例<a class="headerlink" href="#_2" title="Permanent link">&para;</a></h2>
<table>
<thead>
<tr>
<th>用例编号</th>
<th>用例标题</th>
<th>请求头</th>
<th>路径</th>
<th>是否执行</th>
<th>请求方式</th>
<th>入参关键字</th>
<th>上传文件</th>
<th>请求数据</th>
<th>提取参数</th>
<th>后置SQL</th>
<th>预期结果</th>
</tr>
</thead>
<tbody>
<tr>
<td>c1</td>
<td>get登录</td>
<td></td>
<td>login</td>
<td></td>
<td>get</td>
<td>params</td>
<td></td>
<td>{"username": "admin", "password": ""}</td>
<td>{"msg":"$.meta.msg"}</td>
<td>select * from apis; select * from cases</td>
<td>{"$.meta.status":400}</td>
</tr>
</tbody>
</table>
<p><mark><strong>上述接口正常请求,且返回,响应大致如下:</strong></mark>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="nt">&quot;data&quot;</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
<span class="nt">&quot;meta&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="nt">&quot;msg&quot;</span><span class="p">:</span> <span class="s2">&quot;参数错误&quot;</span><span class="p">,</span>
<span class="nt">&quot;status&quot;</span><span class="p">:</span> <span class="mi">400</span>
<span class="p">}</span>
<span class="p">}</span>
</code></pre></div>
<mark><strong>预期结果内容如下:</strong></mark>
<div class="highlight"><pre><span></span><code><span class="p">{</span><span class="nt">&quot;$.meta.code&quot;</span><span class="p">:</span> <span class="mi">400</span><span class="p">}</span>
</code></pre></div></p>
<blockquote>
<p><code>$.meta.code</code> 为实际结果,从当前响应提取得到结果为: 400</p>
<p>上述<code>$.meta.code</code>的value <code>400</code> 为预期结果</p>
</blockquote>
<p><mark><strong>对应断言结果为:</strong></mark>
<div class="highlight"><pre><span></span><code>&quot;实际结果:400 = 预期结果:400&quot;
</code></pre></div>
<img alt="" src="../../../img/assert.png" /></p>
<p><mark><strong>多断言示例:</strong></mark>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="nt">&quot;$.meta.status&quot;</span><span class="p">:</span><span class="mi">400</span><span class="p">,</span>
<span class="nt">&quot;$.meata.msg&quot;</span><span class="p">:</span><span class="s2">&quot;登录成功&quot;</span>
<span class="p">}</span>
</code></pre></div>
<img alt="" src="../../../img/fail.png" /></p>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer">
<a href="../sql/" class="md-footer__link md-footer__link--prev" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</div>
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Previous
</span>
4.7 后置sql
</div>
</div>
</a>
<a href="../../hooks/" class="md-footer__link md-footer__link--next" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Next
</span>
5. 自定义函数
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../../..", "features": [], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../../../assets/javascripts/workers/search.4fa0e4ee.min.js", "version": null}</script>
<script src="../../../assets/javascripts/bundle.1d3bfcf1.min.js"></script>
</body>
</html>

736
apiAutoTest/case/base/index.html Executable file
View File

@ -0,0 +1,736 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="../../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.1.4">
<title>4.1 基本介绍 - apiAutoTest手册</title>
<link rel="stylesheet" href="../../../assets/stylesheets/main.bde7dde4.min.css">
<link rel="stylesheet" href="../../../assets/stylesheets/palette.ef6f36e2.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
<style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Roboto Mono"}</style>
</head>
<body dir="ltr" data-md-color-scheme="" data-md-color-primary="none" data-md-color-accent="none">
<script>function __prefix(e){return new URL("../../..",location).pathname+"."+e}function __get(e,t=localStorage){return JSON.parse(t.getItem(__prefix(e)))}</script>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#_1" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../../.." title="apiAutoTest手册" class="md-header__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
apiAutoTest手册
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
4.1 基本介绍
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../../.." title="apiAutoTest手册" class="md-nav__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
apiAutoTest手册
</label>
<div class="md-nav__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../.." class="md-nav__link">
介绍
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2" type="checkbox" id="__nav_2" checked>
<label class="md-nav__link" for="__nav_2">
使用
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="使用" data-md-level="1">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
使用
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../use/" class="md-nav__link">
1. 进行体验
</a>
</li>
<li class="md-nav__item">
<a href="../../structure/" class="md-nav__link">
2. 目录结构
</a>
</li>
<li class="md-nav__item">
<a href="../../config/" class="md-nav__link">
3. 配置文件
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_4" type="checkbox" id="__nav_2_4" checked>
<label class="md-nav__link" for="__nav_2_4">
4. 用例文件
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="4. 用例文件" data-md-level="2">
<label class="md-nav__title" for="__nav_2_4">
<span class="md-nav__icon md-icon"></span>
4. 用例文件
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
4.1 基本介绍
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
4.1 基本介绍
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
用例一览
</a>
</li>
<li class="md-nav__item">
<a href="#_2" class="md-nav__link">
用例编号
</a>
</li>
<li class="md-nav__item">
<a href="#_3" class="md-nav__link">
用例标题
</a>
</li>
<li class="md-nav__item">
<a href="#_4" class="md-nav__link">
是否执行
</a>
</li>
<li class="md-nav__item">
<a href="#_5" class="md-nav__link">
请求方式
</a>
</li>
<li class="md-nav__item">
<a href="#_6" class="md-nav__link">
入参关键字
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../header/" class="md-nav__link">
4.2 请求头
</a>
</li>
<li class="md-nav__item">
<a href="../url/" class="md-nav__link">
4.3 接口地址
</a>
</li>
<li class="md-nav__item">
<a href="../files/" class="md-nav__link">
4.4 上传文件
</a>
</li>
<li class="md-nav__item">
<a href="../data/" class="md-nav__link">
4.5 请求数据
</a>
</li>
<li class="md-nav__item">
<a href="../extra/" class="md-nav__link">
4.6 提取参数
</a>
</li>
<li class="md-nav__item">
<a href="../sql/" class="md-nav__link">
4.7 后置sql
</a>
</li>
<li class="md-nav__item">
<a href="../assert/" class="md-nav__link">
4.8 预期结果
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../hooks/" class="md-nav__link">
5. 自定义函数
</a>
</li>
<li class="md-nav__item">
<a href="../../jenkins/" class="md-nav__link">
6. Jenkins集成
</a>
</li>
<li class="md-nav__item">
<a href="../../recording/" class="md-nav__link">
7. 接口录制
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../../about/" class="md-nav__link">
关于
</a>
</li>
<li class="md-nav__item">
<a href="../../../change/" class="md-nav__link">
更新日志
</a>
</li>
<li class="md-nav__item">
<a href="../../../license/" class="md-nav__link">
开源协议
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
用例一览
</a>
</li>
<li class="md-nav__item">
<a href="#_2" class="md-nav__link">
用例编号
</a>
</li>
<li class="md-nav__item">
<a href="#_3" class="md-nav__link">
用例标题
</a>
</li>
<li class="md-nav__item">
<a href="#_4" class="md-nav__link">
是否执行
</a>
</li>
<li class="md-nav__item">
<a href="#_5" class="md-nav__link">
请求方式
</a>
</li>
<li class="md-nav__item">
<a href="#_6" class="md-nav__link">
入参关键字
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/zy7y/apiAutoTest/edit/master/docs/apiAutoTest/case/base.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
</a>
<h1>4.1 基本介绍</h1>
<h2 id="_1">用例一览<a class="headerlink" href="#_1" title="Permanent link">&para;</a></h2>
<p><img alt="用例" src="../../../img/cases.png" />
<mark><strong>若看不清,请自行打开<code>data/case_data.xls</code></strong></mark></p>
<h2 id="_2">用例编号<a class="headerlink" href="#_2" title="Permanent link">&para;</a></h2>
<blockquote>
<p>用例编号, 与功能测试用例一致只是个用例编号</p>
</blockquote>
<h2 id="_3">用例标题<a class="headerlink" href="#_3" title="Permanent link">&para;</a></h2>
<blockquote>
<p>用例标题,简述该用例做的事情,将体现在<code>allure报告</code></p>
</blockquote>
<h2 id="_4">是否执行<a class="headerlink" href="#_4" title="Permanent link">&para;</a></h2>
<blockquote>
<p>当其为<code></code>时,该用例不会被运行</p>
</blockquote>
<h2 id="_5">请求方式<a class="headerlink" href="#_5" title="Permanent link">&para;</a></h2>
<div class="highlight"><pre><span></span><code>1. get
2. post
3. put
4. delete
...
</code></pre></div>
<h2 id="_6">入参关键字<a class="headerlink" href="#_6" title="Permanent link">&para;</a></h2>
<div class="highlight"><pre><span></span><code>1. params类似这种url?参数名=参数值&amp;参数名1=参数值1
2. data请求头content-type是from表单类型。
3. json请求头content-typeapplication/json。
</code></pre></div>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer">
<a href="../../config/" class="md-footer__link md-footer__link--prev" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</div>
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Previous
</span>
3. 配置文件
</div>
</div>
</a>
<a href="../header/" class="md-footer__link md-footer__link--next" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Next
</span>
4.2 请求头
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../../..", "features": [], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../../../assets/javascripts/workers/search.4fa0e4ee.min.js", "version": null}</script>
<script src="../../../assets/javascripts/bundle.1d3bfcf1.min.js"></script>
</body>
</html>

893
apiAutoTest/case/data/index.html Executable file
View File

@ -0,0 +1,893 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="../../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.1.4">
<title>4.5 请求数据 - apiAutoTest手册</title>
<link rel="stylesheet" href="../../../assets/stylesheets/main.bde7dde4.min.css">
<link rel="stylesheet" href="../../../assets/stylesheets/palette.ef6f36e2.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
<style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Roboto Mono"}</style>
</head>
<body dir="ltr" data-md-color-scheme="" data-md-color-primary="none" data-md-color-accent="none">
<script>function __prefix(e){return new URL("../../..",location).pathname+"."+e}function __get(e,t=localStorage){return JSON.parse(t.getItem(__prefix(e)))}</script>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#_1" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../../.." title="apiAutoTest手册" class="md-header__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
apiAutoTest手册
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
4.5 请求数据
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../../.." title="apiAutoTest手册" class="md-nav__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
apiAutoTest手册
</label>
<div class="md-nav__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../.." class="md-nav__link">
介绍
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2" type="checkbox" id="__nav_2" checked>
<label class="md-nav__link" for="__nav_2">
使用
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="使用" data-md-level="1">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
使用
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../use/" class="md-nav__link">
1. 进行体验
</a>
</li>
<li class="md-nav__item">
<a href="../../structure/" class="md-nav__link">
2. 目录结构
</a>
</li>
<li class="md-nav__item">
<a href="../../config/" class="md-nav__link">
3. 配置文件
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_4" type="checkbox" id="__nav_2_4" checked>
<label class="md-nav__link" for="__nav_2_4">
4. 用例文件
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="4. 用例文件" data-md-level="2">
<label class="md-nav__title" for="__nav_2_4">
<span class="md-nav__icon md-icon"></span>
4. 用例文件
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../base/" class="md-nav__link">
4.1 基本介绍
</a>
</li>
<li class="md-nav__item">
<a href="../header/" class="md-nav__link">
4.2 请求头
</a>
</li>
<li class="md-nav__item">
<a href="../url/" class="md-nav__link">
4.3 接口地址
</a>
</li>
<li class="md-nav__item">
<a href="../files/" class="md-nav__link">
4.4 上传文件
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
4.5 请求数据
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
4.5 请求数据
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
示例
</a>
<nav class="md-nav" aria-label="示例">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#_2" class="md-nav__link">
不使用自定义方法&amp;参数变量
</a>
</li>
<li class="md-nav__item">
<a href="#_3" class="md-nav__link">
使用参数变量
</a>
</li>
<li class="md-nav__item">
<a href="#_4" class="md-nav__link">
使用自定义方法
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../extra/" class="md-nav__link">
4.6 提取参数
</a>
</li>
<li class="md-nav__item">
<a href="../sql/" class="md-nav__link">
4.7 后置sql
</a>
</li>
<li class="md-nav__item">
<a href="../assert/" class="md-nav__link">
4.8 预期结果
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../hooks/" class="md-nav__link">
5. 自定义函数
</a>
</li>
<li class="md-nav__item">
<a href="../../jenkins/" class="md-nav__link">
6. Jenkins集成
</a>
</li>
<li class="md-nav__item">
<a href="../../recording/" class="md-nav__link">
7. 接口录制
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../../about/" class="md-nav__link">
关于
</a>
</li>
<li class="md-nav__item">
<a href="../../../change/" class="md-nav__link">
更新日志
</a>
</li>
<li class="md-nav__item">
<a href="../../../license/" class="md-nav__link">
开源协议
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
示例
</a>
<nav class="md-nav" aria-label="示例">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#_2" class="md-nav__link">
不使用自定义方法&amp;参数变量
</a>
</li>
<li class="md-nav__item">
<a href="#_3" class="md-nav__link">
使用参数变量
</a>
</li>
<li class="md-nav__item">
<a href="#_4" class="md-nav__link">
使用自定义方法
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/zy7y/apiAutoTest/edit/master/docs/apiAutoTest/case/data.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
</a>
<h1>4.5 请求数据</h1>
<div class="admonition note">
<p class="admonition-title">前置处理</p>
<div class="admonition tip">
<p class="admonition-title">使用变量</p>
<p>来源: <code>响应提取</code><code>后置SQL结果</code><br />
使用<code>$变量名</code> 或者 <code>${变量名}</code>的方式来引用变量</p>
</div>
<div class="admonition tip">
<p class="admonition-title">使用函数</p>
<p>来源:<code>tools/hooks.py</code> 定义的函数<br />
调用无参方法:<code>${方法名()}</code><br />
调用有参方法:<code>${方法名(参数)}</code></p>
</div>
<p>经过上面两道工序处理之后,返回的<code>data</code>被转为<code>dict</code></p>
</div>
<div class="admonition tip">
<p class="admonition-title">类json</p>
<p>类似json/dict的写法自己的简单叫法不要被误导有时候我们的请求数据可能需要这样<br />
<div class="highlight"><pre><span></span><code><span class="p">{</span><span class="nt">&quot;username&quot;</span><span class="p">:</span> <span class="s2">&quot;tery&quot;</span><span class="p">,</span><span class="nt">&quot;password&quot;</span><span class="p">:</span> <span class="err">$</span><span class="p">{</span><span class="err">ge</span><span class="kc">t</span><span class="err">_curre</span><span class="kc">nt</span><span class="err">_highes</span><span class="kc">t</span><span class="err">()</span><span class="p">}}</span>
</code></pre></div></p>
<div class="admonition note">
<p class="admonition-title">解析</p>
<p>此处其实使用了<code>${}</code>自定义函数,有个返回值, 这种写法明显是<code>不符合json/dict</code>格式的<br />
但在最终发起请求前, 这些数据会被转成符合格式的json/dict类型数据</p>
</div>
</div>
<h2 id="_1">示例<a class="headerlink" href="#_1" title="Permanent link">&para;</a></h2>
<h3 id="_2">不使用自定义方法&amp;参数变量<a class="headerlink" href="#_2" title="Permanent link">&para;</a></h3>
<table>
<thead>
<tr>
<th>用例编号</th>
<th>用例标题</th>
<th>请求头</th>
<th>路径</th>
<th>是否执行</th>
<th>请求方式</th>
<th>入参关键字</th>
<th>上传文件</th>
<th>请求数据</th>
<th>提取参数</th>
<th>后置SQL</th>
<th>预期结果</th>
</tr>
</thead>
<tbody>
<tr>
<td>c2</td>
<td>登录</td>
<td></td>
<td>login</td>
<td></td>
<td>post</td>
<td>data</td>
<td></td>
<td>{"username": "admin", "password": "123456"}</td>
<td>{"msg":"$.meta.msg"}</td>
<td></td>
<td>{"$.meta.status":400}</td>
</tr>
</tbody>
</table>
<h3 id="_3">使用参数变量<a class="headerlink" href="#_3" title="Permanent link">&para;</a></h3>
<table>
<thead>
<tr>
<th>用例编号</th>
<th>用例标题</th>
<th>请求头</th>
<th>路径</th>
<th>是否执行</th>
<th>请求方式</th>
<th>入参关键字</th>
<th>上传文件</th>
<th>请求数据</th>
<th>提取参数</th>
<th>后置SQL</th>
<th>预期结果</th>
</tr>
</thead>
<tbody>
<tr>
<td>c3</td>
<td>登录</td>
<td></td>
<td>login</td>
<td></td>
<td>post</td>
<td>data</td>
<td></td>
<td>{"username": "admin", "password": "${password}", "age": $age}</td>
<td>{"msg":"$.meta.msg"}</td>
<td></td>
<td>{"$.meta.status":400}</td>
</tr>
</tbody>
</table>
<div class="admonition success">
<p class="admonition-title">设:变量池</p>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="nt">&quot;password&quot;</span><span class="p">:</span> <span class="mi">123456</span><span class="p">,</span>
<span class="nt">&quot;age&quot;</span><span class="p">:</span> <span class="mi">18</span>
<span class="p">}</span>
</code></pre></div>
</div>
<div class="admonition note">
<p class="admonition-title">解析过程</p>
<p><code>${password}</code> -&gt; <code>变量池["password"]</code> -&gt; <code>123456</code><br />
<code>$age</code> -&gt; <code>变量池["age"]</code> -&gt; <code>18</code></p>
</div>
<div class="admonition tip">
<p class="admonition-title">则: 最终请求数据</p>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="nt">&quot;username&quot;</span><span class="p">:</span> <span class="s2">&quot;admin&quot;</span><span class="p">,</span>
<span class="nt">&quot;password&quot;</span><span class="p">:</span> <span class="s2">&quot;123456&quot;</span><span class="p">,</span>
<span class="nt">&quot;age&quot;</span><span class="p">:</span> <span class="mi">18</span>
<span class="p">}</span>
</code></pre></div>
</div>
<h3 id="_4">使用自定义方法<a class="headerlink" href="#_4" title="Permanent link">&para;</a></h3>
<table>
<thead>
<tr>
<th>用例编号</th>
<th>用例标题</th>
<th>请求头</th>
<th>路径</th>
<th>是否执行</th>
<th>请求方式</th>
<th>入参关键字</th>
<th>上传文件</th>
<th>请求数据</th>
<th>提取参数</th>
<th>后置SQL</th>
<th>预期结果</th>
</tr>
</thead>
<tbody>
<tr>
<td>c4</td>
<td>登录</td>
<td><span><span class="MathJax_Preview">{set_token(</span><script type="math/tex">{set_token(</script></span>{token})}</td>
<td>login</td>
<td></td>
<td>post</td>
<td>data</td>
<td></td>
<td>{"username": "${get_current_highest()}", "password": "123456"}</td>
<td>{"msg":"$.meta.msg"}</td>
<td></td>
<td>{"$.meta.status":400}</td>
</tr>
</tbody>
</table>
<details class="success" open="open"><summary>tools/hooks.py</summary><div class="highlight"><pre><span></span><code><span class="c1"># hooks.py 自定义函数内容如下</span>
<span class="kn">import</span> <span class="nn">time</span>
<span class="k">def</span> <span class="nf">get_current_highest</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;获取当前时间戳&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">set_token</span><span class="p">(</span><span class="n">token</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;设置token直接返回字典&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="p">{</span><span class="s2">&quot;Authorization&quot;</span><span class="p">:</span> <span class="n">token</span><span class="p">}</span>
</code></pre></div>
</details>
<details class="success" open="open"><summary>设:变量池</summary><div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="nt">&quot;token&quot;</span><span class="p">:</span> <span class="s2">&quot;123789token123&quot;</span>
<span class="p">}</span>
</code></pre></div>
</details>
<div class="admonition note">
<p class="admonition-title">解析过程</p>
<p><code>${token}</code> -&gt; <code>变量池["token"]</code> -&gt; <code>"123789token123"</code><br />
<code>${get_current_highest()}</code> -&gt; <code>执行hooks.py中的get_current_highest()</code> -&gt; <code>"1621415799"</code><br />
<code>${set_token(${token})}</code> -&gt; <code>执行hooks.py中的set_token("123789token123")</code> -&gt; <code>{"Authorization": "123789token123"}</code> </p>
</div>
<div class="admonition tip">
<p class="admonition-title">最终请求数据</p>
<details class="success"><summary>请求头含配置文件中的基准header</summary><div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="nt">&quot;Accept-Encoding&quot;</span><span class="p">:</span> <span class="s2">&quot;gzip, deflate&quot;</span><span class="p">,</span>
<span class="nt">&quot;Accept-Language&quot;</span><span class="p">:</span> <span class="s2">&quot;zh-CN,zh;q=0.9&quot;</span><span class="p">,</span>
<span class="nt">&quot;User-Agent&quot;</span><span class="p">:</span> <span class="s2">&quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36&quot;</span><span class="p">,</span>
<span class="nt">&quot;Authorization&quot;</span><span class="p">:</span> <span class="s2">&quot;123789token123&quot;</span>
<span class="p">}</span>
</code></pre></div>
</details>
<details class="success"><summary>请求数据</summary><div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="nt">&quot;username&quot;</span><span class="p">:</span> <span class="s2">&quot;1621415799&quot;</span><span class="p">,</span>
<span class="nt">&quot;password&quot;</span><span class="p">:</span> <span class="s2">&quot;123456&quot;</span>
<span class="p">}</span>
</code></pre></div>
</details>
</div>
<div class="admonition warning">
<p class="admonition-title">自定义函数结果</p>
<p>执行后返回结果类型最终都会被转成<code>str</code>类型<br />
用例中可以使用自定义函数的只有<code>请求地址</code>,<code>请求头</code>,<code>请求数据</code>,<code>后置SQL</code>,<code>预期结果</code></p>
</div>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer">
<a href="../files/" class="md-footer__link md-footer__link--prev" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</div>
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Previous
</span>
4.4 上传文件
</div>
</div>
</a>
<a href="../extra/" class="md-footer__link md-footer__link--next" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Next
</span>
4.6 提取参数
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../../..", "features": [], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../../../assets/javascripts/workers/search.4fa0e4ee.min.js", "version": null}</script>
<script src="../../../assets/javascripts/bundle.1d3bfcf1.min.js"></script>
</body>
</html>

749
apiAutoTest/case/extra/index.html Executable file
View File

@ -0,0 +1,749 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="../../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.1.4">
<title>4.6 提取参数 - apiAutoTest手册</title>
<link rel="stylesheet" href="../../../assets/stylesheets/main.bde7dde4.min.css">
<link rel="stylesheet" href="../../../assets/stylesheets/palette.ef6f36e2.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
<style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Roboto Mono"}</style>
</head>
<body dir="ltr" data-md-color-scheme="" data-md-color-primary="none" data-md-color-accent="none">
<script>function __prefix(e){return new URL("../../..",location).pathname+"."+e}function __get(e,t=localStorage){return JSON.parse(t.getItem(__prefix(e)))}</script>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#_1" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../../.." title="apiAutoTest手册" class="md-header__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
apiAutoTest手册
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
4.6 提取参数
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../../.." title="apiAutoTest手册" class="md-nav__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
apiAutoTest手册
</label>
<div class="md-nav__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../.." class="md-nav__link">
介绍
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2" type="checkbox" id="__nav_2" checked>
<label class="md-nav__link" for="__nav_2">
使用
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="使用" data-md-level="1">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
使用
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../use/" class="md-nav__link">
1. 进行体验
</a>
</li>
<li class="md-nav__item">
<a href="../../structure/" class="md-nav__link">
2. 目录结构
</a>
</li>
<li class="md-nav__item">
<a href="../../config/" class="md-nav__link">
3. 配置文件
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_4" type="checkbox" id="__nav_2_4" checked>
<label class="md-nav__link" for="__nav_2_4">
4. 用例文件
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="4. 用例文件" data-md-level="2">
<label class="md-nav__title" for="__nav_2_4">
<span class="md-nav__icon md-icon"></span>
4. 用例文件
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../base/" class="md-nav__link">
4.1 基本介绍
</a>
</li>
<li class="md-nav__item">
<a href="../header/" class="md-nav__link">
4.2 请求头
</a>
</li>
<li class="md-nav__item">
<a href="../url/" class="md-nav__link">
4.3 接口地址
</a>
</li>
<li class="md-nav__item">
<a href="../files/" class="md-nav__link">
4.4 上传文件
</a>
</li>
<li class="md-nav__item">
<a href="../data/" class="md-nav__link">
4.5 请求数据
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
4.6 提取参数
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
4.6 提取参数
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_2" class="md-nav__link">
报告中的参数变量池
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../sql/" class="md-nav__link">
4.7 后置sql
</a>
</li>
<li class="md-nav__item">
<a href="../assert/" class="md-nav__link">
4.8 预期结果
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../hooks/" class="md-nav__link">
5. 自定义函数
</a>
</li>
<li class="md-nav__item">
<a href="../../jenkins/" class="md-nav__link">
6. Jenkins集成
</a>
</li>
<li class="md-nav__item">
<a href="../../recording/" class="md-nav__link">
7. 接口录制
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../../about/" class="md-nav__link">
关于
</a>
</li>
<li class="md-nav__item">
<a href="../../../change/" class="md-nav__link">
更新日志
</a>
</li>
<li class="md-nav__item">
<a href="../../../license/" class="md-nav__link">
开源协议
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_2" class="md-nav__link">
报告中的参数变量池
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/zy7y/apiAutoTest/edit/master/docs/apiAutoTest/case/extra.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
</a>
<div class="admonition tip">
<p class="admonition-title">提取变量</p>
<p><code>{变量名: jsonpath语法}</code>从当前用例的响应结果中提取值,以键值对的方式,将其加入参数变量池<br />
字典中<code>key</code>不能重复,重复时后添加的<code>key - value</code>,覆盖之前的</p>
</div>
<h1 id="_1">示例<a class="headerlink" href="#_1" title="Permanent link">&para;</a></h1>
<table>
<thead>
<tr>
<th>用例编号</th>
<th>用例标题</th>
<th>请求头</th>
<th>路径</th>
<th>是否执行</th>
<th>请求方式</th>
<th>入参关键字</th>
<th>上传文件</th>
<th>请求数据</th>
<th>提取参数</th>
<th>后置SQL</th>
<th>预期结果</th>
</tr>
</thead>
<tbody>
<tr>
<td>c2</td>
<td>登录</td>
<td></td>
<td>login</td>
<td></td>
<td>post</td>
<td>data</td>
<td></td>
<td>{"username": "admin", "password": "123456"}</td>
<td>{"msg":"$.meta.msg"}</td>
<td></td>
<td>{"$.meta.status":400}</td>
</tr>
</tbody>
</table>
<div class="admonition success">
<p class="admonition-title">设:响应结果</p>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="nt">&quot;data&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="nt">&quot;id&quot;</span><span class="p">:</span> <span class="mi">500</span><span class="p">,</span>
<span class="nt">&quot;rid&quot;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
<span class="nt">&quot;username&quot;</span><span class="p">:</span> <span class="s2">&quot;admin&quot;</span><span class="p">,</span>
<span class="nt">&quot;mobile&quot;</span><span class="p">:</span> <span class="s2">&quot;13761351161&quot;</span><span class="p">,</span>
<span class="nt">&quot;email&quot;</span><span class="p">:</span> <span class="s2">&quot;adsfad@qq.com&quot;</span><span class="p">,</span>
<span class="nt">&quot;token&quot;</span><span class="p">:</span> <span class="s2">&quot;Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjUwMCwicmlkIjowLCJpYXQiOjE2MjE0MTYyODMsImV4cCI6MTYyMTUwMjY4M30.7k9GP4XvECPiseneGTADNBGqXdHGJA1JrbCV1wS57ss&quot;</span>
<span class="p">},</span>
<span class="nt">&quot;meta&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="nt">&quot;msg&quot;</span><span class="p">:</span> <span class="s2">&quot;登录成功&quot;</span><span class="p">,</span>
<span class="nt">&quot;status&quot;</span><span class="p">:</span> <span class="mi">200</span>
<span class="p">}</span>
<span class="p">}</span>
</code></pre></div>
</div>
<div class="admonition note">
<p class="admonition-title">解析提取参数栏</p>
<p><div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="nt">&quot;msg&quot;</span><span class="p">:</span> <span class="s2">&quot;登录成功&quot;</span>
<span class="p">}</span>
</code></pre></div>
<code>$.meta.msg</code>做了什么事情呢?</p>
<p><code>$</code>代表着响应内容的根目录,则理解为整个</p>
<p><div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="nt">&quot;data&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="nt">&quot;id&quot;</span><span class="p">:</span> <span class="mi">500</span><span class="p">,</span>
<span class="nt">&quot;rid&quot;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
<span class="nt">&quot;username&quot;</span><span class="p">:</span> <span class="s2">&quot;admin&quot;</span><span class="p">,</span>
<span class="nt">&quot;mobile&quot;</span><span class="p">:</span> <span class="s2">&quot;13761351161&quot;</span><span class="p">,</span>
<span class="nt">&quot;email&quot;</span><span class="p">:</span> <span class="s2">&quot;adsfad@qq.com&quot;</span><span class="p">,</span>
<span class="nt">&quot;token&quot;</span><span class="p">:</span> <span class="s2">&quot;Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjUwMCwicmlkIjowLCJpYXQiOjE2MjE0MTYyODMsImV4cCI6MTYyMTUwMjY4M30.7k9GP4XvECPiseneGTADNBGqXdHGJA1JrbCV1wS57ss&quot;</span>
<span class="p">},</span>
<span class="nt">&quot;meta&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="nt">&quot;msg&quot;</span><span class="p">:</span> <span class="s2">&quot;登录成功&quot;</span><span class="p">,</span>
<span class="nt">&quot;status&quot;</span><span class="p">:</span> <span class="mi">200</span>
<span class="p">}</span>
<span class="p">}</span>
</code></pre></div>
<code>$.meta</code>, 代表找到根目录下key为<code>meta</code>的value</p>
<p><div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="nt">&quot;msg&quot;</span><span class="p">:</span> <span class="s2">&quot;登录成功&quot;</span><span class="p">,</span>
<span class="nt">&quot;status&quot;</span><span class="p">:</span> <span class="mi">200</span>
<span class="p">}</span>
</code></pre></div>
<code>$.meta.msg</code>, 则意为找到<code>根目录 -&gt; meta -&gt; msg</code> 的value
<div class="highlight"><pre><span></span><code><span class="s2">&quot;登录成功&quot;</span>
</code></pre></div></p>
</div>
<div class="admonition success">
<p class="admonition-title">当前变量池</p>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="nt">&quot;msg&quot;</span><span class="p">:</span> <span class="s2">&quot;登录成功&quot;</span>
<span class="p">}</span>
</code></pre></div>
</div>
<p><strong>提取多个:</strong>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="nt">&quot;变量名1&quot;</span><span class="p">:</span> <span class="s2">&quot;jsonpath1&quot;</span><span class="p">,</span>
<span class="nt">&quot;变量名2&quot;</span><span class="p">:</span> <span class="s2">&quot;jsonpath2&quot;</span>
<span class="p">}</span>
</code></pre></div></p>
<h3 id="_2">报告中的参数变量池<a class="headerlink" href="#_2" title="Permanent link">&para;</a></h3>
<p><img alt="参数池" src="../../../img/%E5%8F%82%E6%95%B0%E6%B1%A0.png" /></p>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer">
<a href="../data/" class="md-footer__link md-footer__link--prev" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</div>
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Previous
</span>
4.5 请求数据
</div>
</div>
</a>
<a href="../sql/" class="md-footer__link md-footer__link--next" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Next
</span>
4.7 后置sql
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../../..", "features": [], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../../../assets/javascripts/workers/search.4fa0e4ee.min.js", "version": null}</script>
<script src="../../../assets/javascripts/bundle.1d3bfcf1.min.js"></script>
</body>
</html>

865
apiAutoTest/case/files/index.html Executable file
View File

@ -0,0 +1,865 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="../../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.1.4">
<title>4.4 上传文件 - apiAutoTest手册</title>
<link rel="stylesheet" href="../../../assets/stylesheets/main.bde7dde4.min.css">
<link rel="stylesheet" href="../../../assets/stylesheets/palette.ef6f36e2.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
<style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Roboto Mono"}</style>
</head>
<body dir="ltr" data-md-color-scheme="" data-md-color-primary="none" data-md-color-accent="none">
<script>function __prefix(e){return new URL("../../..",location).pathname+"."+e}function __get(e,t=localStorage){return JSON.parse(t.getItem(__prefix(e)))}</script>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#_1" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../../.." title="apiAutoTest手册" class="md-header__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
apiAutoTest手册
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
4.4 上传文件
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../../.." title="apiAutoTest手册" class="md-nav__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
apiAutoTest手册
</label>
<div class="md-nav__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../.." class="md-nav__link">
介绍
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2" type="checkbox" id="__nav_2" checked>
<label class="md-nav__link" for="__nav_2">
使用
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="使用" data-md-level="1">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
使用
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../use/" class="md-nav__link">
1. 进行体验
</a>
</li>
<li class="md-nav__item">
<a href="../../structure/" class="md-nav__link">
2. 目录结构
</a>
</li>
<li class="md-nav__item">
<a href="../../config/" class="md-nav__link">
3. 配置文件
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_4" type="checkbox" id="__nav_2_4" checked>
<label class="md-nav__link" for="__nav_2_4">
4. 用例文件
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="4. 用例文件" data-md-level="2">
<label class="md-nav__title" for="__nav_2_4">
<span class="md-nav__icon md-icon"></span>
4. 用例文件
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../base/" class="md-nav__link">
4.1 基本介绍
</a>
</li>
<li class="md-nav__item">
<a href="../header/" class="md-nav__link">
4.2 请求头
</a>
</li>
<li class="md-nav__item">
<a href="../url/" class="md-nav__link">
4.3 接口地址
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
4.4 上传文件
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
4.4 上传文件
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
示例
</a>
<nav class="md-nav" aria-label="示例">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#_2" class="md-nav__link">
无文件
</a>
</li>
<li class="md-nav__item">
<a href="#_3" class="md-nav__link">
单文件
</a>
</li>
<li class="md-nav__item">
<a href="#_4" class="md-nav__link">
多文件
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../data/" class="md-nav__link">
4.5 请求数据
</a>
</li>
<li class="md-nav__item">
<a href="../extra/" class="md-nav__link">
4.6 提取参数
</a>
</li>
<li class="md-nav__item">
<a href="../sql/" class="md-nav__link">
4.7 后置sql
</a>
</li>
<li class="md-nav__item">
<a href="../assert/" class="md-nav__link">
4.8 预期结果
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../hooks/" class="md-nav__link">
5. 自定义函数
</a>
</li>
<li class="md-nav__item">
<a href="../../jenkins/" class="md-nav__link">
6. Jenkins集成
</a>
</li>
<li class="md-nav__item">
<a href="../../recording/" class="md-nav__link">
7. 接口录制
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../../about/" class="md-nav__link">
关于
</a>
</li>
<li class="md-nav__item">
<a href="../../../change/" class="md-nav__link">
更新日志
</a>
</li>
<li class="md-nav__item">
<a href="../../../license/" class="md-nav__link">
开源协议
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
示例
</a>
<nav class="md-nav" aria-label="示例">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#_2" class="md-nav__link">
无文件
</a>
</li>
<li class="md-nav__item">
<a href="#_3" class="md-nav__link">
单文件
</a>
</li>
<li class="md-nav__item">
<a href="#_4" class="md-nav__link">
多文件
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/zy7y/apiAutoTest/edit/master/docs/apiAutoTest/case/files.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
</a>
<h1>4.4 上传文件</h1>
<div class="admonition note">
<p class="admonition-title">提示</p>
<p>内部将使用二进制流方式打开本地文件并上传到接口当中
windows中路径中直接使用<code>\</code>, 会被转义</p>
</div>
<h2 id="_1">示例<a class="headerlink" href="#_1" title="Permanent link">&para;</a></h2>
<p><div class="highlight"><pre><span></span><code><span class="c1"># 本地准备一个上传文件服务</span>
<span class="c1">#!/usr/bin/env/ python3</span>
<span class="c1"># -*- coding:utf-8 -*-</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">@Project: apiAutoTest</span>
<span class="sd">@File :serve.py</span>
<span class="sd">@Author:zy7y</span>
<span class="sd">@Date :2021/5/19</span>
<span class="sd">@Desc :</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">List</span>
<span class="kn">from</span> <span class="nn">fastapi</span> <span class="kn">import</span> <span class="n">FastAPI</span><span class="p">,</span> <span class="n">File</span><span class="p">,</span> <span class="n">UploadFile</span><span class="p">,</span> <span class="n">Form</span>
<span class="n">app</span> <span class="o">=</span> <span class="n">FastAPI</span><span class="p">()</span>
<span class="nd">@app</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">&quot;/upload_file/&quot;</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s1">&#39;上传单文件接口&#39;</span><span class="p">)</span>
<span class="k">async</span> <span class="k">def</span> <span class="nf">create_upload_file</span><span class="p">(</span><span class="n">file</span><span class="p">:</span> <span class="n">UploadFile</span> <span class="o">=</span> <span class="n">File</span><span class="p">(</span><span class="o">...</span><span class="p">)):</span>
<span class="c1"># 单文件上传接口,并将文件写到服务器地址, 接收文件对象的参数 是 file</span>
<span class="c1"># 读取文件</span>
<span class="n">contents</span> <span class="o">=</span> <span class="k">await</span> <span class="n">file</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
<span class="c1"># 保存本地</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">file</span><span class="o">.</span><span class="n">filename</span><span class="p">,</span> <span class="s2">&quot;wb&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
<span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">contents</span><span class="p">)</span>
<span class="k">return</span> <span class="p">{</span><span class="s1">&#39;msg&#39;</span><span class="p">:</span> <span class="s1">&#39;操作成功&#39;</span><span class="p">,</span> <span class="s2">&quot;filename&quot;</span><span class="p">:</span> <span class="n">file</span><span class="o">.</span><span class="n">filename</span><span class="p">,</span> <span class="s2">&quot;meta&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;msg&quot;</span><span class="p">:</span> <span class="s2">&quot;ok&quot;</span><span class="p">},</span> <span class="s2">&quot;code&quot;</span><span class="p">:</span> <span class="mi">200</span><span class="p">}</span>
<span class="nd">@app</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">&quot;/upload_files/&quot;</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s1">&#39;上传多个文件&#39;</span><span class="p">)</span>
<span class="k">async</span> <span class="k">def</span> <span class="nf">create_upload_files</span><span class="p">(</span><span class="n">files</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">UploadFile</span><span class="p">]</span> <span class="o">=</span> <span class="n">File</span><span class="p">(</span><span class="o">...</span><span class="p">),</span> <span class="n">username</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">Form</span><span class="p">(</span><span class="o">...</span><span class="p">),</span> <span class="n">password</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">Form</span><span class="p">(</span><span class="o">...</span><span class="p">)):</span>
<span class="c1"># 多文件上传接口,并将文件写到服务器, 接收文件对象的参数 是 files</span>
<span class="k">for</span> <span class="n">file</span> <span class="ow">in</span> <span class="n">files</span><span class="p">:</span>
<span class="c1"># 读取文件</span>
<span class="n">contents</span> <span class="o">=</span> <span class="k">await</span> <span class="n">file</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
<span class="c1"># 保存本地</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">file</span><span class="o">.</span><span class="n">filename</span><span class="p">,</span> <span class="s2">&quot;wb&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
<span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">contents</span><span class="p">)</span>
<span class="k">return</span> <span class="p">{</span><span class="s2">&quot;filenames&quot;</span><span class="p">:</span> <span class="p">[</span><span class="n">file</span><span class="o">.</span><span class="n">filename</span> <span class="k">for</span> <span class="n">file</span> <span class="ow">in</span> <span class="n">files</span><span class="p">],</span> <span class="s2">&quot;meta&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;msg&quot;</span><span class="p">:</span> <span class="s2">&quot;ok&quot;</span><span class="p">},</span> <span class="s2">&quot;code&quot;</span><span class="p">:</span> <span class="mi">200</span><span class="p">,</span>
<span class="s2">&quot;username&quot;</span><span class="p">:</span> <span class="n">username</span><span class="p">,</span>
<span class="s2">&quot;password&quot;</span><span class="p">:</span> <span class="n">password</span>
<span class="p">}</span>
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">&#39;__main__&#39;</span><span class="p">:</span>
<span class="c1"># 启动项目后 访问 http://127.0.0.1:8888/docs 可查看接口文档</span>
<span class="kn">import</span> <span class="nn">uvicorn</span>
<span class="n">uvicorn</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="s1">&#39;serve:app&#39;</span><span class="p">,</span> <span class="n">reload</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">port</span><span class="o">=</span><span class="mi">8888</span><span class="p">)</span>
<span class="c1"># pip install fastapi uvicorn python-multipart</span>
</code></pre></div>
<mark><code>test/test_api.py</code> <code>test_main</code>函数,修改<code>env='test'</code>:</mark>
<div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">test_main</span><span class="p">(</span><span class="n">cases</span><span class="p">):</span> <span class="c1"># 不使用数据库功能</span>
<span class="c1"># 发送请求</span>
<span class="n">response</span><span class="p">,</span> <span class="n">expect</span><span class="p">,</span> <span class="n">sql</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">action</span><span class="p">(</span><span class="n">cases</span><span class="p">,</span> <span class="n">env</span><span class="o">=</span><span class="s1">&#39;test&#39;</span><span class="p">)</span>
<span class="c1"># 断言操作</span>
<span class="n">DataProcess</span><span class="o">.</span><span class="n">assert_result</span><span class="p">(</span><span class="n">response</span><span class="p">,</span> <span class="n">expect</span><span class="p">)</span>
</code></pre></div></p>
<h3 id="_2">无文件<a class="headerlink" href="#_2" title="Permanent link">&para;</a></h3>
<p><strong>上传文件栏不填写即可</strong></p>
<h3 id="_3">单文件<a class="headerlink" href="#_3" title="Permanent link">&para;</a></h3>
<table>
<thead>
<tr>
<th>用例编号</th>
<th>用例标题</th>
<th>请求头</th>
<th>路径</th>
<th>是否执行</th>
<th>请求方式</th>
<th>入参关键字</th>
<th>上传文件</th>
<th>请求数据</th>
<th>提取参数</th>
<th>后置SQL</th>
<th>预期结果</th>
</tr>
</thead>
<tbody>
<tr>
<td>c9</td>
<td>上传单文件</td>
<td></td>
<td>uploadfile</td>
<td></td>
<td>post</td>
<td>data</td>
<td>{"file":"D:/FastAPIProjects/apiAutoTestDocs/demo/mkdocs.yml"}</td>
<td></td>
<td>{"code":"$.code"}</td>
<td></td>
<td>{"$.code":200}</td>
</tr>
<tr>
<td><mark>根据接口文档或者上述接口可看到这里的<code>file</code>是接收文件对象的入参</mark></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><div class="highlight"><pre><span></span><code><span class="p">{</span><span class="nt">&quot;file&quot;</span><span class="p">:</span><span class="s2">&quot;D:/FastAPIProjects/apiAutoTestDocs/demo/mkdocs.yml&quot;</span><span class="p">}</span>
</code></pre></div></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p><img alt="单文件上传" src="../../../img/%E5%8D%95%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0.png" /></p>
<h3 id="_4">多文件<a class="headerlink" href="#_4" title="Permanent link">&para;</a></h3>
<table>
<thead>
<tr>
<th>用例编号</th>
<th>用例标题</th>
<th>请求头</th>
<th>路径</th>
<th>是否执行</th>
<th>请求方式</th>
<th>入参关键字</th>
<th>上传文件</th>
<th>请求数据</th>
<th>提取参数</th>
<th>后置SQL</th>
<th>预期结果</th>
</tr>
</thead>
<tbody>
<tr>
<td>c10</td>
<td>上传多文件</td>
<td></td>
<td>uploadfiles</td>
<td></td>
<td>post</td>
<td>data</td>
<td>{"files":["D:/FastAPIProjects/apiAutoTestDocs/demo/mkdocs.yml", "D:/FastAPIProjects/apiAutoTestDocs/demo/docs/index.md"]}</td>
<td>{"username": "admin", "password": ""}</td>
<td></td>
<td></td>
<td>{"$.code":200}</td>
</tr>
</tbody>
</table>
<div class="highlight"><pre><span></span><code><span class="p">{</span><span class="nt">&quot;files&quot;</span><span class="p">:[</span><span class="s2">&quot;D:/FastAPIProjects/apiAutoTestDocs/demo/mkdocs.yml&quot;</span><span class="p">,</span> <span class="s2">&quot;D:/FastAPIProjects/apiAutoTestDocs/demo/docs/index.md&quot;</span><span class="p">]}</span>
</code></pre></div>
<p><mark>根据接口文档或者上述接口可看到这里的<code>files</code>是接收文件对象列表的入参</mark>
<img alt="单文件上传" src="../../../img/%E5%A4%9A%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0.png" /></p>
<p><strong>服务端</strong>
<img alt="服务端" src="../../../img/%E6%9C%8D%E5%8A%A1%E7%AB%AF.png" /></p>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer">
<a href="../url/" class="md-footer__link md-footer__link--prev" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</div>
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Previous
</span>
4.3 接口地址
</div>
</div>
</a>
<a href="../data/" class="md-footer__link md-footer__link--next" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Next
</span>
4.5 请求数据
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../../..", "features": [], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../../../assets/javascripts/workers/search.4fa0e4ee.min.js", "version": null}</script>
<script src="../../../assets/javascripts/bundle.1d3bfcf1.min.js"></script>
</body>
</html>

View File

@ -0,0 +1,791 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="../../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.1.4">
<title>4.2 请求头 - apiAutoTest手册</title>
<link rel="stylesheet" href="../../../assets/stylesheets/main.bde7dde4.min.css">
<link rel="stylesheet" href="../../../assets/stylesheets/palette.ef6f36e2.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
<style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Roboto Mono"}</style>
</head>
<body dir="ltr" data-md-color-scheme="" data-md-color-primary="none" data-md-color-accent="none">
<script>function __prefix(e){return new URL("../../..",location).pathname+"."+e}function __get(e,t=localStorage){return JSON.parse(t.getItem(__prefix(e)))}</script>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#_1" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../../.." title="apiAutoTest手册" class="md-header__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
apiAutoTest手册
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
4.2 请求头
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../../.." title="apiAutoTest手册" class="md-nav__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
apiAutoTest手册
</label>
<div class="md-nav__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../.." class="md-nav__link">
介绍
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2" type="checkbox" id="__nav_2" checked>
<label class="md-nav__link" for="__nav_2">
使用
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="使用" data-md-level="1">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
使用
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../use/" class="md-nav__link">
1. 进行体验
</a>
</li>
<li class="md-nav__item">
<a href="../../structure/" class="md-nav__link">
2. 目录结构
</a>
</li>
<li class="md-nav__item">
<a href="../../config/" class="md-nav__link">
3. 配置文件
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_4" type="checkbox" id="__nav_2_4" checked>
<label class="md-nav__link" for="__nav_2_4">
4. 用例文件
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="4. 用例文件" data-md-level="2">
<label class="md-nav__title" for="__nav_2_4">
<span class="md-nav__icon md-icon"></span>
4. 用例文件
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../base/" class="md-nav__link">
4.1 基本介绍
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
4.2 请求头
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
4.2 请求头
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
示例
</a>
<nav class="md-nav" aria-label="示例">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#_2" class="md-nav__link">
有请求头
</a>
</li>
<li class="md-nav__item">
<a href="#_3" class="md-nav__link">
无请求头
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../url/" class="md-nav__link">
4.3 接口地址
</a>
</li>
<li class="md-nav__item">
<a href="../files/" class="md-nav__link">
4.4 上传文件
</a>
</li>
<li class="md-nav__item">
<a href="../data/" class="md-nav__link">
4.5 请求数据
</a>
</li>
<li class="md-nav__item">
<a href="../extra/" class="md-nav__link">
4.6 提取参数
</a>
</li>
<li class="md-nav__item">
<a href="../sql/" class="md-nav__link">
4.7 后置sql
</a>
</li>
<li class="md-nav__item">
<a href="../assert/" class="md-nav__link">
4.8 预期结果
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../hooks/" class="md-nav__link">
5. 自定义函数
</a>
</li>
<li class="md-nav__item">
<a href="../../jenkins/" class="md-nav__link">
6. Jenkins集成
</a>
</li>
<li class="md-nav__item">
<a href="../../recording/" class="md-nav__link">
7. 接口录制
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../../about/" class="md-nav__link">
关于
</a>
</li>
<li class="md-nav__item">
<a href="../../../change/" class="md-nav__link">
更新日志
</a>
</li>
<li class="md-nav__item">
<a href="../../../license/" class="md-nav__link">
开源协议
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
示例
</a>
<nav class="md-nav" aria-label="示例">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#_2" class="md-nav__link">
有请求头
</a>
</li>
<li class="md-nav__item">
<a href="#_3" class="md-nav__link">
无请求头
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/zy7y/apiAutoTest/edit/master/docs/apiAutoTest/case/header.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
</a>
<h1>4.2 请求头</h1>
<div class="admonition note">
<p class="admonition-title">前置处理</p>
<div class="admonition tip">
<p class="admonition-title">使用变量</p>
<p>来源: <code>响应提取</code><code>后置SQL结果</code><br />
使用<code>$变量名</code> 或者 <code>${变量名}</code>的方式来引用变量</p>
</div>
<div class="admonition tip">
<p class="admonition-title">使用函数</p>
<p>来源:<code>tools/hooks.py</code> 定义的函数<br />
调用无参方法:<code>${方法名()}</code><br />
调用有参方法:<code>${方法名(参数)}</code></p>
</div>
<p>经过上面两道工序处理之后,返回的<code>header</code>字典,将和<code>基准header</code>合并。</p>
</div>
<h2 id="_1">示例<a class="headerlink" href="#_1" title="Permanent link">&para;</a></h2>
<p><mark><code>config/config.yaml</code><code>request_header</code>配置如下:</mark>
<div class="highlight"><pre><span></span><code><span class="c1"># 基准的请求头信息</span>
<span class="nt">request_headers</span><span class="p">:</span>
<span class="nt">Accept-Encoding</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">gzip, deflate</span>
<span class="nt">Accept-Language</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">zh-CN,zh;q=0.9</span>
<span class="nt">User-Agent</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36</span>
</code></pre></div></p>
<h3 id="_2">有请求头<a class="headerlink" href="#_2" title="Permanent link">&para;</a></h3>
<table>
<thead>
<tr>
<th>用例编号</th>
<th>用例标题</th>
<th>请求头</th>
<th>路径</th>
<th>是否执行</th>
<th>请求方式</th>
<th>入参关键字</th>
<th>上传文件</th>
<th>请求数据</th>
<th>提取参数</th>
<th>后置SQL</th>
<th>预期结果</th>
</tr>
</thead>
<tbody>
<tr>
<td>c1</td>
<td>get登录</td>
<td>{"c1": "为c1添加的请求头"}</td>
<td>login</td>
<td></td>
<td>get</td>
<td>params</td>
<td></td>
<td>{"username": "admin", "password": ""}</td>
<td>{"msg":"$.meta.msg"}</td>
<td></td>
<td>{"$.meta.status":400}</td>
</tr>
</tbody>
</table>
<p><mark><code>c1</code>用例中<code>请求头一栏配置如下</code>:</mark>
<div class="highlight"><pre><span></span><code><span class="p">{</span><span class="nt">&quot;c1&quot;</span><span class="p">:</span><span class="s2">&quot;c1添加的请求头&quot;</span><span class="p">}</span>
</code></pre></div>
<mark><code>最终请求时</code>,请求头如下:</mark></p>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="nt">&quot;Accept-Encoding&quot;</span><span class="p">:</span> <span class="s2">&quot;gzip, deflate&quot;</span><span class="p">,</span>
<span class="nt">&quot;Accept-Language&quot;</span><span class="p">:</span> <span class="s2">&quot;zh-CN,zh;q=0.9&quot;</span><span class="p">,</span>
<span class="nt">&quot;User-Agent&quot;</span><span class="p">:</span> <span class="s2">&quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36&quot;</span><span class="p">,</span>
<span class="nt">&quot;c1&quot;</span><span class="p">:</span> <span class="s2">&quot;c1添加的请求头&quot;</span>
<span class="p">}</span>
</code></pre></div>
<h3 id="_3">无请求头<a class="headerlink" href="#_3" title="Permanent link">&para;</a></h3>
<table>
<thead>
<tr>
<th>用例编号</th>
<th>用例标题</th>
<th>请求头</th>
<th>路径</th>
<th>是否执行</th>
<th>请求方式</th>
<th>入参关键字</th>
<th>上传文件</th>
<th>请求数据</th>
<th>提取参数</th>
<th>后置SQL</th>
<th>预期结果</th>
</tr>
</thead>
<tbody>
<tr>
<td>c1</td>
<td>get登录</td>
<td></td>
<td>login</td>
<td></td>
<td>get</td>
<td>params</td>
<td></td>
<td>{"username": "admin", "password": ""}</td>
<td>{"msg":"$.meta.msg"}</td>
<td></td>
<td>{"$.meta.status":400}</td>
</tr>
</tbody>
</table>
<p><mark><code>c1</code>用例中<code>请求头一栏配置如上</code>无内容`:</mark></p>
<p><mark><code>最终请求时</code>,请求头如下:</mark>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="nt">&quot;Accept-Encoding&quot;</span><span class="p">:</span> <span class="s2">&quot;gzip, deflate&quot;</span><span class="p">,</span>
<span class="nt">&quot;Accept-Language&quot;</span><span class="p">:</span> <span class="s2">&quot;zh-CN,zh;q=0.9&quot;</span><span class="p">,</span>
<span class="nt">&quot;User-Agent&quot;</span><span class="p">:</span> <span class="s2">&quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36&quot;</span><span class="p">,</span>
<span class="p">}</span>
</code></pre></div></p>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer">
<a href="../base/" class="md-footer__link md-footer__link--prev" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</div>
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Previous
</span>
4.1 基本介绍
</div>
</div>
</a>
<a href="../url/" class="md-footer__link md-footer__link--next" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Next
</span>
4.3 接口地址
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../../..", "features": [], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../../../assets/javascripts/workers/search.4fa0e4ee.min.js", "version": null}</script>
<script src="../../../assets/javascripts/bundle.1d3bfcf1.min.js"></script>
</body>
</html>

854
apiAutoTest/case/sql/index.html Executable file
View File

@ -0,0 +1,854 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="../../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.1.4">
<title>4.7 后置sql - apiAutoTest手册</title>
<link rel="stylesheet" href="../../../assets/stylesheets/main.bde7dde4.min.css">
<link rel="stylesheet" href="../../../assets/stylesheets/palette.ef6f36e2.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
<style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Roboto Mono"}</style>
</head>
<body dir="ltr" data-md-color-scheme="" data-md-color-primary="none" data-md-color-accent="none">
<script>function __prefix(e){return new URL("../../..",location).pathname+"."+e}function __get(e,t=localStorage){return JSON.parse(t.getItem(__prefix(e)))}</script>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#_1" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../../.." title="apiAutoTest手册" class="md-header__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
apiAutoTest手册
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
4.7 后置sql
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../../.." title="apiAutoTest手册" class="md-nav__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
apiAutoTest手册
</label>
<div class="md-nav__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../.." class="md-nav__link">
介绍
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2" type="checkbox" id="__nav_2" checked>
<label class="md-nav__link" for="__nav_2">
使用
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="使用" data-md-level="1">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
使用
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../use/" class="md-nav__link">
1. 进行体验
</a>
</li>
<li class="md-nav__item">
<a href="../../structure/" class="md-nav__link">
2. 目录结构
</a>
</li>
<li class="md-nav__item">
<a href="../../config/" class="md-nav__link">
3. 配置文件
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_4" type="checkbox" id="__nav_2_4" checked>
<label class="md-nav__link" for="__nav_2_4">
4. 用例文件
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="4. 用例文件" data-md-level="2">
<label class="md-nav__title" for="__nav_2_4">
<span class="md-nav__icon md-icon"></span>
4. 用例文件
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../base/" class="md-nav__link">
4.1 基本介绍
</a>
</li>
<li class="md-nav__item">
<a href="../header/" class="md-nav__link">
4.2 请求头
</a>
</li>
<li class="md-nav__item">
<a href="../url/" class="md-nav__link">
4.3 接口地址
</a>
</li>
<li class="md-nav__item">
<a href="../files/" class="md-nav__link">
4.4 上传文件
</a>
</li>
<li class="md-nav__item">
<a href="../data/" class="md-nav__link">
4.5 请求数据
</a>
</li>
<li class="md-nav__item">
<a href="../extra/" class="md-nav__link">
4.6 提取参数
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
4.7 后置sql
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
4.7 后置sql
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
示例
</a>
<nav class="md-nav" aria-label="示例">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#sql" class="md-nav__link">
单条sql
</a>
</li>
<li class="md-nav__item">
<a href="#sql_1" class="md-nav__link">
多条sql
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../assert/" class="md-nav__link">
4.8 预期结果
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../hooks/" class="md-nav__link">
5. 自定义函数
</a>
</li>
<li class="md-nav__item">
<a href="../../jenkins/" class="md-nav__link">
6. Jenkins集成
</a>
</li>
<li class="md-nav__item">
<a href="../../recording/" class="md-nav__link">
7. 接口录制
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../../about/" class="md-nav__link">
关于
</a>
</li>
<li class="md-nav__item">
<a href="../../../change/" class="md-nav__link">
更新日志
</a>
</li>
<li class="md-nav__item">
<a href="../../../license/" class="md-nav__link">
开源协议
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
示例
</a>
<nav class="md-nav" aria-label="示例">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#sql" class="md-nav__link">
单条sql
</a>
</li>
<li class="md-nav__item">
<a href="#sql_1" class="md-nav__link">
多条sql
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/zy7y/apiAutoTest/edit/master/docs/apiAutoTest/case/sql.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
</a>
<h1>4.7 后置sql</h1>
<div class="admonition note">
<p class="admonition-title">前置处理</p>
<div class="admonition tip">
<p class="admonition-title">使用变量</p>
<p>来源: <code>响应提取</code><code>后置SQL结果</code><br />
使用<code>$变量名</code> 或者 <code>${变量名}</code>的方式来引用变量</p>
</div>
<div class="admonition tip">
<p class="admonition-title">使用函数</p>
<p>来源:<code>tools/hooks.py</code> 定义的函数<br />
调用无参方法:<code>${方法名()}</code><br />
调用有参方法:<code>${方法名(参数)}</code></p>
</div>
<p>经过上面两道工序处理之后,返回<code>sql</code>,再执行。</p>
</div>
<div class="admonition tip">
<p class="admonition-title">执行时机</p>
<p>发送请求之后执行SQL并把结果加入到参数池中<br />
存在<code>${}</code>语法将处理后再去执行SQL语句
只支持mysql其他需要用户自己扩展</p>
</div>
<h2 id="_1">示例<a class="headerlink" href="#_1" title="Permanent link">&para;</a></h2>
<p><mark><strong><code>test/conftest.py</code> <code>get_db</code>函数修改如下</strong></mark>
<div class="highlight"><pre><span></span><code><span class="nd">@pytest</span><span class="o">.</span><span class="n">fixture</span><span class="p">(</span><span class="n">scope</span><span class="o">=</span><span class="s2">&quot;session&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">get_db</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;关于其作用域请移步查看官方文档&quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">db</span> <span class="o">=</span> <span class="n">DB</span><span class="p">()</span>
<span class="k">yield</span> <span class="n">db</span>
<span class="k">finally</span><span class="p">:</span>
<span class="n">db</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</code></pre></div>
<mark><strong><code>config/config.yaml</code> <code>database</code>如下</strong></mark>
<div class="highlight"><pre><span></span><code><span class="c1"># 数据库校验- mysql</span>
<span class="nt">database</span><span class="p">:</span>
<span class="nt">host</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">localhost</span>
<span class="nt">port</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">3306</span>
<span class="nt">user</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">root</span>
<span class="c1"># 不用&#39;&#39;会被解析成int类型数据</span>
<span class="nt">password</span><span class="p">:</span> <span class="s">&#39;123456&#39;</span>
<span class="nt">db_name</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">apiautotest</span>
<span class="nt">charset</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">utf8mb4</span>
<span class="c1"># 数据库所在的服务器配置</span>
<span class="nt">ssh_server</span><span class="p">:</span>
<span class="nt">port</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">22</span>
<span class="nt">username</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">root</span>
<span class="nt">password</span><span class="p">:</span> <span class="s">&#39;123456&#39;</span>
<span class="c1"># 私有密钥文件路径</span>
<span class="nt">private_key_file</span><span class="p">:</span>
<span class="c1"># 私钥密码</span>
<span class="nt">privat_passowrd</span><span class="p">:</span>
<span class="c1"># 如果使用的docker容器部署mysql服务需要传入mysql的容器id/name</span>
<span class="nt">mysql_container</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">mysql8</span>
<span class="c1"># 数据库备份文件导出的本地路径, 需要保证存在该文件夹</span>
<span class="nt">sql_data_file</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">backup_sqls/</span>
</code></pre></div></p>
<p><mark><strong><code>test/test_api.py</code> <code>test_main</code>函数,修改如下:</strong></mark>
<div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">test_main</span><span class="p">(</span><span class="n">cases</span><span class="p">,</span> <span class="n">get_db</span><span class="p">):</span> <span class="c1"># 使用数据库功能(包含sql查询数据备份数据恢复)</span>
<span class="c1"># 此处的cases入参来自与 conftest.py 文件中 cases函数与直接使用 @pytest.mark.parametrize</span>
<span class="c1"># 有着差不多的效果</span>
<span class="c1"># 发送请求</span>
<span class="n">response</span><span class="p">,</span> <span class="n">expect</span><span class="p">,</span> <span class="n">sql</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">aciton</span><span class="p">(</span><span class="n">cases</span><span class="p">)</span>
<span class="c1"># 执行sql</span>
<span class="n">DataProcess</span><span class="o">.</span><span class="n">handle_sql</span><span class="p">(</span><span class="n">sql</span><span class="p">,</span> <span class="n">get_db</span><span class="p">)</span>
<span class="c1"># 断言操作</span>
<span class="n">DataProcess</span><span class="o">.</span><span class="n">assert_result</span><span class="p">(</span><span class="n">response</span><span class="p">,</span> <span class="n">expect</span><span class="p">)</span>
</code></pre></div></p>
<p><mark><strong><code>apis</code>表数据如下:</strong></mark>
<img alt="apis table" src="../../../img/sql1.png" /></p>
<p><mark><strong><code>cases</code>表数据如下:</strong></mark>
<img alt="cases" src="../../../img/sql2.png" /></p>
<h3 id="sql">单条sql<a class="headerlink" href="#sql" title="Permanent link">&para;</a></h3>
<table>
<thead>
<tr>
<th>用例编号</th>
<th>用例标题</th>
<th>请求头</th>
<th>路径</th>
<th>是否执行</th>
<th>请求方式</th>
<th>入参关键字</th>
<th>上传文件</th>
<th>请求数据</th>
<th>提取参数</th>
<th>后置SQL</th>
<th>预期结果</th>
</tr>
</thead>
<tbody>
<tr>
<td>c1</td>
<td>get登录</td>
<td></td>
<td>login</td>
<td></td>
<td>get</td>
<td>params</td>
<td></td>
<td>{"username": "admin", "password": ""}</td>
<td>{"msg":"$.meta.msg"}</td>
<td>select * from apis;</td>
<td>{"$.meta.status":400}</td>
</tr>
</tbody>
</table>
<p><mark><strong>执行参数字典为:</strong></mark>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="nt">&quot;msg&quot;</span><span class="p">:</span> <span class="s2">&quot;参数错误&quot;</span>
<span class="p">}</span>
</code></pre></div>
<mark><strong>sql执行结果为:</strong></mark>
<div class="highlight"><pre><span></span><code><span class="kc">null</span>
</code></pre></div></p>
<h3 id="sql_1">多条sql<a class="headerlink" href="#sql_1" title="Permanent link">&para;</a></h3>
<table>
<thead>
<tr>
<th>用例编号</th>
<th>用例标题</th>
<th>请求头</th>
<th>路径</th>
<th>是否执行</th>
<th>请求方式</th>
<th>入参关键字</th>
<th>上传文件</th>
<th>请求数据</th>
<th>提取参数</th>
<th>后置SQL</th>
<th>预期结果</th>
</tr>
</thead>
<tbody>
<tr>
<td>c1</td>
<td>get登录</td>
<td></td>
<td>login</td>
<td></td>
<td>get</td>
<td>params</td>
<td></td>
<td>{"username": "admin", "password": ""}</td>
<td>{"msg":"$.meta.msg"}</td>
<td>select * from apis; select * from cases</td>
<td>{"$.meta.status":400}</td>
</tr>
</tbody>
</table>
<p><mark><strong>执行后参数字典为:</strong></mark>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="nt">&quot;msg&quot;</span><span class="p">:</span> <span class="s2">&quot;参数错误&quot;</span><span class="p">,</span>
<span class="nt">&quot;id&quot;</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
<span class="nt">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;updatehahaha&quot;</span><span class="p">,</span>
<span class="nt">&quot;path&quot;</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
<span class="nt">&quot;body&quot;</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
<span class="nt">&quot;expected&quot;</span><span class="p">:</span> <span class="s2">&quot;{\&quot;msg\&quot;: \&quot;你好\&quot;}&quot;</span><span class="p">,</span>
<span class="nt">&quot;api_id&quot;</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
<span class="nt">&quot;create_at&quot;</span><span class="p">:</span> <span class="s2">&quot;2021-05-17 17:23:54&quot;</span><span class="p">,</span>
<span class="nt">&quot;update_at&quot;</span><span class="p">:</span> <span class="s2">&quot;2021-05-17 17:23:54&quot;</span>
<span class="p">}</span>
</code></pre></div>
<mark><strong>sql执行结果为:</strong></mark>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="nt">&quot;id&quot;</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
<span class="nt">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;updatehahaha&quot;</span><span class="p">,</span>
<span class="nt">&quot;path&quot;</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
<span class="nt">&quot;body&quot;</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
<span class="nt">&quot;expected&quot;</span><span class="p">:</span> <span class="s2">&quot;{\&quot;msg\&quot;: \&quot;你好\&quot;}&quot;</span><span class="p">,</span>
<span class="nt">&quot;api_id&quot;</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
<span class="nt">&quot;create_at&quot;</span><span class="p">:</span> <span class="s2">&quot;2021-05-17 17:23:54&quot;</span><span class="p">,</span>
<span class="nt">&quot;update_at&quot;</span><span class="p">:</span> <span class="s2">&quot;2021-05-17 17:23:54&quot;</span>
<span class="p">}</span>
</code></pre></div></p>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer">
<a href="../extra/" class="md-footer__link md-footer__link--prev" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</div>
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Previous
</span>
4.6 提取参数
</div>
</div>
</a>
<a href="../assert/" class="md-footer__link md-footer__link--next" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Next
</span>
4.8 预期结果
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../../..", "features": [], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../../../assets/javascripts/workers/search.4fa0e4ee.min.js", "version": null}</script>
<script src="../../../assets/javascripts/bundle.1d3bfcf1.min.js"></script>
</body>
</html>

706
apiAutoTest/case/url/index.html Executable file
View File

@ -0,0 +1,706 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="../../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.1.4">
<title>4.3 接口地址 - apiAutoTest手册</title>
<link rel="stylesheet" href="../../../assets/stylesheets/main.bde7dde4.min.css">
<link rel="stylesheet" href="../../../assets/stylesheets/palette.ef6f36e2.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
<style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Roboto Mono"}</style>
</head>
<body dir="ltr" data-md-color-scheme="" data-md-color-primary="none" data-md-color-accent="none">
<script>function __prefix(e){return new URL("../../..",location).pathname+"."+e}function __get(e,t=localStorage){return JSON.parse(t.getItem(__prefix(e)))}</script>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#_1" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../../.." title="apiAutoTest手册" class="md-header__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
apiAutoTest手册
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
4.3 接口地址
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../../.." title="apiAutoTest手册" class="md-nav__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
apiAutoTest手册
</label>
<div class="md-nav__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../.." class="md-nav__link">
介绍
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2" type="checkbox" id="__nav_2" checked>
<label class="md-nav__link" for="__nav_2">
使用
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="使用" data-md-level="1">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
使用
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../use/" class="md-nav__link">
1. 进行体验
</a>
</li>
<li class="md-nav__item">
<a href="../../structure/" class="md-nav__link">
2. 目录结构
</a>
</li>
<li class="md-nav__item">
<a href="../../config/" class="md-nav__link">
3. 配置文件
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_4" type="checkbox" id="__nav_2_4" checked>
<label class="md-nav__link" for="__nav_2_4">
4. 用例文件
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="4. 用例文件" data-md-level="2">
<label class="md-nav__title" for="__nav_2_4">
<span class="md-nav__icon md-icon"></span>
4. 用例文件
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../base/" class="md-nav__link">
4.1 基本介绍
</a>
</li>
<li class="md-nav__item">
<a href="../header/" class="md-nav__link">
4.2 请求头
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
4.3 接口地址
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
4.3 接口地址
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
示例
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../files/" class="md-nav__link">
4.4 上传文件
</a>
</li>
<li class="md-nav__item">
<a href="../data/" class="md-nav__link">
4.5 请求数据
</a>
</li>
<li class="md-nav__item">
<a href="../extra/" class="md-nav__link">
4.6 提取参数
</a>
</li>
<li class="md-nav__item">
<a href="../sql/" class="md-nav__link">
4.7 后置sql
</a>
</li>
<li class="md-nav__item">
<a href="../assert/" class="md-nav__link">
4.8 预期结果
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../hooks/" class="md-nav__link">
5. 自定义函数
</a>
</li>
<li class="md-nav__item">
<a href="../../jenkins/" class="md-nav__link">
6. Jenkins集成
</a>
</li>
<li class="md-nav__item">
<a href="../../recording/" class="md-nav__link">
7. 接口录制
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../../about/" class="md-nav__link">
关于
</a>
</li>
<li class="md-nav__item">
<a href="../../../change/" class="md-nav__link">
更新日志
</a>
</li>
<li class="md-nav__item">
<a href="../../../license/" class="md-nav__link">
开源协议
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
示例
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/zy7y/apiAutoTest/edit/master/docs/apiAutoTest/case/url.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
</a>
<h1>4.3 接口地址</h1>
<div class="admonition note">
<p class="admonition-title">前置处理</p>
<div class="admonition tip">
<p class="admonition-title">使用变量</p>
<p>来源: <code>响应提取</code><code>后置SQL结果</code><br />
使用<code>$变量名</code> 或者 <code>${变量名}</code>的方式来引用变量</p>
</div>
<div class="admonition tip">
<p class="admonition-title">使用函数</p>
<p>来源:<code>tools/hooks.py</code> 定义的函数<br />
调用无参方法:<code>${方法名()}</code><br />
调用有参方法:<code>${方法名(参数)}</code></p>
</div>
<p>经过上面两道工序处理之后,返回的<code>url</code>将被追加到<code>环境url末尾</code></p>
</div>
<h2 id="_1">示例<a class="headerlink" href="#_1" title="Permanent link">&para;</a></h2>
<p><mark><code>config/config.yaml</code><code>server</code>配置如下:</mark>
<div class="highlight"><pre><span></span><code><span class="nt">server</span><span class="p">:</span>
<span class="c1"># 本地接口服务</span>
<span class="nt">test</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">http://127.0.0.1:8888/</span>
<span class="c1"># https://space.bilibili.com/283273603 演示项目后端服务来自</span>
<span class="nt">dev</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">http://www.ysqorz.top:8888/api/private/v1/</span>
</code></pre></div>
<mark><code>test/test_api.py</code>如下</mark>
<div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">test_main</span><span class="p">(</span><span class="n">cases</span><span class="p">):</span> <span class="c1"># 不使用数据库功能</span>
<span class="c1"># 发送请求, 不传env 关键字参数默认使用 dev环境</span>
<span class="n">response</span><span class="p">,</span> <span class="n">expect</span><span class="p">,</span> <span class="n">sql</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">action</span><span class="p">(</span><span class="n">cases</span><span class="p">)</span>
<span class="c1"># 断言操作</span>
<span class="n">DataProcess</span><span class="o">.</span><span class="n">assert_result</span><span class="p">(</span><span class="n">response</span><span class="p">,</span> <span class="n">expect</span><span class="p">)</span>
</code></pre></div></p>
<table>
<thead>
<tr>
<th>用例编号</th>
<th>用例标题</th>
<th>请求头</th>
<th>路径</th>
<th>是否执行</th>
<th>请求方式</th>
<th>入参关键字</th>
<th>上传文件</th>
<th>请求数据</th>
<th>提取参数</th>
<th>后置SQL</th>
<th>预期结果</th>
</tr>
</thead>
<tbody>
<tr>
<td>c1</td>
<td>get登录</td>
<td>{"c1": "为c1添加的请求头"}</td>
<td>login</td>
<td></td>
<td>get</td>
<td>params</td>
<td></td>
<td>{"username": "admin", "password": ""}</td>
<td>{"msg":"$.meta.msg"}</td>
<td></td>
<td>{"$.meta.status":400}</td>
</tr>
</tbody>
</table>
<p><mark><code>c1</code>最终请求地址如下:</mark>
<div class="highlight"><pre><span></span><code>http://www.ysqorz.top:8888/api/private/v1/login
</code></pre></div></p>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer">
<a href="../header/" class="md-footer__link md-footer__link--prev" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</div>
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Previous
</span>
4.2 请求头
</div>
</div>
</a>
<a href="../files/" class="md-footer__link md-footer__link--next" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Next
</span>
4.4 上传文件
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../../..", "features": [], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../../../assets/javascripts/workers/search.4fa0e4ee.min.js", "version": null}</script>
<script src="../../../assets/javascripts/bundle.1d3bfcf1.min.js"></script>
</body>
</html>

889
apiAutoTest/config/index.html Executable file
View File

@ -0,0 +1,889 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.1.4">
<title>3. 配置文件 - apiAutoTest手册</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.bde7dde4.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.ef6f36e2.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
<style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Roboto Mono"}</style>
</head>
<body dir="ltr" data-md-color-scheme="" data-md-color-primary="none" data-md-color-accent="none">
<script>function __prefix(e){return new URL("../..",location).pathname+"."+e}function __get(e,t=localStorage){return JSON.parse(t.getItem(__prefix(e)))}</script>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#_1" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="apiAutoTest手册" class="md-header__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
apiAutoTest手册
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
3. 配置文件
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../.." title="apiAutoTest手册" class="md-nav__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
apiAutoTest手册
</label>
<div class="md-nav__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../.." class="md-nav__link">
介绍
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2" type="checkbox" id="__nav_2" checked>
<label class="md-nav__link" for="__nav_2">
使用
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="使用" data-md-level="1">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
使用
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../use/" class="md-nav__link">
1. 进行体验
</a>
</li>
<li class="md-nav__item">
<a href="../structure/" class="md-nav__link">
2. 目录结构
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
3. 配置文件
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
3. 配置文件
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
示例
</a>
</li>
<li class="md-nav__item">
<a href="#server" class="md-nav__link">
server
</a>
<nav class="md-nav" aria-label="server">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#_2" class="md-nav__link">
修改环境
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#request_headers" class="md-nav__link">
request_headers
</a>
</li>
<li class="md-nav__item">
<a href="#file_path" class="md-nav__link">
file_path
</a>
</li>
<li class="md-nav__item">
<a href="#email" class="md-nav__link">
email
</a>
</li>
<li class="md-nav__item">
<a href="#database" class="md-nav__link">
database
</a>
<nav class="md-nav" aria-label="database">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#ssh_server" class="md-nav__link">
ssh_server
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_4" type="checkbox" id="__nav_2_4" >
<label class="md-nav__link" for="__nav_2_4">
4. 用例文件
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="4. 用例文件" data-md-level="2">
<label class="md-nav__title" for="__nav_2_4">
<span class="md-nav__icon md-icon"></span>
4. 用例文件
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../case/base/" class="md-nav__link">
4.1 基本介绍
</a>
</li>
<li class="md-nav__item">
<a href="../case/header/" class="md-nav__link">
4.2 请求头
</a>
</li>
<li class="md-nav__item">
<a href="../case/url/" class="md-nav__link">
4.3 接口地址
</a>
</li>
<li class="md-nav__item">
<a href="../case/files/" class="md-nav__link">
4.4 上传文件
</a>
</li>
<li class="md-nav__item">
<a href="../case/data/" class="md-nav__link">
4.5 请求数据
</a>
</li>
<li class="md-nav__item">
<a href="../case/extra/" class="md-nav__link">
4.6 提取参数
</a>
</li>
<li class="md-nav__item">
<a href="../case/sql/" class="md-nav__link">
4.7 后置sql
</a>
</li>
<li class="md-nav__item">
<a href="../case/assert/" class="md-nav__link">
4.8 预期结果
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../hooks/" class="md-nav__link">
5. 自定义函数
</a>
</li>
<li class="md-nav__item">
<a href="../jenkins/" class="md-nav__link">
6. Jenkins集成
</a>
</li>
<li class="md-nav__item">
<a href="../recording/" class="md-nav__link">
7. 接口录制
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../about/" class="md-nav__link">
关于
</a>
</li>
<li class="md-nav__item">
<a href="../../change/" class="md-nav__link">
更新日志
</a>
</li>
<li class="md-nav__item">
<a href="../../license/" class="md-nav__link">
开源协议
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
示例
</a>
</li>
<li class="md-nav__item">
<a href="#server" class="md-nav__link">
server
</a>
<nav class="md-nav" aria-label="server">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#_2" class="md-nav__link">
修改环境
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#request_headers" class="md-nav__link">
request_headers
</a>
</li>
<li class="md-nav__item">
<a href="#file_path" class="md-nav__link">
file_path
</a>
</li>
<li class="md-nav__item">
<a href="#email" class="md-nav__link">
email
</a>
</li>
<li class="md-nav__item">
<a href="#database" class="md-nav__link">
database
</a>
<nav class="md-nav" aria-label="database">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#ssh_server" class="md-nav__link">
ssh_server
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/zy7y/apiAutoTest/edit/master/docs/apiAutoTest/config.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
</a>
<h1>3. 配置文件</h1>
<h2 id="_1">示例<a class="headerlink" href="#_1" title="Permanent link">&para;</a></h2>
<div class="highlight"><pre><span></span><code><span class="c1"># config.yaml</span>
<span class="nt">server</span><span class="p">:</span>
<span class="c1"># 本地接口服务</span>
<span class="nt">test</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">http://127.0.0.1:8888/</span>
<span class="c1"># https://space.bilibili.com/283273603 演示项目后端服务来自</span>
<span class="nt">dev</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">http://www.ysqorz.top:8888/api/private/v1/</span>
<span class="c1"># 基准的请求头信息</span>
<span class="nt">request_headers</span><span class="p">:</span>
<span class="nt">Accept-Encoding</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">gzip, deflate</span>
<span class="nt">Accept-Language</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">zh-CN,zh;q=0.9</span>
<span class="nt">User-Agent</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36</span>
<span class="c1"># 相对于run.py</span>
<span class="nt">file_path</span><span class="p">:</span>
<span class="c1"># 用例数据路径</span>
<span class="nt">test_case</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">data/case_data.xls</span>
<span class="c1"># 报告生成路径</span>
<span class="nt">report</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">report/</span>
<span class="c1"># 日志文件路径</span>
<span class="nt">log</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">log/run{time}.log</span>
<span class="nt">email</span><span class="p">:</span>
<span class="c1"># 发件人邮箱</span>
<span class="nt">user</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">123456.com</span>
<span class="c1"># 发件人邮箱授权码</span>
<span class="nt">password</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">ASGCSFSGS</span>
<span class="c1"># 邮箱host</span>
<span class="nt">host</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">smtp.163.com</span>
<span class="nt">contents</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">解压apiAutoReport.zip(接口测试报告)后请使用已安装Live Server 插件的VsCode打开解压目录下的index.html查看报告</span>
<span class="c1"># 收件人邮箱</span>
<span class="nt">addressees</span><span class="p">:</span> <span class="p p-Indicator">[</span><span class="s">&quot;收件人邮箱1&quot;</span><span class="p p-Indicator">,</span> <span class="s">&quot;收件人邮箱2&quot;</span><span class="p p-Indicator">]</span>
<span class="nt">title</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">接口自动化测试报告(见附件)</span>
<span class="c1"># 附件</span>
<span class="nt">enclosures</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">report.zip</span>
<span class="c1"># 数据库校验- mysql</span>
<span class="nt">database</span><span class="p">:</span>
<span class="c1"># 数据库地址</span>
<span class="nt">host</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">localhost</span>
<span class="c1"># 数据库端口</span>
<span class="nt">port</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">3306</span>
<span class="c1"># 数据库用户名</span>
<span class="nt">user</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">root</span>
<span class="c1"># 不用&#39;&#39;会被解析成int类型数据 数据库密码</span>
<span class="nt">password</span><span class="p">:</span> <span class="s">&#39;123456&#39;</span>
<span class="c1"># 数据库名称</span>
<span class="nt">db_name</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">apiautotest</span>
<span class="c1"># 数据库编码</span>
<span class="nt">charset</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">utf8mb4</span>
<span class="c1"># 数据库所在的服务器配置,用于备份/还原数据文件,达到数据清洗</span>
<span class="nt">ssh_server</span><span class="p">:</span>
<span class="nt">port</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">22</span>
<span class="nt">username</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">root</span>
<span class="nt">password</span><span class="p">:</span> <span class="s">&#39;123456&#39;</span>
<span class="c1"># 私有密钥文件路径</span>
<span class="nt">private_key_file</span><span class="p">:</span>
<span class="c1"># 私钥密码</span>
<span class="nt">privat_passowrd</span><span class="p">:</span>
<span class="c1"># 如果使用的docker容器部署mysql服务需要传入mysql的容器id/name</span>
<span class="nt">mysql_container</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">mysql8</span>
<span class="c1"># 数据库备份文件导出的本地路径, 需要保证存在该文件夹</span>
<span class="nt">sql_data_file</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">backup_sqls/</span>
</code></pre></div>
<h2 id="server">server<a class="headerlink" href="#server" title="Permanent link">&para;</a></h2>
<div class="admonition info">
<p class="admonition-title">最终请求地址 = 基准地址 + 用例接口地址</p>
<p>服务的基准地址(个人理解多个接口都有的共同部分内容),默认使用的是<code>dev</code></p>
</div>
<h3 id="_2">修改环境<a class="headerlink" href="#_2" title="Permanent link">&para;</a></h3>
<div class="admonition abstract">
<p class="admonition-title">test/test_api.py<code>传入关键词参数</code>env=环境名`</p>
<div class="highlight"><pre><span></span><code><span class="o">...</span>
<span class="c1"># 发送请求</span>
<span class="n">response</span><span class="p">,</span> <span class="n">expect</span><span class="p">,</span> <span class="n">sql</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">action</span><span class="p">(</span><span class="n">cases</span><span class="p">,</span> <span class="n">env</span><span class="o">=</span><span class="s1">&#39;test&#39;</span><span class="p">)</span>
<span class="o">...</span>
</code></pre></div>
</div>
<h2 id="request_headers">request_headers<a class="headerlink" href="#request_headers" title="Permanent link">&para;</a></h2>
<div class="admonition info">
<p class="admonition-title">最终请求头 = 基准请求头 + 用例中的请求头</p>
<p>基准请求头,即为默认所有接口都会使用的基础请求头数据</p>
</div>
<h2 id="file_path">file_path<a class="headerlink" href="#file_path" title="Permanent link">&para;</a></h2>
<blockquote>
<p>指定用例文件地址报告生成地址log保存地址此处路径需要相对<code>run.py</code>的地址</p>
</blockquote>
<h2 id="email">email<a class="headerlink" href="#email" title="Permanent link">&para;</a></h2>
<div class="admonition tip">
<p class="admonition-title">如使用Jenkins集成可忽略</p>
<p><mark>需修改<code>run.py</code> 下处位置(解除注释即可)</mark>
<div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">run</span><span class="p">():</span>
<span class="o">...</span>
<span class="c1"># 发送邮件带附件报告</span>
<span class="n">EmailServe</span><span class="o">.</span><span class="n">send_email</span><span class="p">(</span><span class="n">email</span><span class="p">,</span> <span class="n">file_path</span><span class="p">[</span><span class="s1">&#39;report&#39;</span><span class="p">])</span>
<span class="c1"># 删除本地附件</span>
<span class="n">os</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">email</span><span class="p">[</span><span class="s1">&#39;enclosures&#39;</span><span class="p">])</span>
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">&#39;__main__&#39;</span><span class="p">:</span>
<span class="n">run</span><span class="p">()</span>
</code></pre></div></p>
</div>
<h2 id="database">database<a class="headerlink" href="#database" title="Permanent link">&para;</a></h2>
<div class="admonition info">
<p class="admonition-title">只支持mysql数据库</p>
<p><mark>不使用该功能<code>test/test_api.py</code><code>test_main</code>方法, 如下修改</mark>
<div class="highlight"><pre><span></span><code><span class="k">def</span> <span class="nf">test_main</span><span class="p">(</span><span class="n">cases</span><span class="p">):</span> <span class="c1"># 不使用数据库功能</span>
<span class="c1"># 发送请求</span>
<span class="n">response</span><span class="p">,</span> <span class="n">expect</span><span class="p">,</span> <span class="n">sql</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">action</span><span class="p">(</span><span class="n">cases</span><span class="p">)</span>
<span class="c1"># 断言操作</span>
<span class="n">DataProcess</span><span class="o">.</span><span class="n">assert_result</span><span class="p">(</span><span class="n">response</span><span class="p">,</span> <span class="n">expect</span><span class="p">)</span>
</code></pre></div></p>
</div>
<h3 id="ssh_server">ssh_server<a class="headerlink" href="#ssh_server" title="Permanent link">&para;</a></h3>
<div class="admonition info">
<p class="admonition-title">数据库备份,还原</p>
<p>用于连接数据库的服务器进行备份&amp;还原操作,如不需要,将<code>test/conftest.py</code>中的<code>get_db</code>方法,如下修改
<div class="highlight"><pre><span></span><code><span class="nd">@pytest</span><span class="o">.</span><span class="n">fixture</span><span class="p">(</span><span class="n">scope</span><span class="o">=</span><span class="s2">&quot;session&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">get_db</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;关于其作用域请移步查看官方文档&quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">db</span> <span class="o">=</span> <span class="n">DB</span><span class="p">()</span>
<span class="k">yield</span> <span class="n">db</span>
<span class="k">finally</span><span class="p">:</span>
<span class="n">db</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</code></pre></div></p>
</div>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer">
<a href="../structure/" class="md-footer__link md-footer__link--prev" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</div>
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Previous
</span>
2. 目录结构
</div>
</div>
</a>
<a href="../case/base/" class="md-footer__link md-footer__link--next" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Next
</span>
4.1 基本介绍
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../..", "features": [], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../../assets/javascripts/workers/search.4fa0e4ee.min.js", "version": null}</script>
<script src="../../assets/javascripts/bundle.1d3bfcf1.min.js"></script>
</body>
</html>

820
apiAutoTest/hooks/index.html Executable file
View File

@ -0,0 +1,820 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.1.4">
<title>5. 自定义函数 - apiAutoTest手册</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.bde7dde4.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.ef6f36e2.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
<style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Roboto Mono"}</style>
</head>
<body dir="ltr" data-md-color-scheme="" data-md-color-primary="none" data-md-color-accent="none">
<script>function __prefix(e){return new URL("../..",location).pathname+"."+e}function __get(e,t=localStorage){return JSON.parse(t.getItem(__prefix(e)))}</script>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#_1" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="apiAutoTest手册" class="md-header__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
apiAutoTest手册
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
5. 自定义函数
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../.." title="apiAutoTest手册" class="md-nav__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
apiAutoTest手册
</label>
<div class="md-nav__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../.." class="md-nav__link">
介绍
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2" type="checkbox" id="__nav_2" checked>
<label class="md-nav__link" for="__nav_2">
使用
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="使用" data-md-level="1">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
使用
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../use/" class="md-nav__link">
1. 进行体验
</a>
</li>
<li class="md-nav__item">
<a href="../structure/" class="md-nav__link">
2. 目录结构
</a>
</li>
<li class="md-nav__item">
<a href="../config/" class="md-nav__link">
3. 配置文件
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_4" type="checkbox" id="__nav_2_4" >
<label class="md-nav__link" for="__nav_2_4">
4. 用例文件
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="4. 用例文件" data-md-level="2">
<label class="md-nav__title" for="__nav_2_4">
<span class="md-nav__icon md-icon"></span>
4. 用例文件
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../case/base/" class="md-nav__link">
4.1 基本介绍
</a>
</li>
<li class="md-nav__item">
<a href="../case/header/" class="md-nav__link">
4.2 请求头
</a>
</li>
<li class="md-nav__item">
<a href="../case/url/" class="md-nav__link">
4.3 接口地址
</a>
</li>
<li class="md-nav__item">
<a href="../case/files/" class="md-nav__link">
4.4 上传文件
</a>
</li>
<li class="md-nav__item">
<a href="../case/data/" class="md-nav__link">
4.5 请求数据
</a>
</li>
<li class="md-nav__item">
<a href="../case/extra/" class="md-nav__link">
4.6 提取参数
</a>
</li>
<li class="md-nav__item">
<a href="../case/sql/" class="md-nav__link">
4.7 后置sql
</a>
</li>
<li class="md-nav__item">
<a href="../case/assert/" class="md-nav__link">
4.8 预期结果
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
5. 自定义函数
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
5. 自定义函数
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
机制
</a>
</li>
<li class="md-nav__item">
<a href="#_2" class="md-nav__link">
示例
</a>
<nav class="md-nav" aria-label="示例">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#_3" class="md-nav__link">
定义函数
</a>
</li>
<li class="md-nav__item">
<a href="#_4" class="md-nav__link">
请求路径使用自定义函数
</a>
</li>
<li class="md-nav__item">
<a href="#_5" class="md-nav__link">
请求数据使用自定义函数
</a>
</li>
<li class="md-nav__item">
<a href="#_6" class="md-nav__link">
请求头使用自定义函数
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../jenkins/" class="md-nav__link">
6. Jenkins集成
</a>
</li>
<li class="md-nav__item">
<a href="../recording/" class="md-nav__link">
7. 接口录制
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../about/" class="md-nav__link">
关于
</a>
</li>
<li class="md-nav__item">
<a href="../../change/" class="md-nav__link">
更新日志
</a>
</li>
<li class="md-nav__item">
<a href="../../license/" class="md-nav__link">
开源协议
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
机制
</a>
</li>
<li class="md-nav__item">
<a href="#_2" class="md-nav__link">
示例
</a>
<nav class="md-nav" aria-label="示例">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#_3" class="md-nav__link">
定义函数
</a>
</li>
<li class="md-nav__item">
<a href="#_4" class="md-nav__link">
请求路径使用自定义函数
</a>
</li>
<li class="md-nav__item">
<a href="#_5" class="md-nav__link">
请求数据使用自定义函数
</a>
</li>
<li class="md-nav__item">
<a href="#_6" class="md-nav__link">
请求头使用自定义函数
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/zy7y/apiAutoTest/edit/master/docs/apiAutoTest/hooks.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
</a>
<h1>5. 自定义函数</h1>
<h2 id="_1">机制<a class="headerlink" href="#_1" title="Permanent link">&para;</a></h2>
<blockquote>
<p>有些特殊参数生成规则, 如md5加解密等, 则可在此处定义</p>
<p>定义之后使用<code>${方法名()}</code> 调用无参函数, <code>${方法名(参数名)}</code>调用有参函数</p>
</blockquote>
<h2 id="_2">示例<a class="headerlink" href="#_2" title="Permanent link">&para;</a></h2>
<h3 id="_3">定义函数<a class="headerlink" href="#_3" title="Permanent link">&para;</a></h3>
<p><strong><code>tools/hooks.py</code></strong>
<div class="highlight"><pre><span></span><code><span class="c1"># hooks.py</span>
<span class="c1">#!/usr/bin/env python</span>
<span class="c1"># _*_ coding: utf-8 _*_</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">@project: apiAutoTest</span>
<span class="sd">@file: hooks.py</span>
<span class="sd">@author: zy7y</span>
<span class="sd">@time: 2021/2/27</span>
<span class="sd">@site: https://cnblogs.com/zy7y</span>
<span class="sd">@github: https://github.com/zy7y</span>
<span class="sd">@gitee: https://gitee.com/zy7y</span>
<span class="sd">@desc: 扩展方法, 2021/02/27</span>
<span class="sd">关于exec执行python代码可查阅资料https://python3-cookbook.readthedocs.io/zh_CN/latest/c09/p23_executing_code_with_local_side_effects.html</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">time</span>
<span class="k">def</span> <span class="nf">get_current_highest</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;获取当前时间戳&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">set_token</span><span class="p">(</span><span class="n">token</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;设置token直接返回字典&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="p">{</span><span class="s2">&quot;Authorization&quot;</span><span class="p">:</span> <span class="n">token</span><span class="p">}</span>
<span class="k">def</span> <span class="nf">sum_data</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;计算函数&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">a</span> <span class="o">+</span> <span class="n">b</span>
</code></pre></div></p>
<h3 id="_4">请求路径使用自定义函数<a class="headerlink" href="#_4" title="Permanent link">&para;</a></h3>
<table>
<thead>
<tr>
<th>用例编号</th>
<th>用例标题</th>
<th>请求头</th>
<th>路径</th>
<th>是否执行</th>
<th>请求方式</th>
<th>入参关键字</th>
<th>上传文件</th>
<th>请求数据</th>
<th>提取参数</th>
<th>后置SQL</th>
<th>预期结果</th>
</tr>
</thead>
<tbody>
<tr>
<td>c1</td>
<td>get登录</td>
<td>{"timer": "${get_current_highest()}"}</td>
<td>login/${get_current_highest()}</td>
<td></td>
<td>get</td>
<td>params</td>
<td></td>
<td>{"username": "admin", "password": ""}</td>
<td>{"msg":"$.meta.msg"}</td>
<td></td>
<td>{"$.meta.status":400}</td>
</tr>
</tbody>
</table>
<p><mark><strong>请求数据处理:</strong></mark></p>
<blockquote>
<p>假设基准地址使用的是 <code>dev</code>: <code>http://www.ysqorz.top:8888/api/private/v1/</code></p>
<p>假设当前时间戳为: 1621422609</p>
</blockquote>
<p><strong>最终请求地址为: <code>http://www.ysqorz.top:8888/api/private/v1/login/1621422609</code></strong> </p>
<h3 id="_5">请求数据使用自定义函数<a class="headerlink" href="#_5" title="Permanent link">&para;</a></h3>
<p><a href="../case/data/">请求数据</a></p>
<h3 id="_6">请求头使用自定义函数<a class="headerlink" href="#_6" title="Permanent link">&para;</a></h3>
<p><mark><strong>请求头数据处理:</strong></mark>
<mark><code>config/config.yaml</code><code>request_header</code>配置如下:</mark>
<div class="highlight"><pre><span></span><code><span class="c1"># 基准的请求头信息</span>
<span class="nt">request_headers</span><span class="p">:</span>
<span class="nt">Accept-Encoding</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">gzip, deflate</span>
<span class="nt">Accept-Language</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">zh-CN,zh;q=0.9</span>
<span class="nt">User-Agent</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36</span>
</code></pre></div>
<mark><strong>最终请求头数据如下:</strong></mark>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="nt">&quot;Accept-Encoding&quot;</span><span class="p">:</span> <span class="s2">&quot;gzip, deflate&quot;</span><span class="p">,</span>
<span class="nt">&quot;Accept-Language&quot;</span><span class="p">:</span> <span class="s2">&quot;zh-CN,zh;q=0.9&quot;</span><span class="p">,</span>
<span class="nt">&quot;User-Agent&quot;</span><span class="p">:</span> <span class="s2">&quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36&quot;</span><span class="p">,</span>
<span class="nt">&quot;timer&quot;</span><span class="p">:</span> <span class="s2">&quot;1621422609&quot;</span>
<span class="p">}</span>
</code></pre></div></p>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer">
<a href="../case/assert/" class="md-footer__link md-footer__link--prev" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</div>
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Previous
</span>
4.8 预期结果
</div>
</div>
</a>
<a href="../jenkins/" class="md-footer__link md-footer__link--next" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Next
</span>
6. Jenkins集成
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../..", "features": [], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../../assets/javascripts/workers/search.4fa0e4ee.min.js", "version": null}</script>
<script src="../../assets/javascripts/bundle.1d3bfcf1.min.js"></script>
</body>
</html>

639
apiAutoTest/jenkins/index.html Executable file
View File

@ -0,0 +1,639 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.1.4">
<title>6. Jenkins集成 - apiAutoTest手册</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.bde7dde4.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.ef6f36e2.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
<style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Roboto Mono"}</style>
</head>
<body dir="ltr" data-md-color-scheme="" data-md-color-primary="none" data-md-color-accent="none">
<script>function __prefix(e){return new URL("../..",location).pathname+"."+e}function __get(e,t=localStorage){return JSON.parse(t.getItem(__prefix(e)))}</script>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#_1" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="apiAutoTest手册" class="md-header__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
apiAutoTest手册
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
6. Jenkins集成
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../.." title="apiAutoTest手册" class="md-nav__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
apiAutoTest手册
</label>
<div class="md-nav__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../.." class="md-nav__link">
介绍
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2" type="checkbox" id="__nav_2" checked>
<label class="md-nav__link" for="__nav_2">
使用
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="使用" data-md-level="1">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
使用
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../use/" class="md-nav__link">
1. 进行体验
</a>
</li>
<li class="md-nav__item">
<a href="../structure/" class="md-nav__link">
2. 目录结构
</a>
</li>
<li class="md-nav__item">
<a href="../config/" class="md-nav__link">
3. 配置文件
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_4" type="checkbox" id="__nav_2_4" >
<label class="md-nav__link" for="__nav_2_4">
4. 用例文件
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="4. 用例文件" data-md-level="2">
<label class="md-nav__title" for="__nav_2_4">
<span class="md-nav__icon md-icon"></span>
4. 用例文件
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../case/base/" class="md-nav__link">
4.1 基本介绍
</a>
</li>
<li class="md-nav__item">
<a href="../case/header/" class="md-nav__link">
4.2 请求头
</a>
</li>
<li class="md-nav__item">
<a href="../case/url/" class="md-nav__link">
4.3 接口地址
</a>
</li>
<li class="md-nav__item">
<a href="../case/files/" class="md-nav__link">
4.4 上传文件
</a>
</li>
<li class="md-nav__item">
<a href="../case/data/" class="md-nav__link">
4.5 请求数据
</a>
</li>
<li class="md-nav__item">
<a href="../case/extra/" class="md-nav__link">
4.6 提取参数
</a>
</li>
<li class="md-nav__item">
<a href="../case/sql/" class="md-nav__link">
4.7 后置sql
</a>
</li>
<li class="md-nav__item">
<a href="../case/assert/" class="md-nav__link">
4.8 预期结果
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../hooks/" class="md-nav__link">
5. 自定义函数
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
6. Jenkins集成
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
6. Jenkins集成
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
资料
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../recording/" class="md-nav__link">
7. 接口录制
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../about/" class="md-nav__link">
关于
</a>
</li>
<li class="md-nav__item">
<a href="../../change/" class="md-nav__link">
更新日志
</a>
</li>
<li class="md-nav__item">
<a href="../../license/" class="md-nav__link">
开源协议
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
资料
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/zy7y/apiAutoTest/edit/master/docs/apiAutoTest/jenkins.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
</a>
<h1>6. Jenkins集成</h1>
<h2 id="_1">资料<a class="headerlink" href="#_1" title="Permanent link">&para;</a></h2>
<p><a href="https://www.cnblogs.com/zy7y/p/13448102.html">apiAutoTest集成Jenkins</a></p>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer">
<a href="../hooks/" class="md-footer__link md-footer__link--prev" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</div>
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Previous
</span>
5. 自定义函数
</div>
</div>
</a>
<a href="../recording/" class="md-footer__link md-footer__link--next" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Next
</span>
7. 接口录制
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../..", "features": [], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../../assets/javascripts/workers/search.4fa0e4ee.min.js", "version": null}</script>
<script src="../../assets/javascripts/bundle.1d3bfcf1.min.js"></script>
</body>
</html>

768
apiAutoTest/recording/index.html Executable file
View File

@ -0,0 +1,768 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.1.4">
<title>7. 接口录制 - apiAutoTest手册</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.bde7dde4.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.ef6f36e2.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
<style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Roboto Mono"}</style>
</head>
<body dir="ltr" data-md-color-scheme="" data-md-color-primary="none" data-md-color-accent="none">
<script>function __prefix(e){return new URL("../..",location).pathname+"."+e}function __get(e,t=localStorage){return JSON.parse(t.getItem(__prefix(e)))}</script>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#_1" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="apiAutoTest手册" class="md-header__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
apiAutoTest手册
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
7. 接口录制
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../.." title="apiAutoTest手册" class="md-nav__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
apiAutoTest手册
</label>
<div class="md-nav__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../.." class="md-nav__link">
介绍
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2" type="checkbox" id="__nav_2" checked>
<label class="md-nav__link" for="__nav_2">
使用
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="使用" data-md-level="1">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
使用
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../use/" class="md-nav__link">
1. 进行体验
</a>
</li>
<li class="md-nav__item">
<a href="../structure/" class="md-nav__link">
2. 目录结构
</a>
</li>
<li class="md-nav__item">
<a href="../config/" class="md-nav__link">
3. 配置文件
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_4" type="checkbox" id="__nav_2_4" >
<label class="md-nav__link" for="__nav_2_4">
4. 用例文件
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="4. 用例文件" data-md-level="2">
<label class="md-nav__title" for="__nav_2_4">
<span class="md-nav__icon md-icon"></span>
4. 用例文件
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../case/base/" class="md-nav__link">
4.1 基本介绍
</a>
</li>
<li class="md-nav__item">
<a href="../case/header/" class="md-nav__link">
4.2 请求头
</a>
</li>
<li class="md-nav__item">
<a href="../case/url/" class="md-nav__link">
4.3 接口地址
</a>
</li>
<li class="md-nav__item">
<a href="../case/files/" class="md-nav__link">
4.4 上传文件
</a>
</li>
<li class="md-nav__item">
<a href="../case/data/" class="md-nav__link">
4.5 请求数据
</a>
</li>
<li class="md-nav__item">
<a href="../case/extra/" class="md-nav__link">
4.6 提取参数
</a>
</li>
<li class="md-nav__item">
<a href="../case/sql/" class="md-nav__link">
4.7 后置sql
</a>
</li>
<li class="md-nav__item">
<a href="../case/assert/" class="md-nav__link">
4.8 预期结果
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../hooks/" class="md-nav__link">
5. 自定义函数
</a>
</li>
<li class="md-nav__item">
<a href="../jenkins/" class="md-nav__link">
6. Jenkins集成
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
7. 接口录制
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
7. 接口录制
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
机制
</a>
</li>
<li class="md-nav__item">
<a href="#_2" class="md-nav__link">
如何录制
</a>
<nav class="md-nav" aria-label="如何录制">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#_3" class="md-nav__link">
录制的用例
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#_4" class="md-nav__link">
使用录制的用例
</a>
<nav class="md-nav" aria-label="使用录制的用例">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#_5" class="md-nav__link">
执行结果
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../about/" class="md-nav__link">
关于
</a>
</li>
<li class="md-nav__item">
<a href="../../change/" class="md-nav__link">
更新日志
</a>
</li>
<li class="md-nav__item">
<a href="../../license/" class="md-nav__link">
开源协议
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
机制
</a>
</li>
<li class="md-nav__item">
<a href="#_2" class="md-nav__link">
如何录制
</a>
<nav class="md-nav" aria-label="如何录制">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#_3" class="md-nav__link">
录制的用例
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#_4" class="md-nav__link">
使用录制的用例
</a>
<nav class="md-nav" aria-label="使用录制的用例">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#_5" class="md-nav__link">
执行结果
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/zy7y/apiAutoTest/edit/master/docs/apiAutoTest/recording.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
</a>
<h1>7. 接口录制</h1>
<h2 id="_1">机制<a class="headerlink" href="#_1" title="Permanent link">&para;</a></h2>
<blockquote>
<p>基于mitmproxy, <a href="https://www.cnblogs.com/zy7y/p/14798151.html">抓包微信小程序</a> 使用其提供的扩展API, 通过mitmproxy 实现代理之后捕获到HTTP/HTTPS请求,并把请求已追加的形式添加到excel中当录制完成务必使用ctrl + c 关闭录制,将生成一个完成的用例数据文件</p>
</blockquote>
<p><strong>可指定录制包含请求地址的接口</strong></p>
<h2 id="_2">如何录制<a class="headerlink" href="#_2" title="Permanent link">&para;</a></h2>
<ol>
<li>
<p>前置条件: <a href="https://www.cnblogs.com/zy7y/p/14798151.html">https://www.cnblogs.com/zy7y/p/14798151.html</a></p>
</li>
<li>
<p>打开本机代理</p>
</li>
</ol>
<p><img alt="" src="https://gitee.com/zy7y/blog_images/raw/master/img/image-20210521210327355.png" /></p>
<ol>
<li>修改<code>tools\recording.py</code>中配置抓包请求地址, 用例生成路径</li>
</ol>
<p><img alt="" src="https://gitee.com/zy7y/blog_images/raw/master/img/20210522103930.png" /></p>
<ol>
<li><code>apiAutoTest</code>根目录下执行</li>
</ol>
<div class="highlight"><pre><span></span><code>mitmweb -s tools<span class="se">\r</span>ecording.py
</code></pre></div>
<p><img alt="" src="https://gitee.com/zy7y/blog_images/raw/master/img/20210522104022.png" /></p>
<ol>
<li>正常去使用就行了,当不需要录制的时候 在上面这个窗口<code>Ctrl + C</code>停止录制,然后关闭本机代理</li>
</ol>
<p><img alt="" src="https://gitee.com/zy7y/blog_images/raw/master/img/20210522104541.png" /></p>
<h3 id="_3">录制的用例<a class="headerlink" href="#_3" title="Permanent link">&para;</a></h3>
<p><img alt="" src="https://gitee.com/zy7y/blog_images/raw/master/img/20210522103254.png" /></p>
<p>**因为默认录制的url是完整的url,所以如果直接用这个文件,请把<code>config/config.yaml</code>中的<code>serve</code> dev 基准地址换成<code>""</code>, 因为条件有限没法覆盖测试很多内容这快功能可能会有<code>Bug</code> 目前个人测试了<code>Graphql</code>**规范接口的录制,<code>RestFul</code>规范接口录制, 不排除其他的无法完整的生成用例文件</p>
<p><strong>需要注意Excel 单元格字符数限制问题, Graphql规范接口非常容易出现不可写入的情况, 单从业务接口来说应该不容易出现此类问题</strong></p>
<h2 id="_4">使用录制的用例<a class="headerlink" href="#_4" title="Permanent link">&para;</a></h2>
<p><strong><code>config/config.yaml</code>修改基准地址<code>dev</code><code>""</code>,指定使用录制的用例文件</strong></p>
<div class="highlight"><pre><span></span><code><span class="nt">server</span><span class="p">:</span>
<span class="c1"># 本地接口服务</span>
<span class="nt">test</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">http://127.0.0.1:8888/</span>
<span class="c1"># https://space.bilibili.com/283273603 演示项目后端服务来自</span>
<span class="c1"># dev: http://www.ysqorz.top:8888/api/private/v1/</span>
<span class="nt">dev</span><span class="p">:</span> <span class="s">&#39;&#39;</span>
<span class="c1"># 基准的请求头信息</span>
<span class="nt">request_headers</span><span class="p">:</span> <span class="p p-Indicator">{}</span>
<span class="nt">file_path</span><span class="p">:</span>
<span class="nt">test_case</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">data/case_data1.xls</span> <span class="c1"># 指定使用那个用例,这里使用了录制的用例</span>
<span class="nt">report</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">report/</span>
<span class="nt">log</span><span class="p">:</span> <span class="l l-Scalar l-Scalar-Plain">log/run{time}.log</span>
<span class="l l-Scalar l-Scalar-Plain">....</span>
</code></pre></div>
<h3 id="_5">执行结果<a class="headerlink" href="#_5" title="Permanent link">&para;</a></h3>
<p><img alt="" src="https://gitee.com/zy7y/blog_images/raw/master/img/20210522104741.png" /></p>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer">
<a href="../jenkins/" class="md-footer__link md-footer__link--prev" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</div>
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Previous
</span>
6. Jenkins集成
</div>
</div>
</a>
<a href="../../about/" class="md-footer__link md-footer__link--next" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Next
</span>
关于
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../..", "features": [], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../../assets/javascripts/workers/search.4fa0e4ee.min.js", "version": null}</script>
<script src="../../assets/javascripts/bundle.1d3bfcf1.min.js"></script>
</body>
</html>

604
apiAutoTest/structure/index.html Executable file
View File

@ -0,0 +1,604 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.1.4">
<title>2. 目录结构 - apiAutoTest手册</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.bde7dde4.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.ef6f36e2.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
<style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Roboto Mono"}</style>
</head>
<body dir="ltr" data-md-color-scheme="" data-md-color-primary="none" data-md-color-accent="none">
<script>function __prefix(e){return new URL("../..",location).pathname+"."+e}function __get(e,t=localStorage){return JSON.parse(t.getItem(__prefix(e)))}</script>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="apiAutoTest手册" class="md-header__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
apiAutoTest手册
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
2. 目录结构
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../.." title="apiAutoTest手册" class="md-nav__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
apiAutoTest手册
</label>
<div class="md-nav__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../.." class="md-nav__link">
介绍
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2" type="checkbox" id="__nav_2" checked>
<label class="md-nav__link" for="__nav_2">
使用
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="使用" data-md-level="1">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
使用
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../use/" class="md-nav__link">
1. 进行体验
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<a href="./" class="md-nav__link md-nav__link--active">
2. 目录结构
</a>
</li>
<li class="md-nav__item">
<a href="../config/" class="md-nav__link">
3. 配置文件
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_4" type="checkbox" id="__nav_2_4" >
<label class="md-nav__link" for="__nav_2_4">
4. 用例文件
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="4. 用例文件" data-md-level="2">
<label class="md-nav__title" for="__nav_2_4">
<span class="md-nav__icon md-icon"></span>
4. 用例文件
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../case/base/" class="md-nav__link">
4.1 基本介绍
</a>
</li>
<li class="md-nav__item">
<a href="../case/header/" class="md-nav__link">
4.2 请求头
</a>
</li>
<li class="md-nav__item">
<a href="../case/url/" class="md-nav__link">
4.3 接口地址
</a>
</li>
<li class="md-nav__item">
<a href="../case/files/" class="md-nav__link">
4.4 上传文件
</a>
</li>
<li class="md-nav__item">
<a href="../case/data/" class="md-nav__link">
4.5 请求数据
</a>
</li>
<li class="md-nav__item">
<a href="../case/extra/" class="md-nav__link">
4.6 提取参数
</a>
</li>
<li class="md-nav__item">
<a href="../case/sql/" class="md-nav__link">
4.7 后置sql
</a>
</li>
<li class="md-nav__item">
<a href="../case/assert/" class="md-nav__link">
4.8 预期结果
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../hooks/" class="md-nav__link">
5. 自定义函数
</a>
</li>
<li class="md-nav__item">
<a href="../jenkins/" class="md-nav__link">
6. Jenkins集成
</a>
</li>
<li class="md-nav__item">
<a href="../recording/" class="md-nav__link">
7. 接口录制
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../about/" class="md-nav__link">
关于
</a>
</li>
<li class="md-nav__item">
<a href="../../change/" class="md-nav__link">
更新日志
</a>
</li>
<li class="md-nav__item">
<a href="../../license/" class="md-nav__link">
开源协议
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/zy7y/apiAutoTest/edit/master/docs/apiAutoTest/structure.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
</a>
<h1>2. 目录结构</h1>
<div class="highlight"><pre><span></span><code>├─api
│ ├─client.py <span class="c1"># 新版请求封装</span>
│ └─base_requests.py <span class="c1"># 请求封装</span>
├─backup_sqls
│ └─xxx.sql <span class="c1"># 数据库备份文件</span>
├─config
│ └─config.yaml <span class="c1"># 配置文件</span>
├─data
│ └─test_data.xlsx <span class="c1"># 用例文件</span>
├─log
│ └─run...x.log <span class="c1"># 日志文件</span>
├─report
│ ├─data
│ └─html <span class="c1"># allure报告</span>
├─test
│ ├─conftest.py <span class="c1"># 依赖对象初始化</span>
│ └─test_api.py <span class="c1"># 测试文件</span>
├─tools <span class="c1"># 工具包</span>
│ ├─__init__.py <span class="c1"># 常用方法封装</span>
│ ├─data_clearing.py <span class="c1"># 数据隔离</span>
│ ├─data_process.py <span class="c1"># 依赖数据处理</span>
│ ├─db.py <span class="c1"># 数据库连接对象</span>
│ ├─hooks.py <span class="c1"># 自定义扩展方法(可用于用例)文件 </span>
│ ├─read_file.py <span class="c1"># 用例、配置项读取</span>
│ ├─recording.py <span class="c1"># 接口录制,写入用例文件</span>
│ └─send_email.py <span class="c1"># 邮件发送、报告压缩</span>
├─项目实战接口文档.md <span class="c1"># 配套项目相关接口文档</span>
├─requirements.txt <span class="c1"># 项目依赖库文件</span>
└─run.py <span class="c1"># 主启动文件</span>
</code></pre></div>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer">
<a href="../use/" class="md-footer__link md-footer__link--prev" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</div>
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Previous
</span>
1. 进行体验
</div>
</div>
</a>
<a href="../config/" class="md-footer__link md-footer__link--next" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Next
</span>
3. 配置文件
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../..", "features": [], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../../assets/javascripts/workers/search.4fa0e4ee.min.js", "version": null}</script>
<script src="../../assets/javascripts/bundle.1d3bfcf1.min.js"></script>
</body>
</html>

751
apiAutoTest/use/index.html Executable file
View File

@ -0,0 +1,751 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.1.4">
<title>1. 进行体验 - apiAutoTest手册</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.bde7dde4.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.ef6f36e2.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
<style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Roboto Mono"}</style>
</head>
<body dir="ltr" data-md-color-scheme="" data-md-color-primary="none" data-md-color-accent="none">
<script>function __prefix(e){return new URL("../..",location).pathname+"."+e}function __get(e,t=localStorage){return JSON.parse(t.getItem(__prefix(e)))}</script>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#_1" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="apiAutoTest手册" class="md-header__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
apiAutoTest手册
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
1. 进行体验
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../.." title="apiAutoTest手册" class="md-nav__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
apiAutoTest手册
</label>
<div class="md-nav__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../.." class="md-nav__link">
介绍
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2" type="checkbox" id="__nav_2" checked>
<label class="md-nav__link" for="__nav_2">
使用
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="使用" data-md-level="1">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
使用
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
1. 进行体验
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
1. 进行体验
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
环境准备
</a>
</li>
<li class="md-nav__item">
<a href="#_2" class="md-nav__link">
体验
</a>
<nav class="md-nav" aria-label="体验">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#_3" class="md-nav__link">
查看报告
</a>
</li>
<li class="md-nav__item">
<a href="#_4" class="md-nav__link">
命令行操作
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../structure/" class="md-nav__link">
2. 目录结构
</a>
</li>
<li class="md-nav__item">
<a href="../config/" class="md-nav__link">
3. 配置文件
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_4" type="checkbox" id="__nav_2_4" >
<label class="md-nav__link" for="__nav_2_4">
4. 用例文件
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="4. 用例文件" data-md-level="2">
<label class="md-nav__title" for="__nav_2_4">
<span class="md-nav__icon md-icon"></span>
4. 用例文件
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../case/base/" class="md-nav__link">
4.1 基本介绍
</a>
</li>
<li class="md-nav__item">
<a href="../case/header/" class="md-nav__link">
4.2 请求头
</a>
</li>
<li class="md-nav__item">
<a href="../case/url/" class="md-nav__link">
4.3 接口地址
</a>
</li>
<li class="md-nav__item">
<a href="../case/files/" class="md-nav__link">
4.4 上传文件
</a>
</li>
<li class="md-nav__item">
<a href="../case/data/" class="md-nav__link">
4.5 请求数据
</a>
</li>
<li class="md-nav__item">
<a href="../case/extra/" class="md-nav__link">
4.6 提取参数
</a>
</li>
<li class="md-nav__item">
<a href="../case/sql/" class="md-nav__link">
4.7 后置sql
</a>
</li>
<li class="md-nav__item">
<a href="../case/assert/" class="md-nav__link">
4.8 预期结果
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../hooks/" class="md-nav__link">
5. 自定义函数
</a>
</li>
<li class="md-nav__item">
<a href="../jenkins/" class="md-nav__link">
6. Jenkins集成
</a>
</li>
<li class="md-nav__item">
<a href="../recording/" class="md-nav__link">
7. 接口录制
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../about/" class="md-nav__link">
关于
</a>
</li>
<li class="md-nav__item">
<a href="../../change/" class="md-nav__link">
更新日志
</a>
</li>
<li class="md-nav__item">
<a href="../../license/" class="md-nav__link">
开源协议
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
环境准备
</a>
</li>
<li class="md-nav__item">
<a href="#_2" class="md-nav__link">
体验
</a>
<nav class="md-nav" aria-label="体验">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#_3" class="md-nav__link">
查看报告
</a>
</li>
<li class="md-nav__item">
<a href="#_4" class="md-nav__link">
命令行操作
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/zy7y/apiAutoTest/edit/master/docs/apiAutoTest/use.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
</a>
<h1>1. 进行体验</h1>
<h2 id="_1">环境准备<a class="headerlink" href="#_1" title="Permanent link">&para;</a></h2>
<details class="tip" open="open"><summary>java</summary><ul>
<li>jdk下载 链接:<a href="https://pan.baidu.com/s/1q9TIbHoOKIvoZMv1m7WA-g">https://pan.baidu.com/s/1q9TIbHoOKIvoZMv1m7WA-g</a>
提取码2fbs</li>
<li>环境搭建: <a href="https://www.cnblogs.com/zy7y/p/13345421.html">https://www.cnblogs.com/zy7y/p/13345421.html</a></li>
</ul>
</details>
<details class="tip" open="open"><summary>allure</summary><p>链接:<a href="https://pan.baidu.com/s/1Tut7BDsusgChhA41ZSkrkg">https://pan.baidu.com/s/1Tut7BDsusgChhA41ZSkrkg</a>
提取码tlei</p>
</details>
<div class="admonition tip">
<p class="admonition-title"><a href="https://www.python.org/downloads/">python 版本 &gt;= 3.8</a></p>
<p>git clone <a href="https://gitee.com/zy7y/apiAutoTest.git">https://gitee.com/zy7y/apiAutoTest.git</a><br />
git clone <a href="https://github.com/zy7y/apiAutoTest.git">https://github.com/zy7y/apiAutoTest.git</a></p>
</div>
<h2 id="_2">体验<a class="headerlink" href="#_2" title="Permanent link">&para;</a></h2>
<details class="example"><summary>界面操作</summary><ol>
<li>使用Pycharm打开<code>apiAutoTest</code>项目</li>
<li>新建虚拟环境
<img alt="新建虚拟环境1" src="../../img/%E6%96%B0%E5%BB%BA%E8%A7%A3%E9%87%8A%E5%99%A81.png" />
<img alt="新建虚拟环境2" src="../../img/%E8%A7%A3%E9%87%8A%E5%99%A82.png" /></li>
<li>安装依赖
<img alt="安装依赖1" src="../../img/%E5%AE%89%E8%A3%85%E4%BE%9D%E8%B5%96.png" />
<img alt="安装依赖2" src="../../img/%E5%AE%89%E8%A3%85%E4%BE%9D%E8%B5%962.png" /></li>
<li>运行
<img alt="run" src="../../img/run.png" /></li>
</ol>
<h3 id="_3">查看报告<a class="headerlink" href="#_3" title="Permanent link">&para;</a></h3>
<p><mark>路径地址: report/html</mark>
<img alt="查看报告" src="../../img/%E6%9F%A5%E7%9C%8B%E6%8A%A5%E5%91%8A.png" />
<img alt="报告" src="../../img/allure%E6%8A%A5%E5%91%8A.png" /></p>
</details>
<h3 id="_4">命令行操作<a class="headerlink" href="#_4" title="Permanent link">&para;</a></h3>
<ol>
<li>使用Pycharm打开<code>apiAutoTest</code>项目</li>
<li>新建虚拟环境
<div class="highlight"><pre><span></span><code><span class="c1"># 命令行使用 </span>
python -m venv venv
<span class="c1"># mac/linux</span>
python3 -m venv venv
</code></pre></div></li>
<li>激活虚拟环境
<div class="highlight"><pre><span></span><code><span class="c1"># windows</span>
venv<span class="se">\S</span>cripts<span class="se">\a</span>ctivate
<span class="c1"># mac/linux</span>
<span class="nb">source</span> venv/bin/activate
</code></pre></div></li>
<li>安装依赖
<div class="highlight"><pre><span></span><code><span class="c1"># windows</span>
pip install -r requirements.txt
<span class="c1"># mac / linux</span>
pip3 install -r requirements.txt
</code></pre></div></li>
<li>运行
<div class="highlight"><pre><span></span><code><span class="c1"># windows</span>
python run.py
<span class="c1"># mac/linux</span>
python3 run.py
</code></pre></div></li>
</ol>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer">
<a href="../.." class="md-footer__link md-footer__link--prev" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</div>
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Previous
</span>
介绍
</div>
</div>
</a>
<a href="../structure/" class="md-footer__link md-footer__link--next" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Next
</span>
2. 目录结构
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../..", "features": [], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../../assets/javascripts/workers/search.4fa0e4ee.min.js", "version": null}</script>
<script src="../../assets/javascripts/bundle.1d3bfcf1.min.js"></script>
</body>
</html>

BIN
assets/images/favicon.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

32
assets/javascripts/bundle.1d3bfcf1.min.js vendored Executable file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

1
assets/javascripts/lunr/min/lunr.ar.min.js vendored Executable file

File diff suppressed because one or more lines are too long

18
assets/javascripts/lunr/min/lunr.da.min.js vendored Executable file
View File

@ -0,0 +1,18 @@
/*!
* Lunr languages, `Danish` language
* https://github.com/MihaiValentin/lunr-languages
*
* Copyright 2014, Mihai Valentin
* http://www.mozilla.org/MPL/
*/
/*!
* based on
* Snowball JavaScript Library v0.3
* http://code.google.com/p/urim/
* http://snowball.tartarus.org/
*
* Copyright 2010, Oleg Mazko
* http://www.mozilla.org/MPL/
*/
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.da=function(){this.pipeline.reset(),this.pipeline.add(e.da.trimmer,e.da.stopWordFilter,e.da.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.da.stemmer))},e.da.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA--",e.da.trimmer=e.trimmerSupport.generateTrimmer(e.da.wordCharacters),e.Pipeline.registerFunction(e.da.trimmer,"trimmer-da"),e.da.stemmer=function(){var r=e.stemmerSupport.Among,i=e.stemmerSupport.SnowballProgram,n=new function(){function e(){var e,r=f.cursor+3;if(d=f.limit,0<=r&&r<=f.limit){for(a=r;;){if(e=f.cursor,f.in_grouping(w,97,248)){f.cursor=e;break}if(f.cursor=e,e>=f.limit)return;f.cursor++}for(;!f.out_grouping(w,97,248);){if(f.cursor>=f.limit)return;f.cursor++}d=f.cursor,d<a&&(d=a)}}function n(){var e,r;if(f.cursor>=d&&(r=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,e=f.find_among_b(c,32),f.limit_backward=r,e))switch(f.bra=f.cursor,e){case 1:f.slice_del();break;case 2:f.in_grouping_b(p,97,229)&&f.slice_del()}}function t(){var e,r=f.limit-f.cursor;f.cursor>=d&&(e=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,f.find_among_b(l,4)?(f.bra=f.cursor,f.limit_backward=e,f.cursor=f.limit-r,f.cursor>f.limit_backward&&(f.cursor--,f.bra=f.cursor,f.slice_del())):f.limit_backward=e)}function s(){var e,r,i,n=f.limit-f.cursor;if(f.ket=f.cursor,f.eq_s_b(2,"st")&&(f.bra=f.cursor,f.eq_s_b(2,"ig")&&f.slice_del()),f.cursor=f.limit-n,f.cursor>=d&&(r=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,e=f.find_among_b(m,5),f.limit_backward=r,e))switch(f.bra=f.cursor,e){case 1:f.slice_del(),i=f.limit-f.cursor,t(),f.cursor=f.limit-i;break;case 2:f.slice_from("løs")}}function o(){var e;f.cursor>=d&&(e=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,f.out_grouping_b(w,97,248)?(f.bra=f.cursor,u=f.slice_to(u),f.limit_backward=e,f.eq_v_b(u)&&f.slice_del()):f.limit_backward=e)}var a,d,u,c=[new r("hed",-1,1),new r("ethed",0,1),new r("ered",-1,1),new r("e",-1,1),new r("erede",3,1),new r("ende",3,1),new r("erende",5,1),new r("ene",3,1),new r("erne",3,1),new r("ere",3,1),new r("en",-1,1),new r("heden",10,1),new r("eren",10,1),new r("er",-1,1),new r("heder",13,1),new r("erer",13,1),new r("s",-1,2),new r("heds",16,1),new r("es",16,1),new r("endes",18,1),new r("erendes",19,1),new r("enes",18,1),new r("ernes",18,1),new r("eres",18,1),new r("ens",16,1),new r("hedens",24,1),new r("erens",24,1),new r("ers",16,1),new r("ets",16,1),new r("erets",28,1),new r("et",-1,1),new r("eret",30,1)],l=[new r("gd",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1)],m=[new r("ig",-1,1),new r("lig",0,1),new r("elig",1,1),new r("els",-1,1),new r("løst",-1,2)],w=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],p=[239,254,42,3,0,0,0,0,0,0,0,0,0,0,0,0,16],f=new i;this.setCurrent=function(e){f.setCurrent(e)},this.getCurrent=function(){return f.getCurrent()},this.stem=function(){var r=f.cursor;return e(),f.limit_backward=r,f.cursor=f.limit,n(),f.cursor=f.limit,t(),f.cursor=f.limit,s(),f.cursor=f.limit,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.da.stemmer,"stemmer-da"),e.da.stopWordFilter=e.generateStopWordFilter("ad af alle alt anden at blev blive bliver da de dem den denne der deres det dette dig din disse dog du efter eller en end er et for fra ham han hans har havde have hende hendes her hos hun hvad hvis hvor i ikke ind jeg jer jo kunne man mange med meget men mig min mine mit mod ned noget nogle nu når og også om op os over på selv sig sin sine sit skal skulle som sådan thi til ud under var vi vil ville vor være været".split(" ")),e.Pipeline.registerFunction(e.da.stopWordFilter,"stopWordFilter-da")}});

18
assets/javascripts/lunr/min/lunr.de.min.js vendored Executable file

File diff suppressed because one or more lines are too long

18
assets/javascripts/lunr/min/lunr.du.min.js vendored Executable file

File diff suppressed because one or more lines are too long

18
assets/javascripts/lunr/min/lunr.es.min.js vendored Executable file

File diff suppressed because one or more lines are too long

18
assets/javascripts/lunr/min/lunr.fi.min.js vendored Executable file

File diff suppressed because one or more lines are too long

18
assets/javascripts/lunr/min/lunr.fr.min.js vendored Executable file

File diff suppressed because one or more lines are too long

18
assets/javascripts/lunr/min/lunr.hu.min.js vendored Executable file

File diff suppressed because one or more lines are too long

18
assets/javascripts/lunr/min/lunr.it.min.js vendored Executable file

File diff suppressed because one or more lines are too long

1
assets/javascripts/lunr/min/lunr.ja.min.js vendored Executable file
View File

@ -0,0 +1 @@
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r="2"==e.version[0];e.ja=function(){this.pipeline.reset(),this.pipeline.add(e.ja.trimmer,e.ja.stopWordFilter,e.ja.stemmer),r?this.tokenizer=e.ja.tokenizer:(e.tokenizer&&(e.tokenizer=e.ja.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.ja.tokenizer))};var t=new e.TinySegmenter;e.ja.tokenizer=function(i){var n,o,s,p,a,u,m,l,c,f;if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(t){return r?new e.Token(t.toLowerCase()):t.toLowerCase()});for(o=i.toString().toLowerCase().replace(/^\s+/,""),n=o.length-1;n>=0;n--)if(/\S/.test(o.charAt(n))){o=o.substring(0,n+1);break}for(a=[],s=o.length,c=0,l=0;c<=s;c++)if(u=o.charAt(c),m=c-l,u.match(/\s/)||c==s){if(m>0)for(p=t.segment(o.slice(l,c)).filter(function(e){return!!e}),f=l,n=0;n<p.length;n++)r?a.push(new e.Token(p[n],{position:[f,p[n].length],index:a.length})):a.push(p[n]),f+=p[n].length;l=c+1}return a},e.ja.stemmer=function(){return function(e){return e}}(),e.Pipeline.registerFunction(e.ja.stemmer,"stemmer-ja"),e.ja.wordCharacters="一二三四五六七八九十百千万億兆一-龠々〆ヵヶぁ-んァ-ヴーア-ン゙a-zA-Z--0-9-",e.ja.trimmer=e.trimmerSupport.generateTrimmer(e.ja.wordCharacters),e.Pipeline.registerFunction(e.ja.trimmer,"trimmer-ja"),e.ja.stopWordFilter=e.generateStopWordFilter("これ それ あれ この その あの ここ そこ あそこ こちら どこ だれ なに なん 何 私 貴方 貴方方 我々 私達 あの人 あのかた 彼女 彼 です あります おります います は が の に を で え から まで より も どの と し それで しかし".split(" ")),e.Pipeline.registerFunction(e.ja.stopWordFilter,"stopWordFilter-ja"),e.jp=e.ja,e.Pipeline.registerFunction(e.jp.stemmer,"stemmer-jp"),e.Pipeline.registerFunction(e.jp.trimmer,"trimmer-jp"),e.Pipeline.registerFunction(e.jp.stopWordFilter,"stopWordFilter-jp")}});

1
assets/javascripts/lunr/min/lunr.jp.min.js vendored Executable file
View File

@ -0,0 +1 @@
module.exports=require("./lunr.ja");

View File

@ -0,0 +1 @@
!function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(e.lunr)}(this,function(){return function(e){e.multiLanguage=function(){for(var t=Array.prototype.slice.call(arguments),i=t.join("-"),r="",n=[],s=[],p=0;p<t.length;++p)"en"==t[p]?(r+="\\w",n.unshift(e.stopWordFilter),n.push(e.stemmer),s.push(e.stemmer)):(r+=e[t[p]].wordCharacters,e[t[p]].stopWordFilter&&n.unshift(e[t[p]].stopWordFilter),e[t[p]].stemmer&&(n.push(e[t[p]].stemmer),s.push(e[t[p]].stemmer)));var o=e.trimmerSupport.generateTrimmer(r);return e.Pipeline.registerFunction(o,"lunr-multi-trimmer-"+i),n.unshift(o),function(){this.pipeline.reset(),this.pipeline.add.apply(this.pipeline,n),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add.apply(this.searchPipeline,s))}}}});

18
assets/javascripts/lunr/min/lunr.nl.min.js vendored Executable file

File diff suppressed because one or more lines are too long

18
assets/javascripts/lunr/min/lunr.no.min.js vendored Executable file
View File

@ -0,0 +1,18 @@
/*!
* Lunr languages, `Norwegian` language
* https://github.com/MihaiValentin/lunr-languages
*
* Copyright 2014, Mihai Valentin
* http://www.mozilla.org/MPL/
*/
/*!
* based on
* Snowball JavaScript Library v0.3
* http://code.google.com/p/urim/
* http://snowball.tartarus.org/
*
* Copyright 2010, Oleg Mazko
* http://www.mozilla.org/MPL/
*/
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.no=function(){this.pipeline.reset(),this.pipeline.add(e.no.trimmer,e.no.stopWordFilter,e.no.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.no.stemmer))},e.no.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA--",e.no.trimmer=e.trimmerSupport.generateTrimmer(e.no.wordCharacters),e.Pipeline.registerFunction(e.no.trimmer,"trimmer-no"),e.no.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,i=new function(){function e(){var e,r=w.cursor+3;if(a=w.limit,0<=r||r<=w.limit){for(s=r;;){if(e=w.cursor,w.in_grouping(d,97,248)){w.cursor=e;break}if(e>=w.limit)return;w.cursor=e+1}for(;!w.out_grouping(d,97,248);){if(w.cursor>=w.limit)return;w.cursor++}a=w.cursor,a<s&&(a=s)}}function i(){var e,r,n;if(w.cursor>=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(m,29),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:n=w.limit-w.cursor,w.in_grouping_b(c,98,122)?w.slice_del():(w.cursor=w.limit-n,w.eq_s_b(1,"k")&&w.out_grouping_b(d,97,248)&&w.slice_del());break;case 3:w.slice_from("er")}}function t(){var e,r=w.limit-w.cursor;w.cursor>=a&&(e=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,w.find_among_b(u,2)?(w.bra=w.cursor,w.limit_backward=e,w.cursor=w.limit-r,w.cursor>w.limit_backward&&(w.cursor--,w.bra=w.cursor,w.slice_del())):w.limit_backward=e)}function o(){var e,r;w.cursor>=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(l,11),e?(w.bra=w.cursor,w.limit_backward=r,1==e&&w.slice_del()):w.limit_backward=r)}var s,a,m=[new r("a",-1,1),new r("e",-1,1),new r("ede",1,1),new r("ande",1,1),new r("ende",1,1),new r("ane",1,1),new r("ene",1,1),new r("hetene",6,1),new r("erte",1,3),new r("en",-1,1),new r("heten",9,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",12,1),new r("s",-1,2),new r("as",14,1),new r("es",14,1),new r("edes",16,1),new r("endes",16,1),new r("enes",16,1),new r("hetenes",19,1),new r("ens",14,1),new r("hetens",21,1),new r("ers",14,1),new r("ets",14,1),new r("et",-1,1),new r("het",25,1),new r("ert",-1,3),new r("ast",-1,1)],u=[new r("dt",-1,-1),new r("vt",-1,-1)],l=[new r("leg",-1,1),new r("eleg",0,1),new r("ig",-1,1),new r("eig",2,1),new r("lig",2,1),new r("elig",4,1),new r("els",-1,1),new r("lov",-1,1),new r("elov",7,1),new r("slov",7,1),new r("hetslov",9,1)],d=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],c=[119,125,149,1],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,i(),w.cursor=w.limit,t(),w.cursor=w.limit,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.no.stemmer,"stemmer-no"),e.no.stopWordFilter=e.generateStopWordFilter("alle at av bare begge ble blei bli blir blitt både båe da de deg dei deim deira deires dem den denne der dere deres det dette di din disse ditt du dykk dykkar då eg ein eit eitt eller elles en enn er et ett etter for fordi fra før ha hadde han hans har hennar henne hennes her hjå ho hoe honom hoss hossen hun hva hvem hver hvilke hvilken hvis hvor hvordan hvorfor i ikke ikkje ikkje ingen ingi inkje inn inni ja jeg kan kom korleis korso kun kunne kva kvar kvarhelst kven kvi kvifor man mange me med medan meg meget mellom men mi min mine mitt mot mykje ned no noe noen noka noko nokon nokor nokre nå når og også om opp oss over på samme seg selv si si sia sidan siden sin sine sitt sjøl skal skulle slik so som som somme somt så sånn til um upp ut uten var vart varte ved vere verte vi vil ville vore vors vort vår være være vært å".split(" ")),e.Pipeline.registerFunction(e.no.stopWordFilter,"stopWordFilter-no")}});

18
assets/javascripts/lunr/min/lunr.pt.min.js vendored Executable file

File diff suppressed because one or more lines are too long

18
assets/javascripts/lunr/min/lunr.ro.min.js vendored Executable file

File diff suppressed because one or more lines are too long

18
assets/javascripts/lunr/min/lunr.ru.min.js vendored Executable file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
!function(r,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(r.lunr)}(this,function(){return function(r){r.stemmerSupport={Among:function(r,t,i,s){if(this.toCharArray=function(r){for(var t=r.length,i=new Array(t),s=0;s<t;s++)i[s]=r.charCodeAt(s);return i},!r&&""!=r||!t&&0!=t||!i)throw"Bad Among initialisation: s:"+r+", substring_i: "+t+", result: "+i;this.s_size=r.length,this.s=this.toCharArray(r),this.substring_i=t,this.result=i,this.method=s},SnowballProgram:function(){var r;return{bra:0,ket:0,limit:0,cursor:0,limit_backward:0,setCurrent:function(t){r=t,this.cursor=0,this.limit=t.length,this.limit_backward=0,this.bra=this.cursor,this.ket=this.limit},getCurrent:function(){var t=r;return r=null,t},in_grouping:function(t,i,s){if(this.cursor<this.limit){var e=r.charCodeAt(this.cursor);if(e<=s&&e>=i&&(e-=i,t[e>>3]&1<<(7&e)))return this.cursor++,!0}return!1},in_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e<=s&&e>=i&&(e-=i,t[e>>3]&1<<(7&e)))return this.cursor--,!0}return!1},out_grouping:function(t,i,s){if(this.cursor<this.limit){var e=r.charCodeAt(this.cursor);if(e>s||e<i)return this.cursor++,!0;if(e-=i,!(t[e>>3]&1<<(7&e)))return this.cursor++,!0}return!1},out_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e>s||e<i)return this.cursor--,!0;if(e-=i,!(t[e>>3]&1<<(7&e)))return this.cursor--,!0}return!1},eq_s:function(t,i){if(this.limit-this.cursor<t)return!1;for(var s=0;s<t;s++)if(r.charCodeAt(this.cursor+s)!=i.charCodeAt(s))return!1;return this.cursor+=t,!0},eq_s_b:function(t,i){if(this.cursor-this.limit_backward<t)return!1;for(var s=0;s<t;s++)if(r.charCodeAt(this.cursor-t+s)!=i.charCodeAt(s))return!1;return this.cursor-=t,!0},find_among:function(t,i){for(var s=0,e=i,n=this.cursor,u=this.limit,o=0,h=0,c=!1;;){for(var a=s+(e-s>>1),f=0,l=o<h?o:h,_=t[a],m=l;m<_.s_size;m++){if(n+l==u){f=-1;break}if(f=r.charCodeAt(n+l)-_.s[m])break;l++}if(f<0?(e=a,h=l):(s=a,o=l),e-s<=1){if(s>0||e==s||c)break;c=!0}}for(;;){var _=t[s];if(o>=_.s_size){if(this.cursor=n+_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n+_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},find_among_b:function(t,i){for(var s=0,e=i,n=this.cursor,u=this.limit_backward,o=0,h=0,c=!1;;){for(var a=s+(e-s>>1),f=0,l=o<h?o:h,_=t[a],m=_.s_size-1-l;m>=0;m--){if(n-l==u){f=-1;break}if(f=r.charCodeAt(n-1-l)-_.s[m])break;l++}if(f<0?(e=a,h=l):(s=a,o=l),e-s<=1){if(s>0||e==s||c)break;c=!0}}for(;;){var _=t[s];if(o>=_.s_size){if(this.cursor=n-_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n-_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},replace_s:function(t,i,s){var e=s.length-(i-t),n=r.substring(0,t),u=r.substring(i);return r=n+s+u,this.limit+=e,this.cursor>=i?this.cursor+=e:this.cursor>t&&(this.cursor=t),e},slice_check:function(){if(this.bra<0||this.bra>this.ket||this.ket>this.limit||this.limit>r.length)throw"faulty slice operation"},slice_from:function(r){this.slice_check(),this.replace_s(this.bra,this.ket,r)},slice_del:function(){this.slice_from("")},insert:function(r,t,i){var s=this.replace_s(r,t,i);r<=this.bra&&(this.bra+=s),r<=this.ket&&(this.ket+=s)},slice_to:function(){return this.slice_check(),r.substring(this.bra,this.ket)},eq_v_b:function(r){return this.eq_s_b(r.length,r)}}}},r.trimmerSupport={generateTrimmer:function(r){var t=new RegExp("^[^"+r+"]+"),i=new RegExp("[^"+r+"]+$");return function(r){return"function"==typeof r.update?r.update(function(r){return r.replace(t,"").replace(i,"")}):r.replace(t,"").replace(i,"")}}}}});

18
assets/javascripts/lunr/min/lunr.sv.min.js vendored Executable file
View File

@ -0,0 +1,18 @@
/*!
* Lunr languages, `Swedish` language
* https://github.com/MihaiValentin/lunr-languages
*
* Copyright 2014, Mihai Valentin
* http://www.mozilla.org/MPL/
*/
/*!
* based on
* Snowball JavaScript Library v0.3
* http://code.google.com/p/urim/
* http://snowball.tartarus.org/
*
* Copyright 2010, Oleg Mazko
* http://www.mozilla.org/MPL/
*/
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.sv=function(){this.pipeline.reset(),this.pipeline.add(e.sv.trimmer,e.sv.stopWordFilter,e.sv.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.sv.stemmer))},e.sv.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA--",e.sv.trimmer=e.trimmerSupport.generateTrimmer(e.sv.wordCharacters),e.Pipeline.registerFunction(e.sv.trimmer,"trimmer-sv"),e.sv.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,t=new function(){function e(){var e,r=w.cursor+3;if(o=w.limit,0<=r||r<=w.limit){for(a=r;;){if(e=w.cursor,w.in_grouping(l,97,246)){w.cursor=e;break}if(w.cursor=e,w.cursor>=w.limit)return;w.cursor++}for(;!w.out_grouping(l,97,246);){if(w.cursor>=w.limit)return;w.cursor++}o=w.cursor,o<a&&(o=a)}}function t(){var e,r=w.limit_backward;if(w.cursor>=o&&(w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(u,37),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.in_grouping_b(d,98,121)&&w.slice_del()}}function i(){var e=w.limit_backward;w.cursor>=o&&(w.limit_backward=o,w.cursor=w.limit,w.find_among_b(c,7)&&(w.cursor=w.limit,w.ket=w.cursor,w.cursor>w.limit_backward&&(w.bra=--w.cursor,w.slice_del())),w.limit_backward=e)}function s(){var e,r;if(w.cursor>=o){if(r=w.limit_backward,w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(m,5))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.slice_from("lös");break;case 3:w.slice_from("full")}w.limit_backward=r}}var a,o,u=[new r("a",-1,1),new r("arna",0,1),new r("erna",0,1),new r("heterna",2,1),new r("orna",0,1),new r("ad",-1,1),new r("e",-1,1),new r("ade",6,1),new r("ande",6,1),new r("arne",6,1),new r("are",6,1),new r("aste",6,1),new r("en",-1,1),new r("anden",12,1),new r("aren",12,1),new r("heten",12,1),new r("ern",-1,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",18,1),new r("or",-1,1),new r("s",-1,2),new r("as",21,1),new r("arnas",22,1),new r("ernas",22,1),new r("ornas",22,1),new r("es",21,1),new r("ades",26,1),new r("andes",26,1),new r("ens",21,1),new r("arens",29,1),new r("hetens",29,1),new r("erns",21,1),new r("at",-1,1),new r("andet",-1,1),new r("het",-1,1),new r("ast",-1,1)],c=[new r("dd",-1,-1),new r("gd",-1,-1),new r("nn",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1),new r("tt",-1,-1)],m=[new r("ig",-1,1),new r("lig",0,1),new r("els",-1,1),new r("fullt",-1,3),new r("löst",-1,2)],l=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,24,0,32],d=[119,127,149],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,t(),w.cursor=w.limit,i(),w.cursor=w.limit,s(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return t.setCurrent(e),t.stem(),t.getCurrent()}):(t.setCurrent(e),t.stem(),t.getCurrent())}}(),e.Pipeline.registerFunction(e.sv.stemmer,"stemmer-sv"),e.sv.stopWordFilter=e.generateStopWordFilter("alla allt att av blev bli blir blivit de dem den denna deras dess dessa det detta dig din dina ditt du där då efter ej eller en er era ert ett från för ha hade han hans har henne hennes hon honom hur här i icke ingen inom inte jag ju kan kunde man med mellan men mig min mina mitt mot mycket ni nu när någon något några och om oss på samma sedan sig sin sina sitta själv skulle som så sådan sådana sådant till under upp ut utan vad var vara varför varit varje vars vart vem vi vid vilka vilkas vilken vilket vår våra vårt än är åt över".split(" ")),e.Pipeline.registerFunction(e.sv.stopWordFilter,"stopWordFilter-sv")}});

18
assets/javascripts/lunr/min/lunr.tr.min.js vendored Executable file

File diff suppressed because one or more lines are too long

1
assets/javascripts/lunr/min/lunr.vi.min.js vendored Executable file
View File

@ -0,0 +1 @@
!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.vi=function(){this.pipeline.reset(),this.pipeline.add(e.vi.stopWordFilter,e.vi.trimmer)},e.vi.wordCharacters="[A-Za-ẓ̀͐́͑̉̃̓ÂâÊêÔôĂ-ăĐ-đƠ-ơƯ-ư]",e.vi.trimmer=e.trimmerSupport.generateTrimmer(e.vi.wordCharacters),e.Pipeline.registerFunction(e.vi.trimmer,"trimmer-vi"),e.vi.stopWordFilter=e.generateStopWordFilter("là cái nhưng mà".split(" "))}});

View File

@ -0,0 +1,206 @@
/**
* export the module via AMD, CommonJS or as a browser global
* Export code from https://github.com/umdjs/umd/blob/master/returnExports.js
*/
;(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(factory)
} else if (typeof exports === 'object') {
/**
* Node. Does not work with strict CommonJS, but
* only CommonJS-like environments that support module.exports,
* like Node.
*/
module.exports = factory()
} else {
// Browser globals (root is window)
factory()(root.lunr);
}
}(this, function () {
/**
* Just return a value to define the module export.
* This example returns an object, but the module
* can return a function as the exported value.
*/
return function(lunr) {
// TinySegmenter 0.1 -- Super compact Japanese tokenizer in Javascript
// (c) 2008 Taku Kudo <taku@chasen.org>
// TinySegmenter is freely distributable under the terms of a new BSD licence.
// For details, see http://chasen.org/~taku/software/TinySegmenter/LICENCE.txt
function TinySegmenter() {
var patterns = {
"[一二三四五六七八九十百千万億兆]":"M",
"[一-龠々〆ヵヶ]":"H",
"[ぁ-ん]":"I",
"[ァ-ヴーア-ン゙ー]":"K",
"[a-zA-Z--]":"A",
"[0-9-]":"N"
}
this.chartype_ = [];
for (var i in patterns) {
var regexp = new RegExp(i);
this.chartype_.push([regexp, patterns[i]]);
}
this.BIAS__ = -332
this.BC1__ = {"HH":6,"II":2461,"KH":406,"OH":-1378};
this.BC2__ = {"AA":-3267,"AI":2744,"AN":-878,"HH":-4070,"HM":-1711,"HN":4012,"HO":3761,"IA":1327,"IH":-1184,"II":-1332,"IK":1721,"IO":5492,"KI":3831,"KK":-8741,"MH":-3132,"MK":3334,"OO":-2920};
this.BC3__ = {"HH":996,"HI":626,"HK":-721,"HN":-1307,"HO":-836,"IH":-301,"KK":2762,"MK":1079,"MM":4034,"OA":-1652,"OH":266};
this.BP1__ = {"BB":295,"OB":304,"OO":-125,"UB":352};
this.BP2__ = {"BO":60,"OO":-1762};
this.BQ1__ = {"BHH":1150,"BHM":1521,"BII":-1158,"BIM":886,"BMH":1208,"BNH":449,"BOH":-91,"BOO":-2597,"OHI":451,"OIH":-296,"OKA":1851,"OKH":-1020,"OKK":904,"OOO":2965};
this.BQ2__ = {"BHH":118,"BHI":-1159,"BHM":466,"BIH":-919,"BKK":-1720,"BKO":864,"OHH":-1139,"OHM":-181,"OIH":153,"UHI":-1146};
this.BQ3__ = {"BHH":-792,"BHI":2664,"BII":-299,"BKI":419,"BMH":937,"BMM":8335,"BNN":998,"BOH":775,"OHH":2174,"OHM":439,"OII":280,"OKH":1798,"OKI":-793,"OKO":-2242,"OMH":-2402,"OOO":11699};
this.BQ4__ = {"BHH":-3895,"BIH":3761,"BII":-4654,"BIK":1348,"BKK":-1806,"BMI":-3385,"BOO":-12396,"OAH":926,"OHH":266,"OHK":-2036,"ONN":-973};
this.BW1__ = {",と":660,",同":727,"B1あ":1404,"B1同":542,"、と":660,"、同":727,"」と":1682,"あっ":1505,"いう":1743,"いっ":-2055,"いる":672,"うし":-4817,"うん":665,"から":3472,"がら":600,"こう":-790,"こと":2083,"こん":-1262,"さら":-4143,"さん":4573,"した":2641,"して":1104,"すで":-3399,"そこ":1977,"それ":-871,"たち":1122,"ため":601,"った":3463,"つい":-802,"てい":805,"てき":1249,"でき":1127,"です":3445,"では":844,"とい":-4915,"とみ":1922,"どこ":3887,"ない":5713,"なっ":3015,"など":7379,"なん":-1113,"にし":2468,"には":1498,"にも":1671,"に対":-912,"の一":-501,"の中":741,"ませ":2448,"まで":1711,"まま":2600,"まる":-2155,"やむ":-1947,"よっ":-2565,"れた":2369,"れで":-913,"をし":1860,"を見":731,"亡く":-1886,"京都":2558,"取り":-2784,"大き":-2604,"大阪":1497,"平方":-2314,"引き":-1336,"日本":-195,"本当":-2423,"毎日":-2113,"目指":-724,"B1あ":1404,"B1同":542,"」と":1682};
this.BW2__ = {"..":-11822,"11":-669,"――":-5730,"":-13175,"いう":-1609,"うか":2490,"かし":-1350,"かも":-602,"から":-7194,"かれ":4612,"がい":853,"がら":-3198,"きた":1941,"くな":-1597,"こと":-8392,"この":-4193,"させ":4533,"され":13168,"さん":-3977,"しい":-1819,"しか":-545,"した":5078,"して":972,"しな":939,"その":-3744,"たい":-1253,"たた":-662,"ただ":-3857,"たち":-786,"たと":1224,"たは":-939,"った":4589,"って":1647,"っと":-2094,"てい":6144,"てき":3640,"てく":2551,"ては":-3110,"ても":-3065,"でい":2666,"でき":-1528,"でし":-3828,"です":-4761,"でも":-4203,"とい":1890,"とこ":-1746,"とと":-2279,"との":720,"とみ":5168,"とも":-3941,"ない":-2488,"なが":-1313,"など":-6509,"なの":2614,"なん":3099,"にお":-1615,"にし":2748,"にな":2454,"によ":-7236,"に対":-14943,"に従":-4688,"に関":-11388,"のか":2093,"ので":-7059,"のに":-6041,"のの":-6125,"はい":1073,"はが":-1033,"はず":-2532,"ばれ":1813,"まし":-1316,"まで":-6621,"まれ":5409,"めて":-3153,"もい":2230,"もの":-10713,"らか":-944,"らし":-1611,"らに":-1897,"りし":651,"りま":1620,"れた":4270,"れて":849,"れば":4114,"ろう":6067,"われ":7901,"を通":-11877,"んだ":728,"んな":-4115,"一人":602,"一方":-1375,"一日":970,"一部":-1051,"上が":-4479,"会社":-1116,"出て":2163,"分の":-7758,"同党":970,"同日":-913,"大阪":-2471,"委員":-1250,"少な":-1050,"年度":-8669,"年間":-1626,"府県":-2363,"手権":-1982,"新聞":-4066,"日新":-722,"日本":-7068,"日米":3372,"曜日":-601,"朝鮮":-2355,"本人":-2697,"東京":-1543,"然と":-1384,"社会":-1276,"立て":-990,"第に":-1612,"米国":-4268,"":-669};
this.BW3__ = {"あた":-2194,"あり":719,"ある":3846,"い.":-1185,"い。":-1185,"いい":5308,"いえ":2079,"いく":3029,"いた":2056,"いっ":1883,"いる":5600,"いわ":1527,"うち":1117,"うと":4798,"えと":1454,"か.":2857,"か。":2857,"かけ":-743,"かっ":-4098,"かに":-669,"から":6520,"かり":-2670,"が,":1816,"が、":1816,"がき":-4855,"がけ":-1127,"がっ":-913,"がら":-4977,"がり":-2064,"きた":1645,"けど":1374,"こと":7397,"この":1542,"ころ":-2757,"さい":-714,"さを":976,"し,":1557,"し、":1557,"しい":-3714,"した":3562,"して":1449,"しな":2608,"しま":1200,"す.":-1310,"す。":-1310,"する":6521,"ず,":3426,"ず、":3426,"ずに":841,"そう":428,"た.":8875,"た。":8875,"たい":-594,"たの":812,"たり":-1183,"たる":-853,"だ.":4098,"だ。":4098,"だっ":1004,"った":-4748,"って":300,"てい":6240,"てお":855,"ても":302,"です":1437,"でに":-1482,"では":2295,"とう":-1387,"とし":2266,"との":541,"とも":-3543,"どう":4664,"ない":1796,"なく":-903,"など":2135,"に,":-1021,"に、":-1021,"にし":1771,"にな":1906,"には":2644,"の,":-724,"の、":-724,"の子":-1000,"は,":1337,"は、":1337,"べき":2181,"まし":1113,"ます":6943,"まっ":-1549,"まで":6154,"まれ":-793,"らし":1479,"られ":6820,"るる":3818,"れ,":854,"れ、":854,"れた":1850,"れて":1375,"れば":-3246,"れる":1091,"われ":-605,"んだ":606,"んで":798,"カ月":990,"会議":860,"入り":1232,"大会":2217,"始め":1681,"市":965,"新聞":-5055,"日,":974,"日、":974,"社会":2024,"カ月":990};
this.TC1__ = {"AAA":1093,"HHH":1029,"HHM":580,"HII":998,"HOH":-390,"HOM":-331,"IHI":1169,"IOH":-142,"IOI":-1015,"IOM":467,"MMH":187,"OOI":-1832};
this.TC2__ = {"HHO":2088,"HII":-1023,"HMM":-1154,"IHI":-1965,"KKH":703,"OII":-2649};
this.TC3__ = {"AAA":-294,"HHH":346,"HHI":-341,"HII":-1088,"HIK":731,"HOH":-1486,"IHH":128,"IHI":-3041,"IHO":-1935,"IIH":-825,"IIM":-1035,"IOI":-542,"KHH":-1216,"KKA":491,"KKH":-1217,"KOK":-1009,"MHH":-2694,"MHM":-457,"MHO":123,"MMH":-471,"NNH":-1689,"NNO":662,"OHO":-3393};
this.TC4__ = {"HHH":-203,"HHI":1344,"HHK":365,"HHM":-122,"HHN":182,"HHO":669,"HIH":804,"HII":679,"HOH":446,"IHH":695,"IHO":-2324,"IIH":321,"III":1497,"IIO":656,"IOO":54,"KAK":4845,"KKA":3386,"KKK":3065,"MHH":-405,"MHI":201,"MMH":-241,"MMM":661,"MOM":841};
this.TQ1__ = {"BHHH":-227,"BHHI":316,"BHIH":-132,"BIHH":60,"BIII":1595,"BNHH":-744,"BOHH":225,"BOOO":-908,"OAKK":482,"OHHH":281,"OHIH":249,"OIHI":200,"OIIH":-68};
this.TQ2__ = {"BIHH":-1401,"BIII":-1033,"BKAK":-543,"BOOO":-5591};
this.TQ3__ = {"BHHH":478,"BHHM":-1073,"BHIH":222,"BHII":-504,"BIIH":-116,"BIII":-105,"BMHI":-863,"BMHM":-464,"BOMH":620,"OHHH":346,"OHHI":1729,"OHII":997,"OHMH":481,"OIHH":623,"OIIH":1344,"OKAK":2792,"OKHH":587,"OKKA":679,"OOHH":110,"OOII":-685};
this.TQ4__ = {"BHHH":-721,"BHHM":-3604,"BHII":-966,"BIIH":-607,"BIII":-2181,"OAAA":-2763,"OAKK":180,"OHHH":-294,"OHHI":2446,"OHHO":480,"OHIH":-1573,"OIHH":1935,"OIHI":-493,"OIIH":626,"OIII":-4007,"OKAK":-8156};
this.TW1__ = {"につい":-4681,"東京都":2026};
this.TW2__ = {"ある程":-2049,"いった":-1256,"ころが":-2434,"しょう":3873,"その後":-4430,"だって":-1049,"ていた":1833,"として":-4657,"ともに":-4517,"もので":1882,"一気に":-792,"初めて":-1512,"同時に":-8097,"大きな":-1255,"対して":-2721,"社会党":-3216};
this.TW3__ = {"いただ":-1734,"してい":1314,"として":-4314,"につい":-5483,"にとっ":-5989,"に当た":-6247,"ので,":-727,"ので、":-727,"のもの":-600,"れから":-3752,"十二月":-2287};
this.TW4__ = {"いう.":8576,"いう。":8576,"からな":-2348,"してい":2958,"たが,":1516,"たが、":1516,"ている":1538,"という":1349,"ました":5543,"ません":1097,"ようと":-4258,"よると":5865};
this.UC1__ = {"A":484,"K":93,"M":645,"O":-505};
this.UC2__ = {"A":819,"H":1059,"I":409,"M":3987,"N":5775,"O":646};
this.UC3__ = {"A":-1370,"I":2311};
this.UC4__ = {"A":-2643,"H":1809,"I":-1032,"K":-3450,"M":3565,"N":3876,"O":6646};
this.UC5__ = {"H":313,"I":-1238,"K":-799,"M":539,"O":-831};
this.UC6__ = {"H":-506,"I":-253,"K":87,"M":247,"O":-387};
this.UP1__ = {"O":-214};
this.UP2__ = {"B":69,"O":935};
this.UP3__ = {"B":189};
this.UQ1__ = {"BH":21,"BI":-12,"BK":-99,"BN":142,"BO":-56,"OH":-95,"OI":477,"OK":410,"OO":-2422};
this.UQ2__ = {"BH":216,"BI":113,"OK":1759};
this.UQ3__ = {"BA":-479,"BH":42,"BI":1913,"BK":-7198,"BM":3160,"BN":6427,"BO":14761,"OI":-827,"ON":-3212};
this.UW1__ = {",":156,"、":156,"「":-463,"あ":-941,"う":-127,"が":-553,"き":121,"こ":505,"で":-201,"と":-547,"ど":-123,"に":-789,"の":-185,"は":-847,"も":-466,"や":-470,"よ":182,"ら":-292,"り":208,"れ":169,"を":-446,"ん":-137,"・":-135,"主":-402,"京":-268,"区":-912,"午":871,"国":-460,"大":561,"委":729,"市":-411,"日":-141,"理":361,"生":-408,"県":-386,"都":-718,"「":-463,"・":-135};
this.UW2__ = {",":-829,"、":-829,"":892,"「":-645,"」":3145,"あ":-538,"い":505,"う":134,"お":-502,"か":1454,"が":-856,"く":-412,"こ":1141,"さ":878,"ざ":540,"し":1529,"す":-675,"せ":300,"そ":-1011,"た":188,"だ":1837,"つ":-949,"て":-291,"で":-268,"と":-981,"ど":1273,"な":1063,"に":-1764,"の":130,"は":-409,"ひ":-1273,"べ":1261,"ま":600,"も":-1263,"や":-402,"よ":1639,"り":-579,"る":-694,"れ":571,"を":-2516,"ん":2095,"ア":-587,"カ":306,"キ":568,"ッ":831,"三":-758,"不":-2150,"世":-302,"中":-968,"主":-861,"事":492,"人":-123,"会":978,"保":362,"入":548,"初":-3025,"副":-1566,"北":-3414,"区":-422,"大":-1769,"天":-865,"太":-483,"子":-1519,"学":760,"実":1023,"小":-2009,"市":-813,"年":-1060,"強":1067,"手":-1519,"揺":-1033,"政":1522,"文":-1355,"新":-1682,"日":-1815,"明":-1462,"最":-630,"朝":-1843,"本":-1650,"東":-931,"果":-665,"次":-2378,"民":-180,"気":-1740,"理":752,"発":529,"目":-1584,"相":-242,"県":-1165,"立":-763,"第":810,"米":509,"自":-1353,"行":838,"西":-744,"見":-3874,"調":1010,"議":1198,"込":3041,"開":1758,"間":-1257,"「":-645,"」":3145,"ッ":831,"ア":-587,"カ":306,"キ":568};
this.UW3__ = {",":4889,"1":-800,"":-1723,"、":4889,"々":-2311,"":5827,"」":2670,"〓":-3573,"あ":-2696,"い":1006,"う":2342,"え":1983,"お":-4864,"か":-1163,"が":3271,"く":1004,"け":388,"げ":401,"こ":-3552,"ご":-3116,"さ":-1058,"し":-395,"す":584,"せ":3685,"そ":-5228,"た":842,"ち":-521,"っ":-1444,"つ":-1081,"て":6167,"で":2318,"と":1691,"ど":-899,"な":-2788,"に":2745,"の":4056,"は":4555,"ひ":-2171,"ふ":-1798,"へ":1199,"ほ":-5516,"ま":-4384,"み":-120,"め":1205,"も":2323,"や":-788,"よ":-202,"ら":727,"り":649,"る":5905,"れ":2773,"わ":-1207,"を":6620,"ん":-518,"ア":551,"グ":1319,"ス":874,"ッ":-1350,"ト":521,"ム":1109,"ル":1591,"ロ":2201,"ン":278,"・":-3794,"一":-1619,"下":-1759,"世":-2087,"両":3815,"中":653,"主":-758,"予":-1193,"二":974,"人":2742,"今":792,"他":1889,"以":-1368,"低":811,"何":4265,"作":-361,"保":-2439,"元":4858,"党":3593,"全":1574,"公":-3030,"六":755,"共":-1880,"円":5807,"再":3095,"分":457,"初":2475,"別":1129,"前":2286,"副":4437,"力":365,"動":-949,"務":-1872,"化":1327,"北":-1038,"区":4646,"千":-2309,"午":-783,"協":-1006,"口":483,"右":1233,"各":3588,"合":-241,"同":3906,"和":-837,"員":4513,"国":642,"型":1389,"場":1219,"外":-241,"妻":2016,"学":-1356,"安":-423,"実":-1008,"家":1078,"小":-513,"少":-3102,"州":1155,"市":3197,"平":-1804,"年":2416,"広":-1030,"府":1605,"度":1452,"建":-2352,"当":-3885,"得":1905,"思":-1291,"性":1822,"戸":-488,"指":-3973,"政":-2013,"教":-1479,"数":3222,"文":-1489,"新":1764,"日":2099,"旧":5792,"昨":-661,"時":-1248,"曜":-951,"最":-937,"月":4125,"期":360,"李":3094,"村":364,"東":-805,"核":5156,"森":2438,"業":484,"氏":2613,"民":-1694,"決":-1073,"法":1868,"海":-495,"無":979,"物":461,"特":-3850,"生":-273,"用":914,"町":1215,"的":7313,"直":-1835,"省":792,"県":6293,"知":-1528,"私":4231,"税":401,"立":-960,"第":1201,"米":7767,"系":3066,"約":3663,"級":1384,"統":-4229,"総":1163,"線":1255,"者":6457,"能":725,"自":-2869,"英":785,"見":1044,"調":-562,"財":-733,"費":1777,"車":1835,"軍":1375,"込":-1504,"通":-1136,"選":-681,"郎":1026,"郡":4404,"部":1200,"金":2163,"長":421,"開":-1432,"間":1302,"関":-1282,"雨":2009,"電":-1045,"非":2066,"駅":1620,"":-800,"」":2670,"・":-3794,"ッ":-1350,"ア":551,"グ":1319,"ス":874,"ト":521,"ム":1109,"ル":1591,"ロ":2201,"ン":278};
this.UW4__ = {",":3930,".":3508,"―":-4841,"、":3930,"。":3508,"":4999,"「":1895,"」":3798,"〓":-5156,"あ":4752,"い":-3435,"う":-640,"え":-2514,"お":2405,"か":530,"が":6006,"き":-4482,"ぎ":-3821,"く":-3788,"け":-4376,"げ":-4734,"こ":2255,"ご":1979,"さ":2864,"し":-843,"じ":-2506,"す":-731,"ず":1251,"せ":181,"そ":4091,"た":5034,"だ":5408,"ち":-3654,"っ":-5882,"つ":-1659,"て":3994,"で":7410,"と":4547,"な":5433,"に":6499,"ぬ":1853,"ね":1413,"の":7396,"は":8578,"ば":1940,"ひ":4249,"び":-4134,"ふ":1345,"へ":6665,"べ":-744,"ほ":1464,"ま":1051,"み":-2082,"む":-882,"め":-5046,"も":4169,"ゃ":-2666,"や":2795,"ょ":-1544,"よ":3351,"ら":-2922,"り":-9726,"る":-14896,"れ":-2613,"ろ":-4570,"わ":-1783,"を":13150,"ん":-2352,"カ":2145,"コ":1789,"セ":1287,"ッ":-724,"ト":-403,"メ":-1635,"ラ":-881,"リ":-541,"ル":-856,"ン":-3637,"・":-4371,"ー":-11870,"一":-2069,"中":2210,"予":782,"事":-190,"井":-1768,"人":1036,"以":544,"会":950,"体":-1286,"作":530,"側":4292,"先":601,"党":-2006,"共":-1212,"内":584,"円":788,"初":1347,"前":1623,"副":3879,"力":-302,"動":-740,"務":-2715,"化":776,"区":4517,"協":1013,"参":1555,"合":-1834,"和":-681,"員":-910,"器":-851,"回":1500,"国":-619,"園":-1200,"地":866,"場":-1410,"塁":-2094,"士":-1413,"多":1067,"大":571,"子":-4802,"学":-1397,"定":-1057,"寺":-809,"小":1910,"屋":-1328,"山":-1500,"島":-2056,"川":-2667,"市":2771,"年":374,"庁":-4556,"後":456,"性":553,"感":916,"所":-1566,"支":856,"改":787,"政":2182,"教":704,"文":522,"方":-856,"日":1798,"時":1829,"最":845,"月":-9066,"木":-485,"来":-442,"校":-360,"業":-1043,"氏":5388,"民":-2716,"気":-910,"沢":-939,"済":-543,"物":-735,"率":672,"球":-1267,"生":-1286,"産":-1101,"田":-2900,"町":1826,"的":2586,"目":922,"省":-3485,"県":2997,"空":-867,"立":-2112,"第":788,"米":2937,"系":786,"約":2171,"経":1146,"統":-1169,"総":940,"線":-994,"署":749,"者":2145,"能":-730,"般":-852,"行":-792,"規":792,"警":-1184,"議":-244,"谷":-1000,"賞":730,"車":-1481,"軍":1158,"輪":-1433,"込":-3370,"近":929,"道":-1291,"選":2596,"郎":-4866,"都":1192,"野":-1100,"銀":-2213,"長":357,"間":-2344,"院":-2297,"際":-2604,"電":-878,"領":-1659,"題":-792,"館":-1984,"首":1749,"高":2120,"「":1895,"」":3798,"・":-4371,"ッ":-724,"ー":-11870,"カ":2145,"コ":1789,"セ":1287,"ト":-403,"メ":-1635,"ラ":-881,"リ":-541,"ル":-856,"ン":-3637};
this.UW5__ = {",":465,".":-299,"1":-514,"E2":-32768,"]":-2762,"、":465,"。":-299,"「":363,"あ":1655,"い":331,"う":-503,"え":1199,"お":527,"か":647,"が":-421,"き":1624,"ぎ":1971,"く":312,"げ":-983,"さ":-1537,"し":-1371,"す":-852,"だ":-1186,"ち":1093,"っ":52,"つ":921,"て":-18,"で":-850,"と":-127,"ど":1682,"な":-787,"に":-1224,"の":-635,"は":-578,"べ":1001,"み":502,"め":865,"ゃ":3350,"ょ":854,"り":-208,"る":429,"れ":504,"わ":419,"を":-1264,"ん":327,"イ":241,"ル":451,"ン":-343,"中":-871,"京":722,"会":-1153,"党":-654,"務":3519,"区":-901,"告":848,"員":2104,"大":-1296,"学":-548,"定":1785,"嵐":-1304,"市":-2991,"席":921,"年":1763,"思":872,"所":-814,"挙":1618,"新":-1682,"日":218,"月":-4353,"査":932,"格":1356,"機":-1508,"氏":-1347,"田":240,"町":-3912,"的":-3149,"相":1319,"省":-1052,"県":-4003,"研":-997,"社":-278,"空":-813,"統":1955,"者":-2233,"表":663,"語":-1073,"議":1219,"選":-1018,"郎":-368,"長":786,"間":1191,"題":2368,"館":-689,"":-514,"":-32768,"「":363,"イ":241,"ル":451,"ン":-343};
this.UW6__ = {",":227,".":808,"1":-270,"E1":306,"、":227,"。":808,"あ":-307,"う":189,"か":241,"が":-73,"く":-121,"こ":-200,"じ":1782,"す":383,"た":-428,"っ":573,"て":-1014,"で":101,"と":-105,"な":-253,"に":-149,"の":-417,"は":-236,"も":-206,"り":187,"る":-135,"を":195,"ル":-673,"ン":-496,"一":-277,"中":201,"件":-800,"会":624,"前":302,"区":1792,"員":-1212,"委":798,"学":-960,"市":887,"広":-695,"後":535,"業":-697,"相":753,"社":-507,"福":974,"空":-822,"者":1811,"連":463,"郎":1082,"":-270,"":306,"ル":-673,"ン":-496};
return this;
}
TinySegmenter.prototype.ctype_ = function(str) {
for (var i in this.chartype_) {
if (str.match(this.chartype_[i][0])) {
return this.chartype_[i][1];
}
}
return "O";
}
TinySegmenter.prototype.ts_ = function(v) {
if (v) { return v; }
return 0;
}
TinySegmenter.prototype.segment = function(input) {
if (input == null || input == undefined || input == "") {
return [];
}
var result = [];
var seg = ["B3","B2","B1"];
var ctype = ["O","O","O"];
var o = input.split("");
for (i = 0; i < o.length; ++i) {
seg.push(o[i]);
ctype.push(this.ctype_(o[i]))
}
seg.push("E1");
seg.push("E2");
seg.push("E3");
ctype.push("O");
ctype.push("O");
ctype.push("O");
var word = seg[3];
var p1 = "U";
var p2 = "U";
var p3 = "U";
for (var i = 4; i < seg.length - 3; ++i) {
var score = this.BIAS__;
var w1 = seg[i-3];
var w2 = seg[i-2];
var w3 = seg[i-1];
var w4 = seg[i];
var w5 = seg[i+1];
var w6 = seg[i+2];
var c1 = ctype[i-3];
var c2 = ctype[i-2];
var c3 = ctype[i-1];
var c4 = ctype[i];
var c5 = ctype[i+1];
var c6 = ctype[i+2];
score += this.ts_(this.UP1__[p1]);
score += this.ts_(this.UP2__[p2]);
score += this.ts_(this.UP3__[p3]);
score += this.ts_(this.BP1__[p1 + p2]);
score += this.ts_(this.BP2__[p2 + p3]);
score += this.ts_(this.UW1__[w1]);
score += this.ts_(this.UW2__[w2]);
score += this.ts_(this.UW3__[w3]);
score += this.ts_(this.UW4__[w4]);
score += this.ts_(this.UW5__[w5]);
score += this.ts_(this.UW6__[w6]);
score += this.ts_(this.BW1__[w2 + w3]);
score += this.ts_(this.BW2__[w3 + w4]);
score += this.ts_(this.BW3__[w4 + w5]);
score += this.ts_(this.TW1__[w1 + w2 + w3]);
score += this.ts_(this.TW2__[w2 + w3 + w4]);
score += this.ts_(this.TW3__[w3 + w4 + w5]);
score += this.ts_(this.TW4__[w4 + w5 + w6]);
score += this.ts_(this.UC1__[c1]);
score += this.ts_(this.UC2__[c2]);
score += this.ts_(this.UC3__[c3]);
score += this.ts_(this.UC4__[c4]);
score += this.ts_(this.UC5__[c5]);
score += this.ts_(this.UC6__[c6]);
score += this.ts_(this.BC1__[c2 + c3]);
score += this.ts_(this.BC2__[c3 + c4]);
score += this.ts_(this.BC3__[c4 + c5]);
score += this.ts_(this.TC1__[c1 + c2 + c3]);
score += this.ts_(this.TC2__[c2 + c3 + c4]);
score += this.ts_(this.TC3__[c3 + c4 + c5]);
score += this.ts_(this.TC4__[c4 + c5 + c6]);
// score += this.ts_(this.TC5__[c4 + c5 + c6]);
score += this.ts_(this.UQ1__[p1 + c1]);
score += this.ts_(this.UQ2__[p2 + c2]);
score += this.ts_(this.UQ3__[p3 + c3]);
score += this.ts_(this.BQ1__[p2 + c2 + c3]);
score += this.ts_(this.BQ2__[p2 + c3 + c4]);
score += this.ts_(this.BQ3__[p3 + c2 + c3]);
score += this.ts_(this.BQ4__[p3 + c3 + c4]);
score += this.ts_(this.TQ1__[p2 + c1 + c2 + c3]);
score += this.ts_(this.TQ2__[p2 + c2 + c3 + c4]);
score += this.ts_(this.TQ3__[p3 + c1 + c2 + c3]);
score += this.ts_(this.TQ4__[p3 + c2 + c3 + c4]);
var p = "O";
if (score > 0) {
result.push(word);
word = "";
p = "B";
}
p1 = p2;
p2 = p3;
p3 = p;
word += seg[i];
}
result.push(word);
return result;
}
lunr.TinySegmenter = TinySegmenter;
};
}));

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

2
assets/stylesheets/main.bde7dde4.min.css vendored Executable file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

2
assets/stylesheets/palette.ef6f36e2.min.css vendored Executable file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,52 +0,0 @@
-- MySQL dump 10.13 Distrib 8.0.22, for Linux (x86_64)
--
-- Host: 127.0.0.1 Database: apiAutoTest
-- ------------------------------------------------------
-- Server version 8.0.22
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!50503 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `user`
--
DROP TABLE IF EXISTS `user`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `user` (
`id` int NOT NULL AUTO_INCREMENT,
`username` varchar(255) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=993 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `user`
--
LOCK TABLES `user` WRITE;
/*!40000 ALTER TABLE `user` DISABLE KEYS */;
INSERT INTO `user` VALUES (3,'所属','1231233'),(604,'薛淑珍','71255132'),(633,'方杰','11881865'),(881,'傅晨','45363849'),(992,'莫英','72334041');
/*!40000 ALTER TABLE `user` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2021-01-19 10:19:19

578
change/index.html Executable file
View File

@ -0,0 +1,578 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.1.4">
<title>更新日志 - apiAutoTest手册</title>
<link rel="stylesheet" href="../assets/stylesheets/main.bde7dde4.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.ef6f36e2.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
<style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Roboto Mono"}</style>
</head>
<body dir="ltr" data-md-color-scheme="" data-md-color-primary="none" data-md-color-accent="none">
<script>function __prefix(e){return new URL("..",location).pathname+"."+e}function __get(e,t=localStorage){return JSON.parse(t.getItem(__prefix(e)))}</script>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href=".." title="apiAutoTest手册" class="md-header__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
apiAutoTest手册
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
更新日志
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href=".." title="apiAutoTest手册" class="md-nav__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
apiAutoTest手册
</label>
<div class="md-nav__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." class="md-nav__link">
介绍
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2" type="checkbox" id="__nav_2" >
<label class="md-nav__link" for="__nav_2">
使用
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="使用" data-md-level="1">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
使用
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../apiAutoTest/use/" class="md-nav__link">
1. 进行体验
</a>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/structure/" class="md-nav__link">
2. 目录结构
</a>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/config/" class="md-nav__link">
3. 配置文件
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_4" type="checkbox" id="__nav_2_4" >
<label class="md-nav__link" for="__nav_2_4">
4. 用例文件
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="4. 用例文件" data-md-level="2">
<label class="md-nav__title" for="__nav_2_4">
<span class="md-nav__icon md-icon"></span>
4. 用例文件
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../apiAutoTest/case/base/" class="md-nav__link">
4.1 基本介绍
</a>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/case/header/" class="md-nav__link">
4.2 请求头
</a>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/case/url/" class="md-nav__link">
4.3 接口地址
</a>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/case/files/" class="md-nav__link">
4.4 上传文件
</a>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/case/data/" class="md-nav__link">
4.5 请求数据
</a>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/case/extra/" class="md-nav__link">
4.6 提取参数
</a>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/case/sql/" class="md-nav__link">
4.7 后置sql
</a>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/case/assert/" class="md-nav__link">
4.8 预期结果
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/hooks/" class="md-nav__link">
5. 自定义函数
</a>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/jenkins/" class="md-nav__link">
6. Jenkins集成
</a>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/recording/" class="md-nav__link">
7. 接口录制
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../about/" class="md-nav__link">
关于
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<a href="./" class="md-nav__link md-nav__link--active">
更新日志
</a>
</li>
<li class="md-nav__item">
<a href="../license/" class="md-nav__link">
开源协议
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/zy7y/apiAutoTest/edit/master/docs/change.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
</a>
<h1>更新日志</h1>
<ul class="task-list">
<li class="task-list-item"><input type="checkbox" disabled checked/> 2021/05/19 apiAutoTest在线文档发布</li>
<li class="task-list-item"><input type="checkbox" disabled checked/> 2021/05/20 统一参数池&amp;变量池 为 参数变量池</li>
<li class="task-list-item"><input type="checkbox" disabled checked/> 2021/05/22 增加接口录制使用</li>
<li class="task-list-item"><input type="checkbox" disabled checked/> 2021/11/13 最终修订</li>
</ul>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer">
<a href="../about/" class="md-footer__link md-footer__link--prev" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</div>
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Previous
</span>
关于
</div>
</div>
</a>
<a href="../license/" class="md-footer__link md-footer__link--next" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Next
</span>
开源协议
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": [], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../assets/javascripts/workers/search.4fa0e4ee.min.js", "version": null}</script>
<script src="../assets/javascripts/bundle.1d3bfcf1.min.js"></script>
</body>
</html>

View File

@ -1,58 +0,0 @@
server:
# 本地接口服务
test: http://127.0.0.1:8888/
# https://space.bilibili.com/283273603 演示项目后端服务来自
dev: http://api.zreai.com:606/api/private/v1/
# 基准的请求头信息
request_headers:
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36
file_path:
test_case: data/case_data.xls
report: report/
log: log/run{time}.log
email:
# 发件人邮箱
user: 123456.com
# 发件人邮箱授权码
password: ASGCSFSGS
# 邮箱host
host: smtp.163.com
contents: 解压apiAutoReport.zip(接口测试报告)后请使用已安装Live Server 插件的VsCode打开解压目录下的index.html查看报告
# 收件人邮箱
addressees: ["收件人邮箱1", "收件人邮箱2"]
title: 接口自动化测试报告(见附件)
# 附件
enclosures: report.zip
# 数据库校验- mysql
database:
host: localhost
port: 3306
user: root
# 不用''会被解析成int类型数据
password: '123456'
db_name: apiautotest
charset: utf8mb4
# 数据库所在的服务器配置
ssh_server:
port: 22
username: root
password: '123456'
# 私有密钥文件路径
private_key_file:
# 私钥密码
privat_passowrd:
# 如果使用的docker容器部署mysql服务需要传入mysql的容器id/name
mysql_container: mysql8
# 数据库备份文件导出的本地路径, 需要保证存在该文件夹
sql_data_file: backup_sqls/

BIN
data/.DS_Store vendored

Binary file not shown.

Binary file not shown.

BIN
img/QQ群.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

BIN
img/allure报告.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

BIN
img/assert.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

BIN
img/cases.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

BIN
img/fail.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

BIN
img/run.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

BIN
img/sql1.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
img/sql2.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

BIN
img/xmind.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

BIN
img/单文件上传.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

BIN
img/参数池.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

BIN
img/多文件上传.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

BIN
img/安装依赖.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

BIN
img/安装依赖2.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

BIN
img/新建解释器1.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

BIN
img/服务端.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 KiB

BIN
img/查看报告.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 KiB

BIN
img/解释器2.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

681
index.html Executable file
View File

@ -0,0 +1,681 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.1.4">
<title>apiAutoTest手册</title>
<link rel="stylesheet" href="assets/stylesheets/main.bde7dde4.min.css">
<link rel="stylesheet" href="assets/stylesheets/palette.ef6f36e2.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
<style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Roboto Mono"}</style>
</head>
<body dir="ltr" data-md-color-scheme="" data-md-color-primary="none" data-md-color-accent="none">
<script>function __prefix(e){return new URL(".",location).pathname+"."+e}function __get(e,t=localStorage){return JSON.parse(t.getItem(__prefix(e)))}</script>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#_1" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="." title="apiAutoTest手册" class="md-header__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
apiAutoTest手册
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
介绍
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="." title="apiAutoTest手册" class="md-nav__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
apiAutoTest手册
</label>
<div class="md-nav__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
介绍
<span class="md-nav__icon md-icon"></span>
</label>
<a href="." class="md-nav__link md-nav__link--active">
介绍
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
功能点
</a>
</li>
<li class="md-nav__item">
<a href="#_2" class="md-nav__link">
资源获取
</a>
</li>
<li class="md-nav__item">
<a href="#_3" class="md-nav__link">
报告展示
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2" type="checkbox" id="__nav_2" >
<label class="md-nav__link" for="__nav_2">
使用
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="使用" data-md-level="1">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
使用
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="apiAutoTest/use/" class="md-nav__link">
1. 进行体验
</a>
</li>
<li class="md-nav__item">
<a href="apiAutoTest/structure/" class="md-nav__link">
2. 目录结构
</a>
</li>
<li class="md-nav__item">
<a href="apiAutoTest/config/" class="md-nav__link">
3. 配置文件
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_4" type="checkbox" id="__nav_2_4" >
<label class="md-nav__link" for="__nav_2_4">
4. 用例文件
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="4. 用例文件" data-md-level="2">
<label class="md-nav__title" for="__nav_2_4">
<span class="md-nav__icon md-icon"></span>
4. 用例文件
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="apiAutoTest/case/base/" class="md-nav__link">
4.1 基本介绍
</a>
</li>
<li class="md-nav__item">
<a href="apiAutoTest/case/header/" class="md-nav__link">
4.2 请求头
</a>
</li>
<li class="md-nav__item">
<a href="apiAutoTest/case/url/" class="md-nav__link">
4.3 接口地址
</a>
</li>
<li class="md-nav__item">
<a href="apiAutoTest/case/files/" class="md-nav__link">
4.4 上传文件
</a>
</li>
<li class="md-nav__item">
<a href="apiAutoTest/case/data/" class="md-nav__link">
4.5 请求数据
</a>
</li>
<li class="md-nav__item">
<a href="apiAutoTest/case/extra/" class="md-nav__link">
4.6 提取参数
</a>
</li>
<li class="md-nav__item">
<a href="apiAutoTest/case/sql/" class="md-nav__link">
4.7 后置sql
</a>
</li>
<li class="md-nav__item">
<a href="apiAutoTest/case/assert/" class="md-nav__link">
4.8 预期结果
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="apiAutoTest/hooks/" class="md-nav__link">
5. 自定义函数
</a>
</li>
<li class="md-nav__item">
<a href="apiAutoTest/jenkins/" class="md-nav__link">
6. Jenkins集成
</a>
</li>
<li class="md-nav__item">
<a href="apiAutoTest/recording/" class="md-nav__link">
7. 接口录制
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="about/" class="md-nav__link">
关于
</a>
</li>
<li class="md-nav__item">
<a href="change/" class="md-nav__link">
更新日志
</a>
</li>
<li class="md-nav__item">
<a href="license/" class="md-nav__link">
开源协议
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
功能点
</a>
</li>
<li class="md-nav__item">
<a href="#_2" class="md-nav__link">
资源获取
</a>
</li>
<li class="md-nav__item">
<a href="#_3" class="md-nav__link">
报告展示
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/zy7y/apiAutoTest/edit/master/docs/index.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
</a>
<h1>介绍</h1>
<p><img alt="" src="https://img.shields.io/github/license/zy7y/apiAutoTest" />
<img alt="" src="https://img.shields.io/github/stars/zy7y/apiAutoTest" />
<img alt="" src="https://img.shields.io/github/forks/zy7y/apiAutoTest" /> </p>
<div class="admonition tip">
<p class="admonition-title">Python &gt;= 3.8</p>
</div>
<p>HTTP/HTTPS接口自动化测试工具采用Excel来管理用例,填表格即可完成接口测试.
<img alt="" src="img/xmind.png" /></p>
<h2 id="_1">功能点<a class="headerlink" href="#_1" title="Permanent link">&para;</a></h2>
<ul class="task-list">
<li class="task-list-item"><input type="checkbox" disabled checked/> 测试前后数据清洗操作</li>
<li class="task-list-item"><input type="checkbox" disabled checked/> 业务接口之间的数据依赖处理</li>
<li class="task-list-item"><input type="checkbox" disabled checked/> 用例中自定义函数定义及使用, 应对复杂的动态参数</li>
<li class="task-list-item"><input type="checkbox" disabled checked/> 支持后置SQL操作(可多条), 并将结果作用与后续用例中</li>
<li class="task-list-item"><input type="checkbox" disabled checked/> 支持动态多数据断言方式</li>
<li class="task-list-item"><input type="checkbox" disabled checked/> 支持测试报告压缩,邮件发送 </li>
<li class="task-list-item"><input type="checkbox" disabled checked/> 可选用例失败重跑机制</li>
<li class="task-list-item"><input type="checkbox" disabled checked/> 接口录制,提升用例写作效率</li>
</ul>
<h2 id="_2">资源获取<a class="headerlink" href="#_2" title="Permanent link">&para;</a></h2>
<details class="success" open="open"><summary>B站视频解析</summary><ul class="task-list">
<li class="task-list-item"><input type="checkbox" disabled checked/> <a href="https://www.bilibili.com/video/BV1rr4y1r754">master 分支 当下最新版本代码的解析视频</a></li>
<li class="task-list-item"><input type="checkbox" disabled checked/> <a href="https://www.bilibili.com/video/BV1pv411i7zK">version1.0 分支 2020年8月 最初版本的解析视频</a></li>
</ul>
</details>
<details class="success" open="open"><summary>源码获取</summary><ul class="task-list">
<li class="task-list-item"><input type="checkbox" disabled checked/> <a href="https://gitee.com/zy7y/apiAutoTest">Gitee 代码最新</a></li>
<li class="task-list-item"><input type="checkbox" disabled checked/> <a href="https://github.com/zy7y/apiAutoTest">GitHub</a> </li>
</ul>
</details>
<h2 id="_3">报告展示<a class="headerlink" href="#_3" title="Permanent link">&para;</a></h2>
<p><img alt="allure报告" src="img/allure%E6%8A%A5%E5%91%8A.png" /></p>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer">
<a href="apiAutoTest/use/" class="md-footer__link md-footer__link--next" rel="next">
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Next
</span>
1. 进行体验
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": ".", "features": [], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "assets/javascripts/workers/search.4fa0e4ee.min.js", "version": null}</script>
<script src="assets/javascripts/bundle.1d3bfcf1.min.js"></script>
</body>
</html>

580
license/index.html Executable file
View File

@ -0,0 +1,580 @@
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-7.1.4">
<title>开源协议 - apiAutoTest手册</title>
<link rel="stylesheet" href="../assets/stylesheets/main.bde7dde4.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.ef6f36e2.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
<style>:root{--md-text-font-family:"Roboto";--md-code-font-family:"Roboto Mono"}</style>
</head>
<body dir="ltr" data-md-color-scheme="" data-md-color-primary="none" data-md-color-accent="none">
<script>function __prefix(e){return new URL("..",location).pathname+"."+e}function __get(e,t=localStorage){return JSON.parse(t.getItem(__prefix(e)))}</script>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href=".." title="apiAutoTest手册" class="md-header__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
apiAutoTest手册
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
开源协议
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</label>
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
</button>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href=".." title="apiAutoTest手册" class="md-nav__button md-logo" aria-label="apiAutoTest手册" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54z"/></svg>
</a>
apiAutoTest手册
</label>
<div class="md-nav__source">
<a href="https://github.com/zy7y/apiAutoTest/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." class="md-nav__link">
介绍
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2" type="checkbox" id="__nav_2" >
<label class="md-nav__link" for="__nav_2">
使用
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="使用" data-md-level="1">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
使用
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../apiAutoTest/use/" class="md-nav__link">
1. 进行体验
</a>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/structure/" class="md-nav__link">
2. 目录结构
</a>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/config/" class="md-nav__link">
3. 配置文件
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_4" type="checkbox" id="__nav_2_4" >
<label class="md-nav__link" for="__nav_2_4">
4. 用例文件
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" aria-label="4. 用例文件" data-md-level="2">
<label class="md-nav__title" for="__nav_2_4">
<span class="md-nav__icon md-icon"></span>
4. 用例文件
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../apiAutoTest/case/base/" class="md-nav__link">
4.1 基本介绍
</a>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/case/header/" class="md-nav__link">
4.2 请求头
</a>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/case/url/" class="md-nav__link">
4.3 接口地址
</a>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/case/files/" class="md-nav__link">
4.4 上传文件
</a>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/case/data/" class="md-nav__link">
4.5 请求数据
</a>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/case/extra/" class="md-nav__link">
4.6 提取参数
</a>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/case/sql/" class="md-nav__link">
4.7 后置sql
</a>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/case/assert/" class="md-nav__link">
4.8 预期结果
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/hooks/" class="md-nav__link">
5. 自定义函数
</a>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/jenkins/" class="md-nav__link">
6. Jenkins集成
</a>
</li>
<li class="md-nav__item">
<a href="../apiAutoTest/recording/" class="md-nav__link">
7. 接口录制
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../about/" class="md-nav__link">
关于
</a>
</li>
<li class="md-nav__item">
<a href="../change/" class="md-nav__link">
更新日志
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
<a href="./" class="md-nav__link md-nav__link--active">
开源协议
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="https://github.com/zy7y/apiAutoTest/edit/master/docs/license.md" title="Edit this page" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg>
</a>
<h1>开源协议</h1>
<div class="highlight"><pre><span></span><code>MIT License
Copyright (c) 2020 zy7y
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the &quot;Software&quot;), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
</code></pre></div>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer">
<a href="../change/" class="md-footer__link md-footer__link--prev" rel="prev">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
</div>
<div class="md-footer__title">
<div class="md-ellipsis">
<span class="md-footer__direction">
Previous
</span>
更新日志
</div>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-footer-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": [], "translations": {"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}, "search": "../assets/javascripts/workers/search.4fa0e4ee.min.js", "version": null}</script>
<script src="../assets/javascripts/bundle.1d3bfcf1.min.js"></script>
</body>
</html>

View File

@ -1,215 +0,0 @@
2021-02-27 15:22:26.190 | INFO | __main__:run:28 -
_ _ _ _____ _
__ _ _ __ (_) / \ _ _| |_ __|_ _|__ ___| |_
/ _` | '_ \| | / _ \| | | | __/ _ \| |/ _ \/ __| __|
| (_| | |_) | |/ ___ \ |_| | || (_) | | __/\__ \ |_
\__,_| .__/|_/_/ \_\__,_|\__\___/|_|\___||___/\__|
|_|
Starting ... ... ...
2021-02-27 15:22:26.412 | DEBUG | api.base_requests:send_request:34 - 用例进行处理前数据:
接口路径: login
请求参数: {"username": "admin", "password": ""}
后置sql:
预期结果: {"$.meta.code":400}
2021-02-27 15:22:26.506 | INFO | api.base_requests:send_api:81 -
最终请求地址:http://www.ysqorz.top:8888/api/private/v1/login?username=admin&password=
请求方法:get
请求头:{'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.9', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'}
请求参数:{'username': 'admin', 'password': ''}
上传文件:None
响应数据:{'data': None, 'meta': {'msg': '参数错误', 'status': 400}}
2021-02-27 15:22:26.511 | INFO | tools.data_process:save_response:27 - 添加key: case_001, 对应value: {'data': None, 'meta': {'msg': '参数错误', 'status': 400}}
2021-02-27 15:22:26.514 | ERROR | tools:extractor:31 - 提取不到内容,丢给你一个错误!'bool' object is not subscriptable
2021-02-27 15:22:26.515 | INFO | tools.data_process:assert_result:115 - 第1个断言,实际结果:None | 预期结果:400
断言结果 False
2021-02-27 15:22:26.636 | DEBUG | api.base_requests:send_request:34 - 用例进行处理前数据:
接口路径: login
请求参数: {"username": "admin", "password": "123456"}
后置sql: select * from user where id=&$.case_002.data.id&;
预期结果: {"$.meta":{ "msg": "登录成功", "status": 200 }}
2021-02-27 15:22:26.808 | INFO | api.base_requests:send_api:81 -
最终请求地址:http://www.ysqorz.top:8888/api/private/v1/login
请求方法:post
请求头:{'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.9', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'}
请求参数:{'username': 'admin', 'password': '123456'}
上传文件:None
响应数据:{'data': {'id': 500, 'rid': 0, 'username': 'admin', 'mobile': '12345678', 'email': 'adsfad@qq.com', 'token': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjUwMCwicmlkIjowLCJpYXQiOjE2MTQ0MTA1NDYsImV4cCI6MTYxNDQ5Njk0Nn0.YZ1NSJ-lIGTDO5UFfbwmVJIfWtte_MCRbcANZoipIZA'}, 'meta': {'msg': '登录成功', 'status': 200}}
2021-02-27 15:22:26.813 | INFO | tools.data_process:save_response:27 - 添加key: case_002, 对应value: {'data': {'id': 500, 'rid': 0, 'username': 'admin', 'mobile': '12345678', 'email': 'adsfad@qq.com', 'token': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjUwMCwicmlkIjowLCJpYXQiOjE2MTQ0MTA1NDYsImV4cCI6MTYxNDQ5Njk0Nn0.YZ1NSJ-lIGTDO5UFfbwmVJIfWtte_MCRbcANZoipIZA'}, 'meta': {'msg': '登录成功', 'status': 200}}
2021-02-27 15:22:26.816 | INFO | tools.data_process:assert_result:115 - 第1个断言,实际结果:{'msg': '登录成功', 'status': 200} | 预期结果:{'msg': '登录成功', 'status': 200}
断言结果 True
2021-02-27 15:22:26.827 | DEBUG | api.base_requests:send_request:34 - 用例进行处理前数据:
接口路径: users
请求参数: {"pagenum": 1, "pagesize": "12", "meta": &$.case_002.data.meta&, "userId": &$.case_002.data.id&}
后置sql:
预期结果: {"$.meta":{"msg": "获取管理员列表成功", "status": 200}}
2021-02-27 15:22:26.829 | ERROR | tools:extractor:31 - 提取不到内容,丢给你一个错误!'bool' object is not subscriptable
2021-02-27 15:22:26.830 | ERROR | tools:extractor:31 - 提取不到内容,丢给你一个错误!'bool' object is not subscriptable
2021-02-27 15:22:26.830 | DEBUG | tools:rep_expr:45 - &$.case_002.data.meta& 替换的值为 None
2021-02-27 15:22:26.831 | DEBUG | tools:rep_expr:45 - &$.case_002.data.id& 替换的值为 500
2021-02-27 15:22:26.972 | INFO | api.base_requests:send_api:81 -
最终请求地址:http://www.ysqorz.top:8888/api/private/v1/users?pagenum=1&pagesize=12&userId=500
请求方法:get
请求头:{'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.9', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36', 'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjUwMCwicmlkIjowLCJpYXQiOjE2MTQ0MTA1NDYsImV4cCI6MTYxNDQ5Njk0Nn0.YZ1NSJ-lIGTDO5UFfbwmVJIfWtte_MCRbcANZoipIZA'}
请求参数:{'pagenum': 1, 'pagesize': '12', 'meta': None, 'userId': 500}
上传文件:None
响应数据:{'data': {'total': 4, 'pagenum': 1, 'users': [{'id': 500, 'role_name': '超级管理员', 'username': 'admin', 'create_time': 1486720211, 'mobile': '12345678', 'email': 'adsfad@qq.com', 'mg_state': True}, {'id': 502, 'role_name': '测试角色2', 'username': 'linken', 'create_time': 1486720211, 'mobile': '1213213123', 'email': 'asdf@qq.com', 'mg_state': False}, {'id': 508, 'role_name': '主管', 'username': 'asdf1', 'create_time': 1511853015, 'mobile': '123123', 'email': 'adfsa@qq.com', 'mg_state': True}, {'id': 509, 'role_name': 'test', 'username': 'asdf123', 'create_time': 1511853353, 'mobile': '1111', 'email': 'asdf@qq.com', 'mg_state': False}]}, 'meta': {'msg': '获取管理员列表成功', 'status': 200}}
2021-02-27 15:22:26.977 | INFO | tools.data_process:save_response:27 - 添加key: case_003, 对应value: {'data': {'total': 4, 'pagenum': 1, 'users': [{'id': 500, 'role_name': '超级管理员', 'username': 'admin', 'create_time': 1486720211, 'mobile': '12345678', 'email': 'adsfad@qq.com', 'mg_state': True}, {'id': 502, 'role_name': '测试角色2', 'username': 'linken', 'create_time': 1486720211, 'mobile': '1213213123', 'email': 'asdf@qq.com', 'mg_state': False}, {'id': 508, 'role_name': '主管', 'username': 'asdf1', 'create_time': 1511853015, 'mobile': '123123', 'email': 'adfsa@qq.com', 'mg_state': True}, {'id': 509, 'role_name': 'test', 'username': 'asdf123', 'create_time': 1511853353, 'mobile': '1111', 'email': 'asdf@qq.com', 'mg_state': False}]}, 'meta': {'msg': '获取管理员列表成功', 'status': 200}}
2021-02-27 15:22:26.981 | INFO | tools.data_process:assert_result:115 - 第1个断言,实际结果:{'msg': '获取管理员列表成功', 'status': 200} | 预期结果:{'msg': '获取管理员列表成功', 'status': 200}
断言结果 True
2021-02-27 15:22:26.994 | DEBUG | api.base_requests:send_request:34 - 用例进行处理前数据:
接口路径: users
请求参数: {"pagenum": 1, "pagesize": "12", "msg": &$.msg&}
后置sql:
预期结果: {"$.meta":{"msg": "获取管理员列表成功", "status": 200}}
2021-02-27 15:22:26.998 | ERROR | tools:extractor:31 - 提取不到内容,丢给你一个错误!'bool' object is not subscriptable
2021-02-27 15:22:26.998 | ERROR | tools:extractor:31 - 提取不到内容,丢给你一个错误!'bool' object is not subscriptable
2021-02-27 15:22:26.999 | DEBUG | tools:rep_expr:45 - &$.msg& 替换的值为 None
2021-02-27 15:22:27.046 | INFO | api.base_requests:send_api:81 -
最终请求地址:http://www.ysqorz.top:8888/api/private/v1/users
请求方法:get
请求头:{'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.9', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'}
请求参数:{'pagenum': 1, 'pagesize': '12', 'msg': None}
上传文件:None
响应数据:{'data': None, 'meta': {'msg': '无效token', 'status': 400}}
2021-02-27 15:22:27.047 | INFO | tools.data_process:save_response:27 - 添加key: case_004, 对应value: {'data': None, 'meta': {'msg': '无效token', 'status': 400}}
2021-02-27 15:22:27.049 | INFO | tools.data_process:assert_result:115 - 第1个断言,实际结果:{'msg': '无效token', 'status': 400} | 预期结果:{'msg': '获取管理员列表成功', 'status': 200}
断言结果 False
2021-02-27 15:22:27.061 | DEBUG | api.base_requests:send_request:34 - 用例进行处理前数据:
接口路径: users
请求参数: {"username": "tery132131","password": "123456"}
后置sql:
预期结果: {"$.meta":{"msg":"创建成功","status":201}}
2021-02-27 15:22:27.237 | INFO | api.base_requests:send_api:81 -
最终请求地址:http://www.ysqorz.top:8888/api/private/v1/users
请求方法:post
请求头:{'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.9', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36', 'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjUwMCwicmlkIjowLCJpYXQiOjE2MTQ0MTA1NDYsImV4cCI6MTYxNDQ5Njk0Nn0.YZ1NSJ-lIGTDO5UFfbwmVJIfWtte_MCRbcANZoipIZA'}
请求参数:{'username': 'tery132131', 'password': '123456'}
上传文件:None
响应数据:{'data': {'id': 510, 'username': 'tery132131', 'role_id': -1, 'create_time': 1614410547}, 'meta': {'msg': '创建成功', 'status': 201}}
2021-02-27 15:22:27.238 | INFO | tools.data_process:save_response:27 - 添加key: case_005, 对应value: {'data': {'id': 510, 'username': 'tery132131', 'role_id': -1, 'create_time': 1614410547}, 'meta': {'msg': '创建成功', 'status': 201}}
2021-02-27 15:22:27.239 | INFO | tools.data_process:assert_result:115 - 第1个断言,实际结果:{'msg': '创建成功', 'status': 201} | 预期结果:{'msg': '创建成功', 'status': 201}
断言结果 True
2021-02-27 15:22:27.243 | DEBUG | api.base_requests:send_request:34 - 用例进行处理前数据:
接口路径: users/&$.case_005.data.id&/state/&$.case_005.data.careate_time&
请求参数:
后置sql:
预期结果: {"$.meta":{"msg": "设置状态成功", "status": 200}}
2021-02-27 15:22:27.243 | DEBUG | tools:rep_expr:45 - &$.case_005.data.id& 替换的值为 510
2021-02-27 15:22:27.244 | ERROR | tools:extractor:31 - 提取不到内容,丢给你一个错误!'bool' object is not subscriptable
2021-02-27 15:22:27.244 | ERROR | tools:extractor:31 - 提取不到内容,丢给你一个错误!'bool' object is not subscriptable
2021-02-27 15:22:27.244 | DEBUG | tools:rep_expr:45 - &$.case_005.data.careate_time& 替换的值为 None
2021-02-27 15:22:27.300 | INFO | api.base_requests:send_api:81 -
最终请求地址:http://www.ysqorz.top:8888/api/private/v1/users/510/state/None
请求方法:put
请求头:{'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.9', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36', 'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjUwMCwicmlkIjowLCJpYXQiOjE2MTQ0MTA1NDYsImV4cCI6MTYxNDQ5Njk0Nn0.YZ1NSJ-lIGTDO5UFfbwmVJIfWtte_MCRbcANZoipIZA'}
请求参数:None
上传文件:None
响应数据:{'data': {'id': 510, 'rid': -1, 'username': 'tery132131', 'mobile': None, 'email': None, 'mg_state': 0}, 'meta': {'msg': '设置状态成功', 'status': 200}}
2021-02-27 15:22:27.301 | INFO | tools.data_process:save_response:27 - 添加key: case_006, 对应value: {'data': {'id': 510, 'rid': -1, 'username': 'tery132131', 'mobile': None, 'email': None, 'mg_state': 0}, 'meta': {'msg': '设置状态成功', 'status': 200}}
2021-02-27 15:22:27.302 | INFO | tools.data_process:assert_result:115 - 第1个断言,实际结果:{'msg': '设置状态成功', 'status': 200} | 预期结果:{'msg': '设置状态成功', 'status': 200}
断言结果 True
2021-02-27 15:22:27.306 | DEBUG | api.base_requests:send_request:34 - 用例进行处理前数据:
接口路径: users/&$.case_005.data.id&/state/2
请求参数:
后置sql:
预期结果: {"$.meta":{"msg": "设置状态成功", "status": 200}}
2021-02-27 15:22:27.306 | DEBUG | tools:rep_expr:45 - &$.case_005.data.id& 替换的值为 510
2021-02-27 15:22:27.353 | INFO | api.base_requests:send_api:81 -
最终请求地址:http://www.ysqorz.top:8888/api/private/v1/users/510/state/2
请求方法:put
请求头:{'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.9', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36', 'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjUwMCwicmlkIjowLCJpYXQiOjE2MTQ0MTA1NDYsImV4cCI6MTYxNDQ5Njk0Nn0.YZ1NSJ-lIGTDO5UFfbwmVJIfWtte_MCRbcANZoipIZA'}
请求参数:None
上传文件:None
响应数据:{'data': {'id': 510, 'rid': -1, 'username': 'tery132131', 'mobile': None, 'email': None, 'mg_state': 0}, 'meta': {'msg': '设置状态成功', 'status': 200}}
2021-02-27 15:22:27.354 | INFO | tools.data_process:save_response:27 - 添加key: case_007, 对应value: {'data': {'id': 510, 'rid': -1, 'username': 'tery132131', 'mobile': None, 'email': None, 'mg_state': 0}, 'meta': {'msg': '设置状态成功', 'status': 200}}
2021-02-27 15:22:27.355 | INFO | tools.data_process:assert_result:115 - 第1个断言,实际结果:{'msg': '设置状态成功', 'status': 200} | 预期结果:{'msg': '设置状态成功', 'status': 200}
断言结果 True
2021-02-27 15:22:27.359 | DEBUG | api.base_requests:send_request:34 - 用例进行处理前数据:
接口路径: users/&$.case_005.data.id&
请求参数:
后置sql:
预期结果: {"$.meta":{"msg": "删除成功", "status": 200}}
2021-02-27 15:22:27.360 | DEBUG | tools:rep_expr:45 - &$.case_005.data.id& 替换的值为 510
2021-02-27 15:22:27.413 | INFO | api.base_requests:send_api:81 -
最终请求地址:http://www.ysqorz.top:8888/api/private/v1/users/510
请求方法:delete
请求头:{'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.9', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36', 'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjUwMCwicmlkIjowLCJpYXQiOjE2MTQ0MTA1NDYsImV4cCI6MTYxNDQ5Njk0Nn0.YZ1NSJ-lIGTDO5UFfbwmVJIfWtte_MCRbcANZoipIZA'}
请求参数:None
上传文件:None
响应数据:{'data': None, 'meta': {'msg': '删除成功', 'status': 200}}
2021-02-27 15:22:27.417 | INFO | tools.data_process:save_response:27 - 添加key: case_008, 对应value: {'data': None, 'meta': {'msg': '删除成功', 'status': 200}}
2021-02-27 15:22:27.419 | INFO | tools.data_process:assert_result:115 - 第1个断言,实际结果:{'msg': '删除成功', 'status': 200} | 预期结果:{'msg': '删除成功', 'status': 200}
断言结果 True
2021-02-27 15:22:27.431 | DEBUG | api.base_requests:send_request:34 - 用例进行处理前数据:
接口路径: users/
请求参数:
后置sql:
预期结果: {"$.msg": "成功"}
2021-02-27 15:22:27.480 | INFO | api.base_requests:send_api:81 -
最终请求地址:http://www.ysqorz.top:8888/api/private/v1/users/
请求方法:post
请求头:{'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.9', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'}
请求参数:None
上传文件:None
响应数据:{'data': None, 'meta': {'msg': '无效token', 'status': 400}}
2021-02-27 15:22:27.484 | INFO | tools.data_process:save_response:27 - 添加key: case_013, 对应value: {'data': None, 'meta': {'msg': '无效token', 'status': 400}}
2021-02-27 15:22:27.486 | ERROR | tools:extractor:31 - 提取不到内容,丢给你一个错误!'bool' object is not subscriptable
2021-02-27 15:22:27.487 | INFO | tools.data_process:assert_result:115 - 第1个断言,实际结果:None | 预期结果:成功
断言结果 False
2021-02-27 15:22:27.516 | DEBUG | api.base_requests:send_request:34 - 用例进行处理前数据:
接口路径: users/
请求参数: {"username": "tery","password": "@sum_data(1,3)@"}
后置sql:
预期结果: {"$.msg": "成功"}
2021-02-27 15:22:27.517 | DEBUG | tools:rep_expr:50 - 执行hooks函数sum_data(1,3) 替换的值为 4
2021-02-27 15:22:27.691 | INFO | api.base_requests:send_api:81 -
最终请求地址:http://www.ysqorz.top:8888/api/private/v1/users/
请求方法:post
请求头:{'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.9', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36', 'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjUwMCwicmlkIjowLCJpYXQiOjE2MTQ0MTA1NDYsImV4cCI6MTYxNDQ5Njk0Nn0.YZ1NSJ-lIGTDO5UFfbwmVJIfWtte_MCRbcANZoipIZA'}
请求参数:{'username': 'tery', 'password': '4'}
上传文件:None
响应数据:{'data': {'id': 511, 'username': 'tery', 'role_id': -1, 'create_time': 1614410547}, 'meta': {'msg': '创建成功', 'status': 201}}
2021-02-27 15:22:27.695 | INFO | tools.data_process:save_response:27 - 添加key: case_017, 对应value: {'data': {'id': 511, 'username': 'tery', 'role_id': -1, 'create_time': 1614410547}, 'meta': {'msg': '创建成功', 'status': 201}}
2021-02-27 15:22:27.698 | ERROR | tools:extractor:31 - 提取不到内容,丢给你一个错误!'bool' object is not subscriptable
2021-02-27 15:22:27.699 | INFO | tools.data_process:assert_result:115 - 第1个断言,实际结果:None | 预期结果:成功
断言结果 False
2021-02-27 15:22:27.727 | DEBUG | api.base_requests:send_request:34 - 用例进行处理前数据:
接口路径: users/
请求参数: {"username": "tery","password": @get_current_highest()@}
后置sql:
预期结果: {"$.msg": "成功"}
2021-02-27 15:22:27.729 | DEBUG | tools:rep_expr:50 - 执行hooks函数get_current_highest() 替换的值为 1614410547
2021-02-27 15:22:27.774 | INFO | api.base_requests:send_api:81 -
最终请求地址:http://www.ysqorz.top:8888/api/private/v1/users/
请求方法:post
请求头:{'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.9', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36', 'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjUwMCwicmlkIjowLCJpYXQiOjE2MTQ0MTA1NDYsImV4cCI6MTYxNDQ5Njk0Nn0.YZ1NSJ-lIGTDO5UFfbwmVJIfWtte_MCRbcANZoipIZA'}
请求参数:{'username': 'tery', 'password': 1614410547}
上传文件:None
响应数据:{'data': None, 'meta': {'msg': '用户名已存在', 'status': 400}}
2021-02-27 15:22:27.778 | INFO | tools.data_process:save_response:27 - 添加key: case_018, 对应value: {'data': None, 'meta': {'msg': '用户名已存在', 'status': 400}}
2021-02-27 15:22:27.780 | ERROR | tools:extractor:31 - 提取不到内容,丢给你一个错误!'bool' object is not subscriptable
2021-02-27 15:22:27.781 | INFO | tools.data_process:assert_result:115 - 第1个断言,实际结果:None | 预期结果:成功
断言结果 False
2021-02-27 15:22:27.809 | DEBUG | api.base_requests:send_request:34 - 用例进行处理前数据:
接口路径: users/@sum_data(&$.case_005.data.id&, 2)@/
请求参数: {"username": "tery","password": @sum_data(&$.case_002.data.id&, 66)@, "timer": @get_current_highest()@, "timer_str": " @get_current_highest()@"}
后置sql:
预期结果: {"$.meta":{"msg": "设置状态成功", "status": 200}}
2021-02-27 15:22:27.811 | DEBUG | tools:rep_expr:45 - &$.case_005.data.id& 替换的值为 510
2021-02-27 15:22:27.812 | DEBUG | tools:rep_expr:50 - 执行hooks函数sum_data(510, 2) 替换的值为 512
2021-02-27 15:22:27.815 | DEBUG | tools:rep_expr:45 - &$.case_002.data.id& 替换的值为 500
2021-02-27 15:22:27.816 | DEBUG | tools:rep_expr:50 - 执行hooks函数sum_data(500, 66) 替换的值为 566
2021-02-27 15:22:27.816 | DEBUG | tools:rep_expr:50 - 执行hooks函数get_current_highest() 替换的值为 1614410547
2021-02-27 15:22:27.817 | DEBUG | tools:rep_expr:50 - 执行hooks函数get_current_highest() 替换的值为 1614410547
2021-02-27 15:22:27.863 | INFO | api.base_requests:send_api:81 -
最终请求地址:http://www.ysqorz.top:8888/api/private/v1/users/512/
请求方法:put
请求头:{'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.9', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36', 'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjUwMCwicmlkIjowLCJpYXQiOjE2MTQ0MTA1NDYsImV4cCI6MTYxNDQ5Njk0Nn0.YZ1NSJ-lIGTDO5UFfbwmVJIfWtte_MCRbcANZoipIZA'}
请求参数:{'username': 'tery', 'password': 566, 'timer': 1614410547, 'timer_str': ' 1614410547'}
上传文件:None
响应数据:{'data': None, 'meta': {'msg': '更新失败', 'status': 400}}
2021-02-27 15:22:27.867 | INFO | tools.data_process:save_response:27 - 添加key: case_019, 对应value: {'data': None, 'meta': {'msg': '更新失败', 'status': 400}}
2021-02-27 15:22:27.871 | INFO | tools.data_process:assert_result:115 - 第1个断言,实际结果:{'msg': '更新失败', 'status': 400} | 预期结果:{'msg': '设置状态成功', 'status': 200}
断言结果 False
2021-02-27 15:22:30.280 | SUCCESS | __main__:run:43 - 报告已生成

View File

@ -1 +0,0 @@
"http://www.ysqorz.top:8888/api/private/v1/users/512/state/None"

View File

@ -1,4 +0,0 @@
{
"username": "admin",
"password": ""
}

View File

@ -1,10 +0,0 @@
2021-01-27 14:03:00.681 | INFO  | api.base_requests:send_api:80 - 
最终请求地址:http://www.ysqorz.top:8888/api/private/v1/users/512
请求方法:delete
请求头:{'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,zh;q=0.9', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36', 'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjUwMCwicmlkIjowLCJpYXQiOjE2MTE3MjczNzksImV4cCI6MTYxMTgxMzc3OX0.RpFpMOgYZBOS46IEQ5iRUSQ904te4F_viQaEBXTmC78'}
请求参数:None
上传文件:None
响应数据:{'data': None, 'meta': {'msg': '删除成功', 'status': 200}}
2021-01-27 14:03:00.684 | INFO  | tools.data_process:save_response:27 - 添加key: case_008, 对应value: {'data': None, 'meta': {'msg': '删除成功', 'status': 200}}
2021-01-27 14:03:00.686 | INFO  | tools.data_process:assert_result:115 - 第1个断言,实际结果:{'msg': '删除成功', 'status': 200} | 预期结果:{'msg': '删除成功', 'status': 200}
断言结果 True

View File

@ -1,5 +0,0 @@
{
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
}

View File

@ -1 +0,0 @@
"实际结果:{'msg': '无效token', 'status': 400} = 预期结果:{'msg': '获取管理员列表成功', 'status': 200}"

View File

@ -1,6 +0,0 @@
{
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36",
"Authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjUwMCwicmlkIjowLCJpYXQiOjE2MTE3MjczNzksImV4cCI6MTYxMTgxMzc3OX0.RpFpMOgYZBOS46IEQ5iRUSQ904te4F_viQaEBXTmC78"
}

View File

@ -1,12 +0,0 @@
{
"data": {
"id": 512,
"username": "tery",
"role_id": -1,
"create_time": 1611727380
},
"meta": {
"msg": "创建成功",
"status": 201
}
}

View File

@ -1 +0,0 @@
"实际结果:None = 预期结果:成功"

View File

@ -1,6 +0,0 @@
{
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36",
"Authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjUwMCwicmlkIjowLCJpYXQiOjE2MTE3MjczNzksImV4cCI6MTYxMTgxMzc3OX0.RpFpMOgYZBOS46IEQ5iRUSQ904te4F_viQaEBXTmC78"
}

View File

@ -1 +0,0 @@
"http://www.ysqorz.top:8888/api/private/v1/users/512/state/2"

View File

@ -1,4 +0,0 @@
{
"username": "tery",
"password": "3"
}

View File

@ -1,7 +0,0 @@
{
"data": null,
"meta": {
"msg": "用户名已存在",
"status": 400
}
}

Some files were not shown because too many files have changed in this diff Show More