yamlpy接口测试框架

yamlp的Python项目详细描述


yamlpy

yamlpy接口测试框架

工程主页

pypi:
https://pypi.org/project/yamlpy/
github:
https://github.com/yjlch1016/yamlpy

yamlpy即为yaml文件+pytest单元测试框架的缩写
可看作是一个脚手架工具
可快速生成项目的各个目录与文件
只需维护一份或者多份yaml文件即可
(或者json文件)

yamlapi接口测试框架对比,
整体结构仍然保持不变,
yaml文件(或者json文件)格式仍然保持不变,
可以通用,
抛弃了python自带的unittest单元测试框架、ddt数据驱动第三方库、BeautifulReport测试报告第三方库,
修改了测试类文件,
传参方式由ddt的@ddt.ddt、@ddt.file_data()改为pytest的@pytest.mark.parametrize(),
删掉了tool工具包里面的beautiful_report_run.py文件,
其他文件保持不变。

pip install yamlpy
安装

yamlpy -h(或yamlpy --help)
查看参数信息

yamlpy -v(或yamlpy --version)
查看版本号

pip install -U yamlpy
安装最新版

yamlpy create --p=项目名称
创建项目
例如在某个路径下执行命令:
yamlpy create --p=demo_project

yamlpy run --c=环境缩写
运行项目
例如在项目的根目录下面执行命令:
yamlpy run --c=test

pip uninstall yamlpy
卸载


一、思路

1、采用requests+PyMySQL+DBUtils+demjson+loguru+PyYAML+ruamel.yaml+pytest+pytest-html+allure-pytest+pytest-reportlog+pytest-assume+pytest-rerunfailures+pytest-sugar+pytest-timeout+pytest-parallel+tablib
2、requests是发起HTTP请求的第三方库
3、PyMySQL是连接MySQL的第三方库
4、DBUtils是数据库连接池的第三方库
5、demjson是解析非标格式json的第三方库
6、loguru是记录日志的第三方库
7、PyYAML与ruamel.yaml是读写yaml文件的第三方库
8、pytest是单元测试的第三方库
9、pytest-html是生成html测试报告的插件
10、allure-pytest是生成allure测试报告的插件
11、pytest-reportlog是替换--resultlog选项的插件
12、pytest-assume是多重断言的插件
13、pytest-rerunfailures是失败重跑的插件
14、pytest-sugar是显示进度的插件
15、pytest-timeout是设置超时时间的插件
16、pytest-parallel是多线程的插件
17、tablib是导出多种格式数据的第三方库


二、目录结构

1、case是测试用例包
2、report_log是测试报告和日志的目录
3、resource是yaml文件的目录
4、setting是工程的配置文件包
5、tool是常用方法的封装包
6、.dockerignore是在传递给docker引擎时需要忽略掉的文件
7、.gitignore是.ignore插件需要排除的文件
8、conftest.py是全局钩子文件
9、Dockerfile是构建镜像的文件
10、Jenkinsfile是Jenkins Pipeline文件
11、pytest.ini是pytest的配置文件
12、requirements.txt是第三方依赖库


三、yaml、json文件说明

yaml文件

-case_name:用例名称step:-step_name:步骤名称mysql:---request_mode:POSTapi:/api/testbody:{"key_1":"value_1","key_2":"value_2"}headers:{"Content-Type":"application/json"}query_string:{"key_3":"value_3","key_4":"value_4"}expected_time:3expected_code:200expected_result:{"code":1,"message":"成功"}regular:variable:-name_1-name_2expression:-'"response_1":"(.+?)"'-'"response_2":"(.+?)"'

json文件

[{"case_name":"用例名称","step":[{"step_name":"步骤名称","mysql":[],"request_mode":"POST","api":"/api/test","body":"{\"key_1\":\"value_1\",\"key_2\":\"value_2\"}","headers":"{'Content-Type': 'application/json'}","query_string":"{'key_3':'value_3','key_4':'value_4'}","expected_time":3,"expected_code":200,"expected_result":"{\"code\":1,\"message\":\"成功\"}","regular":{"variable":["name_1","name_2"],"expression":["\"response_1\":\"(.+?)\"","\"response_2\":\"(.+?)\""]}}]}]

1、外层有2个字段,内层有13个字段
命名和格式不可修改,顺序可以修改

