ApiTestEngine


NameApiTestEngine JSON
Version 1.1.5 PyPI version JSON
download
home_pagehttps://github.com/musen123/unittest-ApiTestEngine
SummaryNone
upload_time2024-07-13 11:51:34
maintainerNone
docs_urlNone
authorMuSen
requires_python>=3.7
licenseNone
keywords
VCS
bugtrack_url
requirements astroid certifi charset-normalizer Faker idna isort jsonpath lazy-object-proxy mccabe mysqlclient pyasn1 pylint python-dateutil requests requests-toolbelt rsa six typed-ast typing_extensions urllib3 wincertstore wrapt
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 接口自动化平台用例执行引擎 — 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中定义的全局函数,在用例的前后置脚本中可以直接调用,调用方式如下

![1651145768956](readme.assets/1651145768956.png) 



## 五、前后置脚本

为了让用户 更方便的去编写前后置脚本进行测试,框架本身也预设了一些变量和一些方法

#### 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![1651145768956](readme.assets/1651145768956.png) \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"
}
        
Elapsed time: 1.04773s