最新pytest框架,框架功能全面,零基础也可快速上手

Posted 七月的小尾巴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最新pytest框架,框架功能全面,零基础也可快速上手相关的知识,希望对你有一定的参考价值。

框架介绍

本框架主要是基于 Python + pytest + allure + log + yaml + mysql + 钉钉通知 + Jenkins 实现的接口自动化框架。

如果对您有帮助,请点亮 小星星 以表支持,谢谢

框架优势

本框架不收取任何费用, 其优势在于测试人员直接编写测试用例,运行框架可自动生成测试代码。
框架支持多环境、多角色任意切换,支持接口响应断言以及数据库断言。

实现功能

  • 测试数据隔离, 实现数据驱动
  • 支持多接口数据依赖: 如A接口需要同时依赖B、C接口的响应数据作为参数
  • 数据库断言: 直接在测试用例中写入查询的sql即可断言,无需编写代码
  • 动态多断言: 如接口需要同事校验响应数据和sql校验,支持多场景断言
  • 自动生成用例代码: 测试人员在yaml文件中填写好测试用例, 程序可以直接生成用例代码,纯小白也能使用
  • 统计接口的运行时长: 拓展功能,订制开关,可以决定是否需要使用
  • 日志模块: 打印每个接口的日志信息,同样订制了开关,可以决定是否需要打印日志
  • 钉钉、企业微信通知: 支持多种通知场景,执行成功之后,可选择发送钉钉、或者企业微信、邮箱通知
  • 自定义拓展字段: 如用例中需要生成的随机数据,可直接调用
  • 多线程执行

目录结构

├── Cache                       // 存放缓存文件
├── config                      // 配置
│   ├── conf.yaml               // 公共配置
│   ├── setting.py              // 环境路径存放区域
├── data                        // 测试用例数据
├── docs                        // 文档
├── lib                         // 对象层,用作于接口的调用
├── log                         // 日志层
├── report                      // 测试报告层
├── test_case                   // 测试用例代码
├── tool                        // 所有公共模块的封装 
│   └── assertControl.py        // 断言模块
│   └── cacheControl.py         // 缓存模块
│   └── dingtalkControl.py      // 钉钉发送通知
│   └── excelControl.py         // 读取excel文件
│   └── gettimeControl.py       // 时间模块
│   └── logControl.py           // 日志模块
│   └── logDecorator.py         // 日志装饰器
│   └── mysqlControl.py         // 数据库模块
│   └── regularControl.py       // 正则模块
│   └── requestControl.py       // 请求模块
│   └── runtimeControl.py       // 响应时长统计模块
│   └── sendmailControl.py      // 发送邮件
│   └── testcaseAutomaticControl.py      // 自动生成测试代码
│   └── yamlControl.py          // yaml文件
├── Readme.md                   // help
├── pytest.ini                  
├── run.py                      // 运行入口  

依赖库

allure-pytest==2.9.45
allure-python-commons==2.9.45
atomicwrites==1.4.0
attrs==21.2.0
certifi==2021.10.8
cffi==1.15.0
charset-normalizer==2.0.7
colorama==0.4.4
colorlog==6.6.0
cryptography==36.0.0
DingtalkChatbot==1.5.3
execnet==1.9.0
Faker==9.8.3
idna==3.3
iniconfig==1.1.1
jsonpath==0.82
packaging==21.3
pluggy==1.0.0
py==1.11.0
pycparser==2.21
PyMySQL==1.0.2
pyOpenSSL==21.0.0
pyparsing==3.0.6
pytest==6.2.5
pytest-forked==1.3.0
pytest-xdist==2.4.0
python-dateutil==2.8.2
PyYAML==6.0
requests==2.26.0
six==1.16.0
text-unidecode==1.3
toml==0.10.2
urllib3==1.26.7
xlrd==2.0.1
xlutils==2.0.0
xlwt==1.3.0

安装Python、Pip环境,创建虚拟环境

一、安装Python环境

# 1、下载Python程序
# Python包地址:https://www.python.org/ftp/python/
wget https://www.python.org/ftp/python/3.8.5/Python-3.8.5.tgz

# 2、解压Python-3.8.5.tgz
tar -zxvf Python-3.8.5.tgz

# 3、编译安装
sudo mkdir /usr/local/python3.8.5
cd Python-3.8.5
sudo ./configure --prefix=/usr/local/python3.8.5
sudo make && sudo make install

# 4、建立软链接
sudo ln -s /usr/local/python3.8.5/bin/python3 /usr/bin/python3
sudo ln -s /usr/local/python3.8.5/bin/pip3 /usr/bin/pip3

# 5、验证安装
python3 -V
pip3 -V

二、安装虚拟环境、创建虚拟环境
# 1、安装虚拟环境virtualenv
yum install -y python-virtualenv

# 2、创建虚拟环境
# 在项目根目录创建虚拟环境
virtualenv -p python3 venv

# 3、激活虚拟环境
source ./venv/bin/activate

# 4、退出虚拟环境
deactivate

安装教程

输入如下命令,安装本框架的所有第三方库依赖

pip install -r requirements.txt

使用说明

config–>conf.yaml

