# 接口自动化平台用例执行引擎 — ApiTestEngine
## 前言
ApiTestEngine主要是为接口自动化平台 开发的一个Http接口用例执行的引擎,其实之前开发的接口自动化框架apin也可以作为测试平台的用例执行引擎。但是apin最初设计的初衷是基于json或yaml文件来编写测试用例,里面设计了更多规则。用来进行平台开发反而有些笨重了,也不适合在课程中教学适用,于是在apin的基础写进行了精简和优化,开发了 ApiTestEngine这个更为精简和灵活的用例执行引擎。下面介绍一下ApiTestEngine的具体使用。
安装命令:
```python
pip install ApiTestEngine
```
```python
"============来自课程讲师(木森)的提醒,请勿私自转卖视频,否则后果自负,============="
"============前两章的视频泄漏,买盗版的的人太多,引擎源码我动了手脚,出错概不负责============="
"============买正版课程的同学请私聊我获取引擎源码,或者使用第五章从0到1自己写的引擎============"
"另外买了盗版的同学,加我提供卖你盗版视频的人的联系方式,聊天记录,交易转账订单,可以找我领红包哈,如果购买正版课程课可减免200元)============="
"完整接口平台课程只卖899,包含答疑服务,需要加我微信python771,不要买盗版============="
"完整web平台课程只卖899,包含答疑服务,需要加我微信python771,不要买盗版============="
"完整测试开发系列课程1599,包含答疑服务,需要加我微信python771,不要买盗版============="
```
## 一、用例执行函数
- 用例执行入口函数为core.cases模块中的run_test,具体使用如下
> ##### run_test参数说明
>
> - ##### case_data: 执行的测试数据
>
> - ##### env_config:执行的环境配置
>
> - ##### debug:是否为debug模式(单接口调试运行使用debug模式)
```python
# 测试数据(详细结构说明看下一节)
case_data = [{},{}]
# 运行环境数据(详细结构说明看第三节)
config = {}
result = run_test(case_data=case_data, env_config=config, debug=False)
```
## 二、测试数据结构
下面详细介绍run_test执行测试的用例数据(case_data参数)的‘’
#### 1、 测试数据基本结构
> ```python
> [
> {
> 'name':"测试场景名称1"
> 'cases':['用例数据1','用例数据2']
> },
> {
> 'name':"测试场景名称2"
> 'cases':['用例数据3','用例数据4']
> },
> ......
> ]
> ```
>
> 执行的用例数据为list类型,列表中的元素为测试场景(dict类型),测试场景有两个字段,name和cases
>
> - ###### name:测试场景的名称
>
> - ###### cases:包含该测试场景下所有用例的列表
#### 2、测试场景中测试用例的数据结构
> 注意:测试用例数据为一个字典,具体结构如下:
>
> ```python
> {
> "title": "测试用例2",
> "host": "http://httpbin.org/post",
> "interface": {
> "url": "/post",
> "name": "登录",
> "method": "post",
> },
> "headers": {
> 'content-Type': "application/json"
> },
> "request": {
> 'json': {"mobile_phone": "${{user_mobile}}","pwd": "lemonban"},
> },
> 'setup_script': "print('前置脚本123')",
> 'teardown_script': "test.assertion('相等',200,response.status_code)"
> }
> ```
>
> ##### 用例字段说明:
>
> - ##### title: 用例名称( 必填)
>
> - ##### host: 测试接口的host地址 (非必填,如果没填则会使用全局的变量中的host)
>
> - ##### interface:请求接口,字典类型(必填),包含三个字段:
>
> - ###### name: 接口名(非必填)
>
> - ##### url: 接口路径(必填)
>
> - ##### method:请求方法(必填)
>
> - ###### headers:请求头,字典类型(非必填,如果全局遍历中设置了请求头,则会将此处请求头和全局遍历请求头合并)
>
> - ##### request:请求参数,字典类型(非必填,支持requests模块请求的所有字段),常用字段如下
>
> - ###### data:传递表单参数(同requests模块的data)
>
> - ###### json:传递json参数(同requests模块的json)
>
> - ###### params:传递查询参数(同requests模块的params)
>
> - ###### files:上传文件,参数具体格式如下:
>
> ```python
> # { "参数名": ["文件名", "文件路径", "文件类型"]}
> {
> "name": ["19.png", r"./image/19.png", "image/png"]
> }
> ```
>
> 提示: 其他requests模块中支持的字段这里都支持
>
> - ###### setup_script:用例前置脚本,字符串类型(具体使用参照第五节)
>
> - ###### teardown_script:用例后置脚本,字符串类型(具体使用参照第五节)
#### 3、用例中引用全局遍历
在测试数据的header、interface,requests中可以引用遍历
> ##### 变量引用语法:${{变量名}}
>
> ```python
> "request": {
> 'json': {"mobile_phone": "${{user_mobile}}","pwd": "lemonban"},
> }
> # 说明:上面requests的json参数中引用了变量 user_mobile
> ```
## 三、环境数据说明
环境数据一共包含三个字段:ENV,DB,global_func
> ##### 1、ENV : 全局变量,字典类型(必填项),存放全局的host,自定义的全局变量,
>
> ##### 2、DB:数据库配置对象,列表类型(必填项),支持同时连接多个数据库服务,每个连接为列表中的一个元素,连接配置信息如下
>
> ```python
> {
> "name": "aliyun",
> "type": "mysql",
> "config": {
> "user": "future",
> "password": "123456",
> "host": "api.lemonban.com",
> "port": 3306
> }
> }
> ```
>
> - ###### name: 连接名(字符串,只能用英文),在用例脚本可以通过db.连接名.去执行sql语句(参照前后置脚本)
>
> - ##### type:数据库类型(目前仅支持mysql数据库,可以自己扩展开发)
>
> - ##### config:数据库连接信息,字典类型,字段如下
>
> - user :账号
> - password: 密码
> - host: 数据库的host地址
> - port:数据库的端口
>
> #### 3、global_func:全局工具函数(字符串)
>
> - 建议:在进行平台在开发时,将global_func设置问大文本字段,前端编辑完,后端直接存在数据库,执行用例时读取出来传入即可
## 四、全局工具函数说明
global_func中定义的全局函数,在用例的前后置脚本中可以直接调用,调用方式如下

