热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

39pytest使用yaml文件编写测试用例

使用yaml文件编写测试用例前言项目结构conftest.pyyaml文件执行并查看结果前言本篇来学习在pytest中使用yaml编写测试用例项目结构conftest.py只

使用yaml文件编写测试用例

      • 前言
      • 项目结构
      • conftest.py
      • yaml文件
      • 执行并查看结果




前言


  • 本篇来学习在pytest中使用yaml编写测试用例

项目结构

在这里插入图片描述

conftest.py


  • 只需在 conftest.py 即可实现使用yaml编写测试用例

# -*- coding: utf-8 -*-
# @Time : 2021/10/13
# @Author : 大海import jsonpath
import pytest
import requestsdef 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 yamlyml_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 = nameself.values = specself.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 valuesdef 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 caserequest:url: https://postman-echo.com/getmethod: GETheaders:Content-Type: application/jsonUser-Agent: python-requests/2.18.4params:name: DHcity: Beijingextract:name: $.args.namevalidate:- eq: [$.args.name, DH]- eq: [$.args.city, Beijing]
- test:name: post caserequest:url: https://postman-echo.com/postmethod: POSTheaders:Content-Type: application/jsonUser-Agent: python-requests/2.18.4json:name: $namecity: Beijingvalidate:- eq: [$.json.name, DH]- eq: [$.json.city, Beijing]

执行并查看结果

pytest -s -v

在这里插入图片描述


推荐阅读
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • 微信官方授权及获取OpenId的方法,服务器通过SpringBoot实现
    主要步骤:前端获取到code(wx.login),传入服务器服务器通过参数AppID和AppSecret访问官方接口,获取到OpenId ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • MyBatis错题分析解析及注意事项
    本文对MyBatis的错题进行了分析和解析,同时介绍了使用MyBatis时需要注意的一些事项,如resultMap的使用、SqlSession和SqlSessionFactory的获取方式、动态SQL中的else元素和when元素的使用、resource属性和url属性的配置方式、typeAliases的使用方法等。同时还指出了在属性名与查询字段名不一致时需要使用resultMap进行结果映射,而不能使用resultType。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • Gitlab接入公司内部单点登录的安装和配置教程
    本文介绍了如何将公司内部的Gitlab系统接入单点登录服务,并提供了安装和配置的详细教程。通过使用oauth2协议,将原有的各子系统的独立登录统一迁移至单点登录。文章包括Gitlab的安装环境、版本号、编辑配置文件的步骤,并解决了在迁移过程中可能遇到的问题。 ... [详细]
  • AFNetwork框架(零)使用NSURLSession进行网络请求
    本文介绍了AFNetwork框架中使用NSURLSession进行网络请求的方法,包括NSURLSession的配置、请求的创建和执行等步骤。同时还介绍了NSURLSessionDelegate和NSURLSessionConfiguration的相关内容。通过本文可以了解到AFNetwork框架中使用NSURLSession进行网络请求的基本流程和注意事项。 ... [详细]
  • 本文介绍了JavaScript进化到TypeScript的历史和背景,解释了TypeScript相对于JavaScript的优势和特点。作者分享了自己对TypeScript的观察和认识,并提到了在项目开发中使用TypeScript的好处。最后,作者表示对TypeScript进行尝试和探索的态度。 ... [详细]
  • PG12新增的VACUUM命令的SKIP_LOCKED选项
    PG12版本的VACUUM命令新增了SKIP_LOCKED选项,该选项使得vacuum命令在遇到被lock住的table时可以跳过并被视为成功执行。之前的版本中,vacuum命令会一直处于等待状态。本文还提到了PostgreSQL 12.1版本的相关信息。 ... [详细]
  • 使用Postman调试API遇到“400 Bad Request”问题
    问题今日使用Postman调试一个临时接手的API,参照调用程序代码填充好请求头、请求体参数(post),Postman客 ... [详细]
author-avatar
宫廷的围脖6uw_1911
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有