pytest用yaml文件编写测试用例流程详解
作者:爱学习de测试小白 发布时间:2022-04-19 03:55:29
前言
本篇来学习在pytest中使用yaml编写测试用例
项目结构
conftest.py
只需在 conftest.py 即可实现使用yaml编写测试用例
# -*- coding: utf-8 -*-
import jsonpath
import pytest
import requests
def pytest_collect_file(parent, file_path):
if file_path.suffix == ".yaml" and file_path.name.startswith("test"):
return YamlFile.from_parent(parent, path=file_path)
class YamlFile(pytest.File):
def collect(self):
import yaml
yml_raw = self.fspath.open(encoding='utf-8').read()
print('yml_raw', yml_raw)
yml_var = Template(yml_raw).safe_substitute(os.environ)
raw = yaml.safe_load(yml_var)
print('raw', raw)
for yaml_case in raw:
name = yaml_case["test"]["name"]
values = yaml_case["test"]
yield YamlItem.from_parent(self, name=name, spec=values)
class YamlItem(pytest.Item):
def __init__(self, name, parent, spec):
super().__init__(name, parent)
self.name = name
self.values = spec
self.request = self.values.get("request")
self.validate = self.values.get("validate")
self.s = requests.session()
def values_render_variable(self, values):
# 替换测试用例中的关联值
yaml_test = Template(json.dumps(values)).safe_substitute(os.environ)
values = yaml.safe_load(yaml_test)
print('values', values)
return values
def runtest(self):
values = self.values_render_variable(self.values)
print('values:', values)
request_data = values["request"]
response = self.s.request(**request_data)
print("响应数据:", response.text)
# 判断是否有extract提取参数,实现参数关联
if values.get("extract"):
for key, value in values.get("extract").items():
os.environ[key] = jsonpath.jsonpath(response.json(), value)[0]
print('key', key)
print('value', jsonpath.jsonpath(response.json(), value)[0])
# 断言
print('validate:', self.validate)
self.assert_response(response, self.validate)
def assert_response(self, response, validate):
"""自定义断言"""
for i in validate:
if "eq" in i.keys():
yaml_result = i.get("eq")[0]
actual_result = jsonpath.jsonpath(response.json(), yaml_result)
expect_result = i.get("eq")[1]
print("实际结果:%s" % actual_result[0])
print("期望结果:%s" % expect_result)
assert actual_result[0] == expect_result
yaml文件
test_method.yaml
说明:
此yaml支持参数化
extract :提取关键字
name: 后面引用变量的key值
$.args.name:jsonpath 提取变量表达式
引用变量
$name : $key
- test:
name: get case
request:
url: https://postman-echo.com/get
method: GET
headers:
Content-Type: application/json
User-Agent: python-requests/2.18.4
params:
name: DH
city: Beijing
extract:
name: $.args.name
validate:
- eq: [$.args.name, DH]
- eq: [$.args.city, Beijing]
- test:
name: post case
request:
url: https://postman-echo.com/post
method: POST
headers:
Content-Type: application/json
User-Agent: python-requests/2.18.4
json:
name: $name
city: Beijing
validate:
- eq: [$.json.name, DH]
- eq: [$.json.city, Beijing]
执行并查看结果
pytest -s -v
来源:https://blog.csdn.net/IT_heima/article/details/127297186


猜你喜欢
- 描述exp() 方法返回x的指数,ex。语法以下是 exp() 方法的语法:import mathmath.exp( x )注意:exp()
- 本文实例代码主要实现的是python遍历文件目录的操作,有三种方法,具体代码如下。#coding:utf-8 # 方法1:递归遍历目录 im
- 前言最近在搜寻资料时,发现了一则10年前的新闻:二维码将成线上线下关键入口。从今天的移动互联网来看,支付收款码/健康码等等与我们息息相关,二
- 但是问题有三个:1、我们不知道已经有哪些轮子已经造好了,哪个适合你用。有名有姓的的著名轮子就400多个,更别说没名没姓自己在制造中的轮子。2
- 具体代码如下所示:#coding=utf-8__author__ = 'Eagle'import osimport time
- 1. 概述Promise对象是ES6提出的的异步编程的规范。说到异步编程,就不得不说说同步和异步这两个概念。从字面意思理解同步编程的话,似乎
- 最近圣诞节快到啦,CSDN的热搜也变成了”代码画颗圣诞树“,看了几篇博客,发现原博主把一些圣诞树给融合在了一起。我更喜欢树叶🍃更茂盛的感觉,
- 今天没事回家写了个贴吧图片下载程序,工具用的是PyCharm,这个工具很实用,开始用的Eclipse,但是再使用类库或者其它方便并不实用,所
- 在vue-router控制前端权限是常见需求:有一种做法是直接在后端完成判断,提供页面列表和操作列表,在前端进行渲染,但这个方案并不优雅,前
- 文 | 李晓飞来源:Python 技术「ID: pythonall」最近有了一个新任务,需要将赛事视频,拆分成两分钟以内的小段,用
- XML.DOM需求有一个表,里面数据量比较大,每天一更新,其字段可以通过xml配置文件进行配置,即,可能每次建表的字段不一样。上游跑时会根据
- Golang标准库binarybinary包实现了数字和字节序列之间的简单转换。1、ByteOrderByteOrder指定了如何将一个字节
- 我们在网页开发过程中经常会有打印页面的需求,通过JS来实现的方法有很多,这里我做了一个整理,供大家参考。方式一:window.print()
- 本文实例讲述了PHP编程实现多维数组按照某个键值排序的方法。分享给大家供大家参考,具体如下:实现对多维数组按照某个键值排序的两种解决方法(a
- 关于python写邮件各种功能我们已经介绍过很多,大家有兴趣可以参考:python自动化发送邮件实例讲解python实现发送QQ邮件(可加附
- 本文分析了python3新特性函数注释Function Annotations用法。分享给大家供大家参考,具体如下:Python 3.X新增
- 方法一:进入MYSQL安装目录 打开MYSQL配置文件 my.ini 或 my.cnf查找 max_connections=100 修改为
- tensorflow里面给出了一个函数用来读取图像,不过得到的结果是最原始的图像,是咩有经过解码的图像,这个函数为tf.gfile.Fast
- 本文实例讲述了Flask框架使用DBUtils模块连接数据库的操作方法。分享给大家供大家参考,具体如下:Flask连接数据库数据库连接池:D
- 摘要:序列化是将变量转换为可保存或传输的字符串的过程;反序列化就是在适当的时候把这个字符串再转化成原来的变量使用。这两个过程结合起来,可以轻