## 五、前后置脚本
为了让用户 更方便的去编写前后置脚本进行测试,框架本身也预设了一些变量和一些方法
#### 1、脚本中预置的对象:
> ##### ENV:全局变量
>
> ##### env:临时变量
>
> ##### response:请求响应对象(后置脚本可以访问)
#### 2、脚本中预置的方法
> ###### test.re_extract: 正则提取数据
>
> 参数1:数据源(str类型)
> 参数2:提取表达式
>
> ###### test.json_extract:jsonpath提取数据
>
> 参数1:数据源(dict类型 or list类型)
> 参数2:提取表达式
>
> ###### test.save_global_variable:设置全局变量
>
> 参数1:变量名
> 参数2:变量值
>
> ###### test.save_env_variable:设置临时变量
>
> 参数1:变量名
> 参数2:变量值
>
> ###### test.delete_global_variable:删除全局变量
>
> 参数:变量名
>
> ###### test.delete_env_variable:删除临时变量
>
> 参数:变量名
>
> ##### test.assertion:断言方法
>
> 参数1:断言方法
> 参数2:预期结果
> 参数2:实际结果
如果以上内置的方法不能满足需求,可在全局的工具函数中定义相关的方法,在脚本中调用。
关于ApiTestEngine的基本使用就给大家介绍到这里啦,大家可以去研究一下,用来编写测试平台
Raw data
{
"_id": null,
"home_page": "https://github.com/musen123/unittest-ApiTestEngine",
"name": "ApiTestEngine",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": null,
"author": "MuSen",
"author_email": "musen_nmb@qq.com",
"download_url": "https://files.pythonhosted.org/packages/1b/2c/2ecdcf58835426d4dc7137d95ae05f31b441902a2b159afa977b49dba732/ApiTestEngine-1.1.5.tar.gz",
"platform": null,
"description": "# \u63a5\u53e3\u81ea\u52a8\u5316\u5e73\u53f0\u7528\u4f8b\u6267\u884c\u5f15\u64ce \u2014 ApiTestEngine\r\n\r\n## \u524d\u8a00\r\n\r\n\u200b\t\t ApiTestEngine\u4e3b\u8981\u662f\u4e3a\u63a5\u53e3\u81ea\u52a8\u5316\u5e73\u53f0 \u5f00\u53d1\u7684\u4e00\u4e2aHttp\u63a5\u53e3\u7528\u4f8b\u6267\u884c\u7684\u5f15\u64ce\uff0c\u5176\u5b9e\u4e4b\u524d\u5f00\u53d1\u7684\u63a5\u53e3\u81ea\u52a8\u5316\u6846\u67b6apin\u4e5f\u53ef\u4ee5\u4f5c\u4e3a\u6d4b\u8bd5\u5e73\u53f0\u7684\u7528\u4f8b\u6267\u884c\u5f15\u64ce\u3002\u4f46\u662fapin\u6700\u521d\u8bbe\u8ba1\u7684\u521d\u8877\u662f\u57fa\u4e8ejson\u6216yaml\u6587\u4ef6\u6765\u7f16\u5199\u6d4b\u8bd5\u7528\u4f8b\uff0c\u91cc\u9762\u8bbe\u8ba1\u4e86\u66f4\u591a\u89c4\u5219\u3002\u7528\u6765\u8fdb\u884c\u5e73\u53f0\u5f00\u53d1\u53cd\u800c\u6709\u4e9b\u7b28\u91cd\u4e86\uff0c\u4e5f\u4e0d\u9002\u5408\u5728\u8bfe\u7a0b\u4e2d\u6559\u5b66\u9002\u7528\uff0c\u4e8e\u662f\u5728apin\u7684\u57fa\u7840\u5199\u8fdb\u884c\u4e86\u7cbe\u7b80\u548c\u4f18\u5316\uff0c\u5f00\u53d1\u4e86 ApiTestEngine\u8fd9\u4e2a\u66f4\u4e3a\u7cbe\u7b80\u548c\u7075\u6d3b\u7684\u7528\u4f8b\u6267\u884c\u5f15\u64ce\u3002\u4e0b\u9762\u4ecb\u7ecd\u4e00\u4e0bApiTestEngine\u7684\u5177\u4f53\u4f7f\u7528\u3002\r\n\r\n\u5b89\u88c5\u547d\u4ee4:\r\n ```python\r\npip install ApiTestEngine\r\n```\r\n\r\n```python\r\n\r\n\"============\u6765\u81ea\u8bfe\u7a0b\u8bb2\u5e08(\u6728\u68ee)\u7684\u63d0\u9192\uff0c\u8bf7\u52ff\u79c1\u81ea\u8f6c\u5356\u89c6\u9891\uff0c\u5426\u5219\u540e\u679c\u81ea\u8d1f\uff0c=============\"\r\n\"============\u524d\u4e24\u7ae0\u7684\u89c6\u9891\u6cc4\u6f0f\uff0c\u4e70\u76d7\u7248\u7684\u7684\u4eba\u592a\u591a\uff0c\u5f15\u64ce\u6e90\u7801\u6211\u52a8\u4e86\u624b\u811a\uff0c\u51fa\u9519\u6982\u4e0d\u8d1f\u8d23=============\"\r\n\"============\u4e70\u6b63\u7248\u8bfe\u7a0b\u7684\u540c\u5b66\u8bf7\u79c1\u804a\u6211\u83b7\u53d6\u5f15\u64ce\u6e90\u7801\uff0c\u6216\u8005\u4f7f\u7528\u7b2c\u4e94\u7ae0\u4ece0\u52301\u81ea\u5df1\u5199\u7684\u5f15\u64ce============\"\r\n\"\u53e6\u5916\u4e70\u4e86\u76d7\u7248\u7684\u540c\u5b66\uff0c\u52a0\u6211\u63d0\u4f9b\u5356\u4f60\u76d7\u7248\u89c6\u9891\u7684\u4eba\u7684\u8054\u7cfb\u65b9\u5f0f\uff0c\u804a\u5929\u8bb0\u5f55\uff0c\u4ea4\u6613\u8f6c\u8d26\u8ba2\u5355\uff0c\u53ef\u4ee5\u627e\u6211\u9886\u7ea2\u5305\u54c8\uff0c\u5982\u679c\u8d2d\u4e70\u6b63\u7248\u8bfe\u7a0b\u8bfe\u53ef\u51cf\u514d200\u5143)=============\"\r\n\"\u5b8c\u6574\u63a5\u53e3\u5e73\u53f0\u8bfe\u7a0b\u53ea\u5356899\uff0c\u5305\u542b\u7b54\u7591\u670d\u52a1\uff0c\u9700\u8981\u52a0\u6211\u5fae\u4fe1python771\uff0c\u4e0d\u8981\u4e70\u76d7\u7248=============\"\r\n\"\u5b8c\u6574web\u5e73\u53f0\u8bfe\u7a0b\u53ea\u5356899\uff0c\u5305\u542b\u7b54\u7591\u670d\u52a1\uff0c\u9700\u8981\u52a0\u6211\u5fae\u4fe1python771\uff0c\u4e0d\u8981\u4e70\u76d7\u7248=============\"\r\n\"\u5b8c\u6574\u6d4b\u8bd5\u5f00\u53d1\u7cfb\u5217\u8bfe\u7a0b1599\uff0c\u5305\u542b\u7b54\u7591\u670d\u52a1\uff0c\u9700\u8981\u52a0\u6211\u5fae\u4fe1python771\uff0c\u4e0d\u8981\u4e70\u76d7\u7248=============\"\r\n```\r\n\r\n## \u4e00\u3001\u7528\u4f8b\u6267\u884c\u51fd\u6570\r\n\r\n- \u7528\u4f8b\u6267\u884c\u5165\u53e3\u51fd\u6570\u4e3acore.cases\u6a21\u5757\u4e2d\u7684run_test\uff0c\u5177\u4f53\u4f7f\u7528\u5982\u4e0b\r\n\r\n> ##### run_test\u53c2\u6570\u8bf4\u660e\r\n>\r\n> - ##### case_data: \u6267\u884c\u7684\u6d4b\u8bd5\u6570\u636e\r\n>\r\n> - ##### env_config\uff1a\u6267\u884c\u7684\u73af\u5883\u914d\u7f6e\r\n>\r\n> - ##### debug\uff1a\u662f\u5426\u4e3adebug\u6a21\u5f0f(\u5355\u63a5\u53e3\u8c03\u8bd5\u8fd0\u884c\u4f7f\u7528debug\u6a21\u5f0f)\r\n\r\n```python\r\n# \u6d4b\u8bd5\u6570\u636e(\u8be6\u7ec6\u7ed3\u6784\u8bf4\u660e\u770b\u4e0b\u4e00\u8282)\r\ncase_data = [{},{}]\r\n# \u8fd0\u884c\u73af\u5883\u6570\u636e(\u8be6\u7ec6\u7ed3\u6784\u8bf4\u660e\u770b\u7b2c\u4e09\u8282)\r\nconfig = {}\r\nresult = run_test(case_data=case_data, env_config=config, debug=False)\r\n```\r\n\r\n\r\n\r\n## \u4e8c\u3001\u6d4b\u8bd5\u6570\u636e\u7ed3\u6784\r\n\r\n\u4e0b\u9762\u8be6\u7ec6\u4ecb\u7ecdrun_test\u6267\u884c\u6d4b\u8bd5\u7684\u7528\u4f8b\u6570\u636e(case_data\u53c2\u6570)\u7684\u2018\u2019\r\n\r\n#### 1\u3001 \u6d4b\u8bd5\u6570\u636e\u57fa\u672c\u7ed3\u6784\r\n\r\n> ```python\r\n> [\r\n> {\r\n> 'name':\"\u6d4b\u8bd5\u573a\u666f\u540d\u79f01\"\r\n> 'cases':['\u7528\u4f8b\u6570\u636e1','\u7528\u4f8b\u6570\u636e2']\r\n> },\t\t\r\n> {\r\n> 'name':\"\u6d4b\u8bd5\u573a\u666f\u540d\u79f02\"\r\n> 'cases':['\u7528\u4f8b\u6570\u636e3','\u7528\u4f8b\u6570\u636e4']\r\n> },\r\n> \t......\r\n> ]\r\n> ```\r\n>\r\n> \u6267\u884c\u7684\u7528\u4f8b\u6570\u636e\u4e3alist\u7c7b\u578b\uff0c\u5217\u8868\u4e2d\u7684\u5143\u7d20\u4e3a\u6d4b\u8bd5\u573a\u666f(dict\u7c7b\u578b)\uff0c\u6d4b\u8bd5\u573a\u666f\u6709\u4e24\u4e2a\u5b57\u6bb5\uff0cname\u548ccases\r\n>\r\n> - ###### name:\u6d4b\u8bd5\u573a\u666f\u7684\u540d\u79f0\r\n>\r\n> - ###### cases:\u5305\u542b\u8be5\u6d4b\u8bd5\u573a\u666f\u4e0b\u6240\u6709\u7528\u4f8b\u7684\u5217\u8868\r\n\r\n#### 2\u3001\u6d4b\u8bd5\u573a\u666f\u4e2d\u6d4b\u8bd5\u7528\u4f8b\u7684\u6570\u636e\u7ed3\u6784\r\n\r\n> \u6ce8\u610f\uff1a\u6d4b\u8bd5\u7528\u4f8b\u6570\u636e\u4e3a\u4e00\u4e2a\u5b57\u5178,\u5177\u4f53\u7ed3\u6784\u5982\u4e0b\uff1a\r\n>\r\n> ```python\r\n> {\r\n> \"title\": \"\u6d4b\u8bd5\u7528\u4f8b2\",\r\n> \"host\": \"http://httpbin.org/post\",\r\n> \"interface\": {\r\n> \"url\": \"/post\",\r\n> \"name\": \"\u767b\u5f55\",\r\n> \"method\": \"post\",\r\n> },\r\n> \"headers\": {\r\n> \t'content-Type': \"application/json\"\r\n> \t},\r\n> \"request\": {\r\n> 'json': {\"mobile_phone\": \"${{user_mobile}}\",\"pwd\": \"lemonban\"},\r\n> \t},\r\n> 'setup_script': \"print('\u524d\u7f6e\u811a\u672c123')\",\r\n> 'teardown_script': \"test.assertion('\u76f8\u7b49',200,response.status_code)\"\r\n> }\r\n> ```\r\n>\r\n> ##### \u7528\u4f8b\u5b57\u6bb5\u8bf4\u660e\uff1a\r\n>\r\n> - ##### title: \u7528\u4f8b\u540d\u79f0( \u5fc5\u586b)\r\n>\r\n> - ##### host: \u6d4b\u8bd5\u63a5\u53e3\u7684host\u5730\u5740 (\u975e\u5fc5\u586b\uff0c\u5982\u679c\u6ca1\u586b\u5219\u4f1a\u4f7f\u7528\u5168\u5c40\u7684\u53d8\u91cf\u4e2d\u7684host)\r\n>\r\n> - ##### interface\uff1a\u8bf7\u6c42\u63a5\u53e3\uff0c\u5b57\u5178\u7c7b\u578b(\u5fc5\u586b),\u5305\u542b\u4e09\u4e2a\u5b57\u6bb5\uff1a\r\n>\r\n> - ###### name: \u63a5\u53e3\u540d(\u975e\u5fc5\u586b)\r\n>\r\n> - ##### url: \u63a5\u53e3\u8def\u5f84\uff08\u5fc5\u586b\uff09\r\n>\r\n> - ##### method\uff1a\u8bf7\u6c42\u65b9\u6cd5(\u5fc5\u586b)\r\n>\r\n> - ###### headers\uff1a\u8bf7\u6c42\u5934\uff0c\u5b57\u5178\u7c7b\u578b(\u975e\u5fc5\u586b\uff0c\u5982\u679c\u5168\u5c40\u904d\u5386\u4e2d\u8bbe\u7f6e\u4e86\u8bf7\u6c42\u5934\uff0c\u5219\u4f1a\u5c06\u6b64\u5904\u8bf7\u6c42\u5934\u548c\u5168\u5c40\u904d\u5386\u8bf7\u6c42\u5934\u5408\u5e76)\r\n>\r\n> - ##### request\uff1a\u8bf7\u6c42\u53c2\u6570\uff0c\u5b57\u5178\u7c7b\u578b(\u975e\u5fc5\u586b\uff0c\u652f\u6301requests\u6a21\u5757\u8bf7\u6c42\u7684\u6240\u6709\u5b57\u6bb5)\uff0c\u5e38\u7528\u5b57\u6bb5\u5982\u4e0b\r\n>\r\n> - ###### data:\u4f20\u9012\u8868\u5355\u53c2\u6570(\u540crequests\u6a21\u5757\u7684data)\r\n>\r\n> - ###### json:\u4f20\u9012json\u53c2\u6570(\u540crequests\u6a21\u5757\u7684json)\r\n>\r\n> - ###### params:\u4f20\u9012\u67e5\u8be2\u53c2\u6570(\u540crequests\u6a21\u5757\u7684params)\r\n>\r\n> - ###### files:\u4e0a\u4f20\u6587\u4ef6,\u53c2\u6570\u5177\u4f53\u683c\u5f0f\u5982\u4e0b\uff1a\r\n>\r\n> ```python\r\n> # { \"\u53c2\u6570\u540d\": [\"\u6587\u4ef6\u540d\", \"\u6587\u4ef6\u8def\u5f84\", \"\u6587\u4ef6\u7c7b\u578b\"]}\r\n> {\r\n> \"name\": [\"19.png\", r\"./image/19.png\", \"image/png\"]\r\n> }\r\n> ```\r\n>\r\n> \u63d0\u793a\uff1a \u5176\u4ed6requests\u6a21\u5757\u4e2d\u652f\u6301\u7684\u5b57\u6bb5\u8fd9\u91cc\u90fd\u652f\u6301\r\n>\r\n> - ###### setup_script\uff1a\u7528\u4f8b\u524d\u7f6e\u811a\u672c,\u5b57\u7b26\u4e32\u7c7b\u578b(\u5177\u4f53\u4f7f\u7528\u53c2\u7167\u7b2c\u4e94\u8282)\r\n>\r\n> - ###### teardown_script\uff1a\u7528\u4f8b\u540e\u7f6e\u811a\u672c\uff0c\u5b57\u7b26\u4e32\u7c7b\u578b(\u5177\u4f53\u4f7f\u7528\u53c2\u7167\u7b2c\u4e94\u8282)\r\n\r\n#### 3\u3001\u7528\u4f8b\u4e2d\u5f15\u7528\u5168\u5c40\u904d\u5386\r\n\r\n\u5728\u6d4b\u8bd5\u6570\u636e\u7684header\u3001interface,requests\u4e2d\u53ef\u4ee5\u5f15\u7528\u904d\u5386\r\n\r\n> ##### \u53d8\u91cf\u5f15\u7528\u8bed\u6cd5\uff1a${{\u53d8\u91cf\u540d}}\r\n>\r\n> ```python\r\n> \"request\": {\r\n> 'json': {\"mobile_phone\": \"${{user_mobile}}\",\"pwd\": \"lemonban\"},\r\n> \t}\r\n> # \u8bf4\u660e\uff1a\u4e0a\u9762requests\u7684json\u53c2\u6570\u4e2d\u5f15\u7528\u4e86\u53d8\u91cf user_mobile\r\n> ```\r\n\r\n\r\n\r\n## \u4e09\u3001\u73af\u5883\u6570\u636e\u8bf4\u660e\r\n\r\n\u73af\u5883\u6570\u636e\u4e00\u5171\u5305\u542b\u4e09\u4e2a\u5b57\u6bb5\uff1aENV\uff0cDB\uff0cglobal_func\r\n\r\n> ##### 1\u3001ENV : \u5168\u5c40\u53d8\u91cf\uff0c\u5b57\u5178\u7c7b\u578b(\u5fc5\u586b\u9879)\uff0c\u5b58\u653e\u5168\u5c40\u7684host\uff0c\u81ea\u5b9a\u4e49\u7684\u5168\u5c40\u53d8\u91cf\uff0c\r\n>\r\n> ##### 2\u3001DB\uff1a\u6570\u636e\u5e93\u914d\u7f6e\u5bf9\u8c61\uff0c\u5217\u8868\u7c7b\u578b(\u5fc5\u586b\u9879)\uff0c\u652f\u6301\u540c\u65f6\u8fde\u63a5\u591a\u4e2a\u6570\u636e\u5e93\u670d\u52a1\uff0c\u6bcf\u4e2a\u8fde\u63a5\u4e3a\u5217\u8868\u4e2d\u7684\u4e00\u4e2a\u5143\u7d20\uff0c\u8fde\u63a5\u914d\u7f6e\u4fe1\u606f\u5982\u4e0b\r\n>\r\n> ```python\r\n> {\r\n> \"name\": \"aliyun\",\r\n> \"type\": \"mysql\",\r\n> \"config\": {\r\n> \"user\": \"future\",\r\n> \"password\": \"123456\",\r\n> \"host\": \"api.lemonban.com\",\r\n> \"port\": 3306\r\n> }\r\n> }\r\n> ```\r\n>\r\n> - ###### name: \u8fde\u63a5\u540d(\u5b57\u7b26\u4e32\uff0c\u53ea\u80fd\u7528\u82f1\u6587)\uff0c\u5728\u7528\u4f8b\u811a\u672c\u53ef\u4ee5\u901a\u8fc7db.\u8fde\u63a5\u540d.\u53bb\u6267\u884csql\u8bed\u53e5(\u53c2\u7167\u524d\u540e\u7f6e\u811a\u672c)\r\n>\r\n> - ##### type:\u6570\u636e\u5e93\u7c7b\u578b(\u76ee\u524d\u4ec5\u652f\u6301mysql\u6570\u636e\u5e93\uff0c\u53ef\u4ee5\u81ea\u5df1\u6269\u5c55\u5f00\u53d1)\r\n>\r\n> - ##### config:\u6570\u636e\u5e93\u8fde\u63a5\u4fe1\u606f\uff0c\u5b57\u5178\u7c7b\u578b\uff0c\u5b57\u6bb5\u5982\u4e0b\r\n>\r\n> - user \uff1a\u8d26\u53f7\r\n> - password\uff1a \u5bc6\u7801\r\n> - host: \u6570\u636e\u5e93\u7684host\u5730\u5740\r\n> - port\uff1a\u6570\u636e\u5e93\u7684\u7aef\u53e3\r\n>\r\n> #### 3\u3001global_func\uff1a\u5168\u5c40\u5de5\u5177\u51fd\u6570(\u5b57\u7b26\u4e32)\r\n>\r\n> - \u5efa\u8bae\uff1a\u5728\u8fdb\u884c\u5e73\u53f0\u5728\u5f00\u53d1\u65f6\uff0c\u5c06global_func\u8bbe\u7f6e\u95ee\u5927\u6587\u672c\u5b57\u6bb5\uff0c\u524d\u7aef\u7f16\u8f91\u5b8c\uff0c\u540e\u7aef\u76f4\u63a5\u5b58\u5728\u6570\u636e\u5e93\uff0c\u6267\u884c\u7528\u4f8b\u65f6\u8bfb\u53d6\u51fa\u6765\u4f20\u5165\u5373\u53ef\r\n\r\n\r\n\r\n## \u56db\u3001\u5168\u5c40\u5de5\u5177\u51fd\u6570\u8bf4\u660e\r\n\r\nglobal_func\u4e2d\u5b9a\u4e49\u7684\u5168\u5c40\u51fd\u6570\uff0c\u5728\u7528\u4f8b\u7684\u524d\u540e\u7f6e\u811a\u672c\u4e2d\u53ef\u4ee5\u76f4\u63a5\u8c03\u7528\uff0c\u8c03\u7528\u65b9\u5f0f\u5982\u4e0b\r\n\r\n \r\n\r\n\r\n\r\n## \u4e94\u3001\u524d\u540e\u7f6e\u811a\u672c\r\n\r\n\u4e3a\u4e86\u8ba9\u7528\u6237 \u66f4\u65b9\u4fbf\u7684\u53bb\u7f16\u5199\u524d\u540e\u7f6e\u811a\u672c\u8fdb\u884c\u6d4b\u8bd5\uff0c\u6846\u67b6\u672c\u8eab\u4e5f\u9884\u8bbe\u4e86\u4e00\u4e9b\u53d8\u91cf\u548c\u4e00\u4e9b\u65b9\u6cd5\r\n\r\n#### 1\u3001\u811a\u672c\u4e2d\u9884\u7f6e\u7684\u5bf9\u8c61\uff1a\r\n\r\n> ##### ENV:\u5168\u5c40\u53d8\u91cf\r\n>\r\n> ##### env\uff1a\u4e34\u65f6\u53d8\u91cf\r\n>\r\n> ##### response:\u8bf7\u6c42\u54cd\u5e94\u5bf9\u8c61(\u540e\u7f6e\u811a\u672c\u53ef\u4ee5\u8bbf\u95ee)\r\n\r\n#### 2\u3001\u811a\u672c\u4e2d\u9884\u7f6e\u7684\u65b9\u6cd5\r\n\r\n> ###### test.re_extract: \u6b63\u5219\u63d0\u53d6\u6570\u636e\r\n>\r\n> \u200b \u53c2\u65701\uff1a\u6570\u636e\u6e90\uff08str\u7c7b\u578b\uff09\r\n> \u200b \u53c2\u65702\uff1a\u63d0\u53d6\u8868\u8fbe\u5f0f\r\n>\r\n> ###### test.json_extract\uff1ajsonpath\u63d0\u53d6\u6570\u636e\r\n>\r\n> \u200b \u53c2\u65701\uff1a\u6570\u636e\u6e90(dict\u7c7b\u578b or list\u7c7b\u578b)\r\n> \u200b \u53c2\u65702\uff1a\u63d0\u53d6\u8868\u8fbe\u5f0f\r\n>\r\n> ###### test.save_global_variable:\u8bbe\u7f6e\u5168\u5c40\u53d8\u91cf\r\n>\r\n> \u200b \u53c2\u65701\uff1a\u53d8\u91cf\u540d\r\n> \u200b \u53c2\u65702\uff1a\u53d8\u91cf\u503c\r\n>\r\n> ###### test.save_env_variable\uff1a\u8bbe\u7f6e\u4e34\u65f6\u53d8\u91cf\r\n>\r\n> \u200b \u53c2\u65701\uff1a\u53d8\u91cf\u540d\r\n> \u200b \u53c2\u65702\uff1a\u53d8\u91cf\u503c\r\n>\r\n> ###### test.delete_global_variable:\u5220\u9664\u5168\u5c40\u53d8\u91cf\r\n>\r\n> \t\u53c2\u6570\uff1a\u53d8\u91cf\u540d\r\n>\r\n> ###### test.delete_env_variable:\u5220\u9664\u4e34\u65f6\u53d8\u91cf\r\n>\r\n> \u200b \u53c2\u6570\uff1a\u53d8\u91cf\u540d\r\n>\r\n> ##### test.assertion:\u65ad\u8a00\u65b9\u6cd5\r\n>\r\n> \u200b \u53c2\u65701\uff1a\u65ad\u8a00\u65b9\u6cd5\r\n> \u200b \u53c2\u65702\uff1a\u9884\u671f\u7ed3\u679c\r\n> \u200b \u53c2\u65702\uff1a\u5b9e\u9645\u7ed3\u679c\r\n\r\n\u5982\u679c\u4ee5\u4e0a\u5185\u7f6e\u7684\u65b9\u6cd5\u4e0d\u80fd\u6ee1\u8db3\u9700\u6c42\uff0c\u53ef\u5728\u5168\u5c40\u7684\u5de5\u5177\u51fd\u6570\u4e2d\u5b9a\u4e49\u76f8\u5173\u7684\u65b9\u6cd5\uff0c\u5728\u811a\u672c\u4e2d\u8c03\u7528\u3002\r\n\r\n\u5173\u4e8eApiTestEngine\u7684\u57fa\u672c\u4f7f\u7528\u5c31\u7ed9\u5927\u5bb6\u4ecb\u7ecd\u5230\u8fd9\u91cc\u5566\uff0c\u5927\u5bb6\u53ef\u4ee5\u53bb\u7814\u7a76\u4e00\u4e0b\uff0c\u7528\u6765\u7f16\u5199\u6d4b\u8bd5\u5e73\u53f0\r\n\r\n",
"bugtrack_url": null,
"license": null,
"summary": null,
"version": "1.1.5",
"project_urls": {
"Homepage": "https://github.com/musen123/unittest-ApiTestEngine"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "ccc1b64d871afcd022f4c822565e3f5f30ac745c8c6c5789706a6b4c8ed476c1",
"md5": "8e1b1ee5d9c790b8468dc93c186bcac3",
"sha256": "63a0e3601da848e068021442c30398d16a9491f81f8ebf7f26b5661c0b928462"
},
"downloads": -1,
"filename": "ApiTestEngine-1.1.5-py3-none-any.whl",
"has_sig": false,
"md5_digest": "8e1b1ee5d9c790b8468dc93c186bcac3",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 14980,
"upload_time": "2024-07-13T11:51:31",
"upload_time_iso_8601": "2024-07-13T11:51:31.215654Z",
"url": "https://files.pythonhosted.org/packages/cc/c1/b64d871afcd022f4c822565e3f5f30ac745c8c6c5789706a6b4c8ed476c1/ApiTestEngine-1.1.5-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "1b2c2ecdcf58835426d4dc7137d95ae05f31b441902a2b159afa977b49dba732",
"md5": "9108b877ff0f3cddb01bf5356e0a6343",
"sha256": "f680700c0be7c83a5b580b6244975056f596224f314dfcf4df5d687816118ae4"
},
"downloads": -1,
"filename": "ApiTestEngine-1.1.5.tar.gz",
"has_sig": false,
"md5_digest": "9108b877ff0f3cddb01bf5356e0a6343",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 12242,
"upload_time": "2024-07-13T11:51:34",
"upload_time_iso_8601": "2024-07-13T11:51:34.247209Z",
"url": "https://files.pythonhosted.org/packages/1b/2c/2ecdcf58835426d4dc7137d95ae05f31b441902a2b159afa977b49dba732/ApiTestEngine-1.1.5.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-07-13 11:51:34",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "musen123",
"github_project": "unittest-ApiTestEngine",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [
{
"name": "astroid",
"specs": [
[
"==",
"2.2.5"
]
]
},
{
"name": "certifi",
"specs": [
[
"==",
"2021.10.8"
]
]
},
{
"name": "charset-normalizer",
"specs": [
[
"==",
"2.0.12"
]
]
},
{
"name": "Faker",
"specs": [
[
"==",
"13.4.0"
]
]
},
{
"name": "idna",
"specs": [
[
"==",
"3.3"
]
]
},
{
"name": "isort",
"specs": [
[
"==",
"4.3.21"
]
]
},
{
"name": "jsonpath",
"specs": [
[
"==",
"0.82"
]
]
},
{
"name": "lazy-object-proxy",
"specs": [
[
"==",
"1.4.2"
]
]
},
{
"name": "mccabe",
"specs": [
[
"==",
"0.6.1"
]
]
},
{
"name": "mysqlclient",
"specs": [
[
"==",
"1.3.14"
]
]
},
{
"name": "pyasn1",
"specs": [
[
"==",
"0.4.8"
]
]
},
{
"name": "pylint",
"specs": [
[
"==",
"2.3.1"
]
]
},
{
"name": "python-dateutil",
"specs": [
[
"==",
"2.8.2"
]
]
},
{
"name": "requests",
"specs": [
[
"==",
"2.27.1"
]
]
},
{
"name": "requests-toolbelt",
"specs": [
[
"==",
"0.9.1"
]
]
},
{
"name": "rsa",
"specs": [
[
"==",
"4.8"
]
]
},
{
"name": "six",
"specs": [
[
"==",
"1.16.0"
]
]
},
{
"name": "typed-ast",
"specs": [
[
"==",
"1.4.0"
]
]
},
{
"name": "typing_extensions",
"specs": [
[
"==",
"4.2.0"
]
]
},
{
"name": "urllib3",
"specs": [
[
"==",
"1.26.9"
]
]
},
{
"name": "wincertstore",
"specs": [
[
"==",
"0.2"
]
]
},
{
"name": "wrapt",
"specs": [
[
"==",
"1.11.2"
]
]
}
],
"lcname": "apitestengine"
}