首先是配置文件,这里主要存放了一个公共的配置数据,如项目名称、钉钉、邮箱、企业微信、数据库等相关的配置全部都在这里
所有的字段,在conf.yaml中,都有相关的注释,自行修改即可。

目前框架主要是用的企业微信通知,在用例执行成功之后发送通知,通知内容如下,可以根据公司主要使用的通讯工具自行更改。
在公共方法中分别封装了钉钉通知、以及邮箱通知。

如程序执行执行异常时,会自动收集错误信息,并将内容发送邮件。

config --> setting.py

setting.py 文件主要是用来存放项目中所有文件的目录地址

更改过一些公用的配置之后,下面我们来开始编写自动化

data 用来存放测试用例

上方主要是测试用例,测试用例是整个自动化程序中非常重要的一部分,需要严格按照我上方图中的格式进行编写。
下面我会对每个字段依次进行解释对应的作用。

  • url: 请求接口的地址, MerchantHost 为接口的host,放在conf.yaml 文件中,可以更改成公司项目的host
  • method: 请求方式,目前支持GET、POST、DELETE、PUT,本人公司目前设计到的请求方式只有这四种,如有需求可自行添加
  • detail: 用例描述,程序中未强制要求必填,但是最好是每个用例都填写上,打印日志以及生成代码的函数注释,都会依赖用例描述
  • header: 请求头
  • data: 请求参数
    • requestType: 必填,这个字段主要取决于你请求的是参数是以 jsonparamsfile 或者 data 格式
    • 如接口中需要的请求参数全部放在data中
  • resp: 响应断言相关的数据
    • 响应接口的参数字段(如code): code,就是接口的响应状态码,这些参数都是自己加的。
      • jsonpath: 这里获取到对应的接口数据,主要使用到了jsonpath。如果有不了这一块的,大家可以看我的博客: https://blog.csdn.net/weixin_43865008/article/details/118371620.
      • value: 预期值,这里会根据你前面jsonpath中获取到的响应数据,然后和你添加的预期值进行断言。如果断言失败,会打印对应的日志信息,以及allure测试报告中也会呈现这条用例的失败状态
      • type: 断言的类型,如判断是否相等,则使用”==“,或者”!=“,则表示内容不相等,”IN“则表示预期值是否在响应值中,对应的还有"NOTIN"
      • AssertType: 目前自动化支持两种断言类型,接口响应断言和数据库断言。如果是接口响应断言,则AssertType的值可不填,如果值为"SQL"的话,则走数据库断言。为sql的时候,sql查询出来的数据类型是字典类型,因此value值会从sql查询出来的字段中使用jsonpath的形式读取sql查询出来的数据
    • 如有多个数据,则可像上方图中一样,创建多个字段
    • sql: sql 是以 LIST 的类型存储的,可以将我们这个接口需要依赖的sql语句全部放在这里,程序中会循环查询出sql中的所有语句,并且返回数据库中的值,从而与接口响应的值做匹配。(这里也是对于sql多表联查不太会的朋友的福音。如果不会多表联查的话,可以编写单表sql,程序中会将所有单表的数据内容全部查询出来)
  • 接口中如有多条测试用例,则以上方格式为例,添加多个即可。

lib—> xxx.py

假设我们按照上方图中的格式内容,创建了一个用例创建成功之后yaml文件的用例,创建之后下面我们来生成自动化脚本,执行第一条用例。

首先,我们找到tools目录下的 testcaseAutomaticControl.py 文件,然后执行这里的代码

执行成功之后,我们可以看到lib目录下,会生成一个和创建用例yaml文件名称一模一样的py文件。
内容如下:

下面我们就可以开始执行我们的测试用例了,这里生成的文件,主要类似于我们自动化模型中的PO模型,生成的page

执行之后,我们可以看到下方详细的请求日志信息,方便我们进行用例调试

test_case --> test_apply_verifycode.py

用例调试成功之后,下面我们进入编写用例脚本阶段,主要内容如下:

其中代码中关于pytest的相关内容,网上的资料有非常多,并且非常详情,这里不做赘述。

所有的用例内容,格式都为统一的,唯一需要自己修改的就是类、函数名称,以及测试用例的路径。
因为测试用例层,不同的公司业务多种多样,并且很多业务逻辑较为复杂,因此这里没有采用自动生成脚本的形式,还需测试人员自己编写。

用例添加完成之后,执行run.py,程序会执行所有文件的用例,并且生成测试报告,发送钉钉通知。


以上便是整个框架的使用说明,这个框架属于个人业余时间开发,大家如果在使用中遇到什么问题,或者有相关建议,可以随时反馈给我,
框架内容会随着大家的反馈,持续更新!邮箱地址:1603453211@qq.com

如果觉得框架有帮助到你,麻烦收藏一下哦~~谢谢。

以上是关于最新pytest框架,框架功能全面,零基础也可快速上手的主要内容,如果未能解决你的问题,请参考以下文章

Pytest02全网最全最新的Pytest框架快速进阶篇

Pytest03全网最全最新的Pytest框架快速进阶篇(fixture应用)

Web 自动化测试全面提升之 Pytest

Pytest基础自学系列

pytest + yaml 框架 -18.sleep 和skip/skipif 功能实现

pytest + yaml 框架 -10.allure 生成报告