字段中文名称是否必填格式注解
case_name用例名称
step步骤-列表格式1条用例可以有1个或者N个步骤,全部的步骤通过,本条用例才算通过
step_name步骤名称
mysqlMySQL语句-列表格式顺序不可修改
request_mode请求方式
api接口路径
body请求体缩进字典格式或者json格式
headers请求头缩进字典格式或者json格式
query_string请求参数缩进字典格式或者json格式
expected_time预期的响应时间
expected_code预期的响应代码
expected_result预期的响应结果-列表格式、缩进字典格式或者json格式
regular正则缩进字典格式
variable变量名-列表格式
expression表达式-列表格式

2、mysql字段说明
mysql: MySQL语句,-列表格式,顺序不可修改,选填
第一行:mysql[0]
第二行:mysql[1]
第三行:mysql[2]
第一行为增、删、改语句,第二行为查语句,第三行为查语句(数据库双重断言)
第一行是发起请求之前的动作,没有返回结果
第二行是发起请求之前的动作,有返回结果,是为了动态传参
第三行是发起请求之后的动作,有返回结果,但是不可用于动态传参,是为了断言实际的响应结果
当不需要增删改查和双重断言时,可以不写mysql字段,或者三行都为空
当只需要增删改时,第一行为增删改语句,第二行为空,第三行为空
当只需要查时,第一行为空,第二行为查语句,第三行为空
当只需要双重断言时,第一行为空,第二行为空,第三行为查语句

3、参数化
正则表达式提取的结果用${变量名}匹配,一条用例里面可以有多个
MySQL查询语句返回的结果,即第二行mysql[1]返回的结果,用{__SQL索引}匹配
即{__SQL0}、{__SQL1}、{__SQL2}、{__SQL3}。。。。。。一条用例里面可以有多个
随机数字用{__RN位数},如{__RN15},一条用例里面可以有多个
随机英文字母用{__RL位数},如{__RL10},一条用例里面可以有多个
随机手机号码用{__MP},一条用例里面可以有多个
随机日期时间字符串用{__RD开始年份,结束年份},如{__RD2019,2020},一条用例里面可以有多个
以上6种类型在一条用例里面可以混合使用
${变量名}的作用域是全局的,其它5种的作用域仅限该条用例


四、运行

1、pytest模式:
pytest+--cmd=环境缩写
pytest --cmd=dev
开发环境
pytest --cmd=test
测试环境
pytest --cmd=pre
预生产环境
pytest --cmd=formal
生产环境

2、yamlpy模式:
yamlpy+run+--c=环境缩写
yamlpy run --c=dev
开发环境
yamlpy run --c=test
测试环境
yamlpy run --c=pre
预生产环境
yamlpy run --c=formal
生产环境

3、运行结果:
会在report_log目录下生成以下文件
allure-report
log年月日.log
report.html
report.xml
test_case.csv
test_case.html
test_case.json
test_case.xlsx
test_case.yaml


五、打包镜像

docker pull registry.cn-hangzhou.aliyuncs.com/yangjianliang/yamlapi:0.0.6
从阿里云镜像仓库拉取yamlapi镜像

docker build -t demo_image .
docker build -t 镜像名称 .
本地打包
demo_image为镜像名称,随便取

docker run -e cmd="test" demo_image:latest
docker run -e cmd="环境缩写" 镜像名称:latest
启动容器
前台运行
-e cmd="test"向启动命令动态传递参数,环境缩写为test

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Google应用程序引擎FreeMarker模板java。安全AccessControlException   在Java中,空字符串(“”)如何存储在内存中?   java如何使用PUT进行创建   java无法构造com的实例。谷歌。云数据存储。钥匙   Java递归中的堆栈溢出错误   java通过结构化设计模式重构冗余代码   javascript使用Selenium IDE 2.9.1上传文件   JAVAutil。扫描仪在Java中将文本文件加载到对象中   这个JAVA程序的时间复杂度是多少   java Springboot+tomcat+ssh=连接链路故障   矢量Java不安全操作   用于Java不同生成代码的协议缓冲区gRPC protobuf生成器   java OSGi为什么我的包命名为“unknown0.0.0”和MANIFEST。MF文件被覆盖了吗?   java日期保持为空(Android)   使用stax解析器java解析xml   java有一种方法可以在运行时确定对象是否是使用Lambdaj创建的。关于()方法?