openinew/README.md

149 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# python + request + selenium + pytest集成的API自动化测试框架
**对于框架任何问题,欢迎联系我!**
#### 一、框架架构
![框架结构图](./documents/framework.png)
![](.\documents\framework.png)
#### 二、项目目录结构
├────.gitignore
├────case_utils/ 测试用例相关的工具类包括HTTP请求封装及用例数据处理用例文件生成
│ ├────__init__.py
│ ├────assert_util.py 断言方法
│ ├────case_handle.py 通过读取用例数据,自动生成用例文件的方法
│ ├────data_handle.py 处理数据的方法
│ └────requests_handle.py 封装的HTTP请求的方法
├────common_utils/ 通用的工具封装类
│ ├────__init__.py
│ ├────default_function.py 一些默认的方法,小工具合集
│ ├────excel_handle.py 通过第三方模块openpyxl读写excel的方法
│ ├────handle_eval_data.py 执行一个字符串表达式,并返回其表达式的值
│ ├────json_handle.py 将json转换成python格式
│ ├────loguru_handle.py 第三方模块loguru只生成错误日志的方法
│ ├────mysql_handle.py 通过第三方模块pymysql读写MYSQL数据库的方法
│ ├────operate_deepdiff.py 通过第三方模块deepdiff对数据进行对比的方法
│ ├────project_tree.py 获取框架目录结构树的方法
│ ├────time_handle.py 处理时间的方法
│ ├────yagmail_handle.py 通过第三方模块yagmail发送邮件
│ └────yaml_handle.py 通过第三方模块pyyaml读写yaml文件的方法
├────config/ 配置文件
│ ├────__init__.py
│ ├────global_vars.py 全局变量配置
│ ├────project_path.py 项目路径配置
│ ├────report.css 更改pytest-html报告样式的文件
│ └────settings.py 框架配置文件
├────conftest.py
├────data/ 用例数据目录
│ ├────__init__.py
│ ├────test_login.yaml
│ ├────test_login_excel.xlsx
│ └────test_new_project.yaml
├────outputs/ 日志、报告目录
│ ├────log/ 日志保存的目录
│ └────report/ 报告保存的目录
├────test_generate_case/ 通过用例数据文件自从生成的测试用例
│ ├────test_login.py 自动生成的用例文件
│ └────test_new_project.py 自动生成的用例文件
├────test_case/ 通过python语言编写的测试用例
│ ├────test_demo.py 用例示例文件
├────Pipfile
├────Pipfile.lock
├────pytest.ini pytest配置文件
├────README.md 框架说明
└────run.py 主入口执行文件
#### 三、框架功能说明
**解决痛点:**
1. 通过**session会话方式**,解决了登录之后**cookie关联**处理
```
模块: case_utils.requests_handle
相关代码cls.session = requests.Session()
```
2. 框架天然支持接口**动态传参、关联**灵活处理
```
1) 通过全局变量替换用例数据值
用例数据中,存在如下格式 data: { "user_id": "${user_id}"}
全局变量GLOBAL_VAR中存在user_id=84522通过替换后最终变为{ "user_id": 84522}
2) 通过执行函数替换用例数据值
用例数据中,存在如下格式 "repository_name": ${faker.name().replace(" ", "").replace(".", "")}。
通过代码替换后,最终变为:"repository_name": "Mike"
```
3. 支持**Excel、Yaml文件**格式编写接口用例,通过简单配置框架自动读取并执行
```
通读取配置文件 config.settings.py中的CASE_FILE_TYPE决定是运行excel/yaml用例也可都读取
```
执行环境**一键切换**,解决**多环境**相互影响问题
```
1) 通过pytest_addoption将命令行参数--env添加到pytest配置对象中
2) 通过get_config去配置文件config.settings.py中读取不同环境的配置信息包括域名测试账号
3) 在主运行文件run.py中通过click模块读取输入的-env的值
4) 最后在运行时输入 python run.py -env=test可以指定运行的环境
```
4. 支持**http/https协议各种请求、传参类型**接口
5. 响应数据格式支持**json、str类型**的提取操作
```
通过request_handle.after_extract根据响应数据进行提取
```
6. 断言方式支持**等于、包含、大于、小于、不等于**等方法
```
用例数据中通过字段validate进行断言。通过断言的关键字eq等决定断言是等于、包含、大于、小于、不等于。
具体断言逻辑见case_utils.assert_util
```
7. 框架可以直接交给**不懂代码的功能测试人员使用**,只需要安装规范编写接口用例就行
```
只需要按照yaml或者excel格式正确编写测试用例即可自动生成测试用例文件运行测试用例
```
8. 框架也可以交给**懂代码的功能测试人员使用**可以在test_case目录下通过python编写脚本
```
脚本的编写规范符合pytest要求即可。
注意框架默认在pytest.ini中配置了只运行test_auto_case目录下的用例如果需要运行其他符合pytest要求的用例需要注释掉该配置testpaths = ./test_auto_case
```
9. 采用luguru管理日志可以输出更为优雅简洁的日志
#### 框架使用说明
1. 拉取代码到本地
2. 使用pipenv管理安装环境。
```
安装pipenv: pip3 install pipenv
创建虚拟环境pipenv install
激活已存在的虚拟环境如果不存在会创建一个pipenv shell
```
3. 更改配置文件config.settings.py修改用例文件读取来源CASE_FILE_TYPE以及配置test和live环境及测试账号
4. 在data目录下新建测试用例数据文件编写测试用例 Excel或者Yaml或者在test_case目录下通过python语言编写用例
5. 框架主入口为 run.py文件
```
> python run.py (默认在test环境运行测试用例)
> python run.py -env live 在live环境运行测试用例
> python run.py -env=test 在test环境运行测试用例
```