中企动力 网站建设 眼镜,公司网站荣誉墙怎么做,什么网站做贸易好,做百度推广设置网站统计simple-pytest 框架使用指南 一、框架介绍简介框架理念#xff1a;框架地址 二、实现功能三、目录结构四、依赖库五、启动方式六、使用教程1、快速开始1.1、创建用例#xff1a;1.2、生成py文件1.3、运行脚本1.3.1 单个脚本运行1.3.2 全部运行 1.4 报告查看 2、功能介绍2.1、… simple-pytest 框架使用指南 一、框架介绍简介框架理念框架地址 二、实现功能三、目录结构四、依赖库五、启动方式六、使用教程1、快速开始1.1、创建用例1.2、生成py文件1.3、运行脚本1.3.1 单个脚本运行1.3.2 全部运行 1.4 报告查看 2、功能介绍2.1、单个接口http请求与断言2.2、长链路业务http请求与断言2.3、数据库断言2.4、变量设置2.4.1、全局变量2.4.2 系统配置变量 2.5 前后置处理2.6 环境配置切换2.7 文件读取2.8 通知 一、框架介绍
简介
simple-pytest 框架主要参考了httprunner的yaml数据驱动部分设计思路是基于 Pytest Pytest-html Log Yaml Mysql 实现的简易版接口自动化框架。与httprunner不同的是httprunner是个封装好的工具包simple-pytest 是半封装的脚本目的是让用户自己更容易学习Pytest工具理解框架设计。
框架理念
1、一个yaml就是一个接口包含了接口的请求断言等信息。 2、脚本执行使用pytestpython代码做逻辑处理更加方便喜欢写代码的同学 3、让新手同学更加全面的理解pytest框架 4、为了 在学这个框架前必备的一点常识是 1、python基础语法 2、pytest基础包括用例执行夹具使用等
框架地址
gitee: https://gitee.com/itestxs/simple-pytest
二、实现功能
yaml数据驱动实现数据驱动隔离用例标签在py脚本中可以通过case_tag做用例过滤全局变量池实现接口之间的关联取值多断言支持!等多种断言支持jsonpath的取值方式sql数据库断言: 直接在yaml测试用例中写入查询的sql即可断言无需编写代码自动生成用例代码: 在yaml文件中填写好测试用例, 可以转换为py脚本。
三、目录结构
- config 项目配置文件redismysql等
- data 测试数据文件管理
- logs 日志记录
- reports 结果报告包括html
- test_cases 测试用例 ├── confset.py 测试夹具
- utils 各种工具类├── assertion 断言工具
- pytest.ini pytest配置文件
- conftest.py 全局夹具配置
- requirements.txt 相关依赖包文件
- run.py 执行用例入口文件四、依赖库
requests2.28.1
jsonpath0.82
fastapi0.88.0
pymysql1.0.2
pyyaml5.4.1
pytest7.4.3
pytest-html4.1.1
py1.11.0五、启动方式
1、先安装pip install requirements.txt 2、启用utils下的shopping_mock模块 3、运行run.py文件然后查看report的结果报告即可。
六、使用教程
1、快速开始
1.1、创建用例
在data目录下创建yaml文件
主要的字段格式如下 title接口名字 base_url域名地址不填则默认取得setting的BASE_URL如果填写了则直接获取填写的 path接口请求地址 method请求方法 request_data统一的请求参数比如headers cases测试用例集合 case_name测试用例名字支持多个case_name年编写 case_tag支持参数avl、dis、only 不填则为avl。其中avl就是可用的意思dis不可用only是代表只有当前用例生效。如果只传入only则其他用例则不被执行优先级是onlydisavl。也可以自定义打tag json接口的请求体可以直接输入字典格式自动生成的用例不是字典格式。请注意yaml的格式 params接口的url请求参数。待补充用例 assert断言status_code是断言请求状态码。$.data是jsonpath的表达式目前仅支持改表达式写法。目前支持的断言方式请在assert_type.py里查看包含大于、不等于、等于一系列判断 sql该case关联的sql可以将该sql用来做前置还是以及后置 extract_sql提起该sql的返回内容的某个字段存在变量池中$.id 也是jsonpath表达式 assert_sqlsql的断言用法同assert
yaml 模板用例如下
title: 查询商品
base_url: $config{BASE_URL}
path: /items
method: GET
request_data:headers:Content-Type: application/jsontoken: $global{token}cases:- case_name: 搜索-正常# case_tag 支持参数avl、dis、only 不填则为avl如果只传入only则所有case 只会返回only的数据也可以自定义打tagcase_tag: avlassert:- eq: [ status_code, 200 ]- ne: [ $.data, ]sql: select * from projectInfo where projectbm-scmextract_sql:id: $.idassert_sql:- eq: [ $.id, 1 ]- case_name: 搜索-超出范围case_tag: avlparams: page2limit10assert:- eq: [ status_code, 200 ]- eq: [ $.data, [] ]# login.yaml
title: 登录
path: /login
method: POST
request_data:headers:Content-Type: application/jsoncases:- case_name: 登录-正常# case_tag 支持参数avl、dis、only 不填则为avl如果只传入only则所有case 只会返回only的数据也可以自定义打tagcase_tag: avljson: {username: user1, password: password1}extract:token: $.tokenassert:- eq: [status_code, 200]- ne: [$.token, ]- case_name: 登录-用户名为空case_tag: avljson: { username: , password: password1 }assert:- eq: [status_code, 401]- eq: [$.detail, Invalid username or password]1.2、生成py文件
在utils目录下的yaml_to_py文件main修改yaml_to_pys批量转换整个data文件夹下的yaml文件yaml_to_py转换指定的yaml文件参数cover代表是否覆盖传入true则会覆盖你现有的。
if __name__ __main__:yaml_to_pys()# yaml_to_py(login.yaml)case_datas 为自动获取测试用例集可以通过get_case_data(case_tag“tag”)中的case_tag去过滤特定标签用例。
1.3、运行脚本
1.3.1 单个脚本运行
每个执行py脚本都可直接右击执行
1.3.2 全部运行
点击运行run文件可以通过testenv 参数指定获取哪个环境的配置。
1.4 报告查看
如果是单个配置则直接在当前test_cases目录下就可以看到如果是run脚本执行则报告统一放在reports 目前的报告格式是pytest-html。如果要用allure则可以自己修改使用。
2、功能介绍
2.1、单个接口http请求与断言 response HttpRequest.simple_request(case_data)Assert(response, case_data.get(assert)).assert_util#!/usr/bin/env python
# -*- coding: utf-8 -*-import pytestfrom utils.assertion.assert_util import Assert
from utils.http_request import HttpRequest
from utils.read_file_data import ReadFileDataclass TestLogin():case_datas ReadFileData(login.yaml).get_case_data() # get_case_data(tag) 自定义tag输入pytest.mark.parametrize(case_data, case_datas, idsgenerate_ids(case_datas))def test_login(self, case_data):response HttpRequest.simple_request(case_data)Assert(response, case_data.get(assert)).assert_utilif __name__ __main__:pytest.main([test_login.py])2.2、长链路业务http请求与断言
该功能是添加购车然后付款的流程。 彼此之间有接口依赖问题通常解决依赖问题有两种
第一种使用框架自带的merge_cases_data函数 test_data merge_cases_data(add_carts_data, order_pays_data) # 将多个用例合并。merge_cases_data 是依赖接口合并有两个默认规则如果两个接口用例数一样多的如[x,y],[A,B]那用例合并后结果就是[x,A] ,[y,B]如果两个接口用例数不一样如[x] [A,B]那结果就是[x,A],[x,B]如[x,y] [A]那结果就是[x,A],[y,A]。第二种自己编写代码逻辑。 每个yaml就是一个接口。获取每个yaml的接口数据然后获取用例后if else逻辑。如果接口之前有变量依赖请借助全局变量去取。 import pytestfrom utils.assertion.assert_util import Assert
from utils.http_request import HttpRequest
from utils.merge_cases import merge_cases_data, generate_ids
from utils.read_file_data import ReadFileDataclass TestAddPay():add_carts_data ReadFileData(add_carts.yaml).get_case_data() # get_case_data(tag) 自定义tag输入order_pays_data ReadFileData(order_pays.yaml).get_case_data()test_data merge_cases_data(add_carts_data, order_pays_data) # 将多个用例合并print(testdata,test_data)pytest.mark.parametrize(add_carts_data,order_pays_data, test_data, idsgenerate_ids(test_data,merge))def test_add_pay(self, add_carts_data, order_pays_data):add_carts_response HttpRequest.simple_request(add_carts_data)# print(add_carts_response.json())Assert(add_carts_response, add_carts_data.get(assert)).assert_utilorder_pays_response HttpRequest.simple_request(order_pays_data)# print(order_pays_response.json())Assert(order_pays_response, order_pays_data.get(assert)).assert_utilif __name__ __main__:pytest.main([test_add_pay.py])2.3、数据库断言
需要提前在config配置settings的MYSQL_CONFIG参数
data SqlRequest.sql_request(case_data)
Assert(data, case_data.get(assert_sql)).sql_assert_util如果要讲数据库字段提取出来则写在
GlobalVars.update_global_vars(key“data”, valuedata) # 将参数手动添加到公共变量中
import jsonimport pytestfrom utils.assertion.assert_util import Assert
from utils.global_vars import GlobalVars
from utils.http_request import HttpRequest
from utils.read_file_data import ReadFileData
from utils.sql_reqeust import SqlRequestclass TestSearch():case_datas ReadFileData(search_items.yaml).get_case_data() # get_case_data(tag) 自定义tag输入print(case_datas)pytest.mark.parametrize(case_data, case_datas, idsgenerate_ids(case_datas))def test_search_items(self, case_data):response HttpRequest.simple_request(case_data)print(response.json())Assert(response, case_data.get(assert)).assert_util# demo1-数据库断言写法# from utils.mysql_manager import db # 注意一定要在测试用例中引用要不然会连接不上数据库# data db.select_db(select * from projectInfo where projectbm-scm)# print(data,data)# GlobalVars.update_global_vars(keydata, valuedata) # 将参数手动添加到公共变量中# assert data[id] 1# demo2-数据库断言写法data SqlRequest.sql_request(case_data)print(data, data)GlobalVars.update_global_vars(keydata, valuedata) # 将参数手动添加到公共变量中Assert(data, case_data.get(assert_sql)).sql_assert_utilif __name__ __main__:pytest.main([test_search_items.py])2.4、变量设置
主要的变量有两种一个是全局变量主要是接口数据库字段等值的传参使用。一个是配置变量拿去配置里的信息。
2.4.1、全局变量
使用用法使用$global{}关键字获取 $global{token} 以上例子是获取全局变量中token的变量 注意全局变量如果命名重复会导致值被替换请使用不同的变量名。
2.4.2 系统配置变量
配置变量获取的是config里的setting值启动的时候会自动获取当前环境的配置 $config{BASE_URL} 2.5 前后置处理
目前前后置处理由用户自己处理较为常用的用法是使用pytest的夹具功能
2.6 环境配置切换
使用testenv参数即可切换生产以及测试环境的配置。默认不填的情况下使用的是测试环境的配置。配置读取的是settings里的信息
2.7 文件读取
read_file_data提供函数支持读取json、yaml、csv、txt等文件
2.8 通知
在config settings下配置project、feishu_key信息运行run脚本即可发送飞书通知注意只有运行run脚本才可以发送飞书通知 文章转载自: http://www.morning.pzqnj.cn.gov.cn.pzqnj.cn http://www.morning.lbrwm.cn.gov.cn.lbrwm.cn http://www.morning.nmkbl.cn.gov.cn.nmkbl.cn http://www.morning.mdgb.cn.gov.cn.mdgb.cn http://www.morning.ccffs.cn.gov.cn.ccffs.cn http://www.morning.xbrxk.cn.gov.cn.xbrxk.cn http://www.morning.skscy.cn.gov.cn.skscy.cn http://www.morning.cpnlq.cn.gov.cn.cpnlq.cn http://www.morning.dtlqc.cn.gov.cn.dtlqc.cn http://www.morning.rbgwj.cn.gov.cn.rbgwj.cn http://www.morning.mgtrc.cn.gov.cn.mgtrc.cn http://www.morning.qbjrl.cn.gov.cn.qbjrl.cn http://www.morning.chzbq.cn.gov.cn.chzbq.cn http://www.morning.gkpgj.cn.gov.cn.gkpgj.cn http://www.morning.rldph.cn.gov.cn.rldph.cn http://www.morning.zsrdp.cn.gov.cn.zsrdp.cn http://www.morning.ybmp.cn.gov.cn.ybmp.cn http://www.morning.yznsx.cn.gov.cn.yznsx.cn http://www.morning.jgzmr.cn.gov.cn.jgzmr.cn http://www.morning.ryfpx.cn.gov.cn.ryfpx.cn http://www.morning.wjplm.cn.gov.cn.wjplm.cn http://www.morning.hrydl.cn.gov.cn.hrydl.cn http://www.morning.xfxqj.cn.gov.cn.xfxqj.cn http://www.morning.lmyq.cn.gov.cn.lmyq.cn http://www.morning.tlfzp.cn.gov.cn.tlfzp.cn http://www.morning.mkfhx.cn.gov.cn.mkfhx.cn http://www.morning.wmsgt.cn.gov.cn.wmsgt.cn http://www.morning.cmzgt.cn.gov.cn.cmzgt.cn http://www.morning.pjjkz.cn.gov.cn.pjjkz.cn http://www.morning.fhqsm.cn.gov.cn.fhqsm.cn http://www.morning.nqrlz.cn.gov.cn.nqrlz.cn http://www.morning.skkmz.cn.gov.cn.skkmz.cn http://www.morning.nqyzg.cn.gov.cn.nqyzg.cn http://www.morning.plznfnh.cn.gov.cn.plznfnh.cn http://www.morning.xqcst.cn.gov.cn.xqcst.cn http://www.morning.rkzk.cn.gov.cn.rkzk.cn http://www.morning.xbkcr.cn.gov.cn.xbkcr.cn http://www.morning.jlgjn.cn.gov.cn.jlgjn.cn http://www.morning.kryr.cn.gov.cn.kryr.cn http://www.morning.zcqgf.cn.gov.cn.zcqgf.cn http://www.morning.tcpnp.cn.gov.cn.tcpnp.cn http://www.morning.xkwyk.cn.gov.cn.xkwyk.cn http://www.morning.btwrj.cn.gov.cn.btwrj.cn http://www.morning.pswzc.cn.gov.cn.pswzc.cn http://www.morning.txkrc.cn.gov.cn.txkrc.cn http://www.morning.lbjdx.cn.gov.cn.lbjdx.cn http://www.morning.ydhck.cn.gov.cn.ydhck.cn http://www.morning.ksqyj.cn.gov.cn.ksqyj.cn http://www.morning.jbmbj.cn.gov.cn.jbmbj.cn http://www.morning.jnhhc.cn.gov.cn.jnhhc.cn http://www.morning.qfwzm.cn.gov.cn.qfwzm.cn http://www.morning.kzrbd.cn.gov.cn.kzrbd.cn http://www.morning.mmxt.cn.gov.cn.mmxt.cn http://www.morning.china-cj.com.gov.cn.china-cj.com http://www.morning.nfcxq.cn.gov.cn.nfcxq.cn http://www.morning.ztqyj.cn.gov.cn.ztqyj.cn http://www.morning.nqrlz.cn.gov.cn.nqrlz.cn http://www.morning.dwrbn.cn.gov.cn.dwrbn.cn http://www.morning.srky.cn.gov.cn.srky.cn http://www.morning.fdjwl.cn.gov.cn.fdjwl.cn http://www.morning.zfhwm.cn.gov.cn.zfhwm.cn http://www.morning.bjsites.com.gov.cn.bjsites.com http://www.morning.gfnsh.cn.gov.cn.gfnsh.cn http://www.morning.kcyxs.cn.gov.cn.kcyxs.cn http://www.morning.fpxms.cn.gov.cn.fpxms.cn http://www.morning.zwndt.cn.gov.cn.zwndt.cn http://www.morning.hpcpp.cn.gov.cn.hpcpp.cn http://www.morning.ktmbr.cn.gov.cn.ktmbr.cn http://www.morning.drnfc.cn.gov.cn.drnfc.cn http://www.morning.xtrnx.cn.gov.cn.xtrnx.cn http://www.morning.snkry.cn.gov.cn.snkry.cn http://www.morning.qxlhj.cn.gov.cn.qxlhj.cn http://www.morning.psxcr.cn.gov.cn.psxcr.cn http://www.morning.skkmz.cn.gov.cn.skkmz.cn http://www.morning.nzmw.cn.gov.cn.nzmw.cn http://www.morning.mxhcf.cn.gov.cn.mxhcf.cn http://www.morning.lbssg.cn.gov.cn.lbssg.cn http://www.morning.rbzd.cn.gov.cn.rbzd.cn http://www.morning.ruifund.com.gov.cn.ruifund.com http://www.morning.jftl.cn.gov.cn.jftl.cn