pytest用yaml文件编写测试用例流程详解

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

前言

本篇来学习在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

到此这篇关于pytest用yaml文件编写测试用例流程详解的文章就介绍到这了,更多相关pytest编写测试用例内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Pytest+Yaml+Excel 接口自动化测试框架的实现示例

    目录 一.框架架构 二.项目目录结构 三.框架功能说明 四.核心逻辑说明 配置文件 输出目录 请求工具类 代码编写case 程序主入口 执行记录 一.框架架构 二.项目目录结构 三.框架功能说明 解决痛点: 通过session会话方式,解决了登录之后cookie关联处理 框架天然支持接口动态传参.关联灵活处理 支持Excel.Yaml文件格式编写接口用例,通过简单配置框架自动读取并执行 执行环境一键切换,解决多环境相互影响问题 支持http/https协议各种请求.传参类型接口 响应数据格式支持

  • pytest自动化测试数据驱动yaml/excel/csv/json

    目录 数据驱动 1.pytest结合数据驱动-yaml 工程目录结构: 2.pytest结合数据驱动-excel 工程目录结构: 3.pyetst结合数据驱动-csv 读取csv数据: 工程目录结构: 4.pytest结合数据驱动-json json结构: 查看json文件: 读取json文件: 工程目录结构: 数据驱动 数据的改变从而驱动自动化测试用例的执行,最终引起测试结果的改变.简单说就是参数化的应用. 测试驱动在自动化测试中的应用场景: 测试步骤的数据驱动: 测试数据的数据驱动: 配置的

  • pytest实现测试用例参数化

    背景 本文总结pytest的测试用例参数化. 说明 软件测试中,输入相应值,检查期望值,是常见测试方法. 在自动化测试中,一个测试用例对应一个测试点,通常一组测试数据无法完全覆盖测试范围,所以,需要参数化来传递多组数据. pytest的测试用例参数化使用如下装饰器即可完成. @pytest.mark.parametrize(argnames, argvalues) # 参数: # argnames:以逗号分隔的字符串 # argvaluse: 参数值列表,若有多个参数,一组参数以元组形式存在,包

  • Python pytest.main()运行测试用例

    目录 前言 pytest.main() 参数运行 指定测试用例 指定plugins参数 前言 前面一直使用命令行运行pytest用例,本篇来学下使用pytest.main()来运行测试用例 pytest.main() args 传一个list对象,list 里面是多个命令行的参数 plugins 传一个list对象,list 里面是初始化的时候需注册的插件 不带参数运行 import pytest # 等同于命令行执行 pytest # 默认运行的是当前目录及子目录的所有文件夹的测试用例 pyt

  • 详解Pytest测试用例的执行方法

    pytest概述 pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点: 1.简单灵活,容易上手,文档丰富: 2.支持参数化,可以细粒度地控制要测试的测试用例: 3.能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试.接口自动化测试(pytest+requests); 4.pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium).pytest-html(完美html

  • Python YAML文件的读写操作详解

    目录 YAML格式 YAML文件 YAML操作 读取 存储 示例 转字典 转列表 YAML是一种数据序列化格式,方便人类阅读,且容易和脚本语言交互.常用于配置文件,也用于数据存储或传输. YAML格式 YAML三种基本数据类型: 1.标量:如字符串.整数和浮点数.日期 布尔值:“true”.“True”.“TRUE”.“yes”.“Yes"和"YES”,“false”.“False”.“FALSE”.“no”.“No"和"NO” 空:null.Null.~或不指定值

  • python实现文件的备份流程详解

    python实现输入要备份的文件名称:test.txt 12行代码实现文件备份功能 第一步:打开我们的pycharm软件,然后新建一个Python文件 第二步:新建好我们的Python文件后,我们在编辑界面输入以下代码: oldfilename=input("请输入要备份的文件名:") #输入需要备份的旧文件名 oldfile=open(oldfilename,'r') #打开旧文件 if oldfile: #如果文件存在,则执行下面的语句 fileflagnum=oldfilenam

  • Golang单元测试与断言编写流程详解

    目录 编写单元测试 批量测试(test tables) 执行测试 性能测试 配置计算时间 断言(assertion) Go 在testing包中内置测试命令go test,提供了最小化但完整的测试体验.标准工具链还包括基准测试和基于代码覆盖的语句,类似于NCover(.NET)或Istanbul(Node.js).本文详细讲解go编写单元测试的过程,包括性能测试及测试工具的使用,另外还介绍第三方断言库的使用. 编写单元测试 go中单元测试与语言中其他特性一样具有独特见解,如格式化.命名规范.语法

  • pytest内置fixture使用临时目录流程详解

    目录 前言 tmpdir tmpdir_factory tmp_path tmp_path_factory 指定临时目录 前言 本篇来学习pytest中内置fixture中临时目录的使用 tmpdir tmpdir作用范围是函数级别,创建临时文件供单个测试点调用 # -*- coding: utf-8 -*- import os def test_tmpdir(tmpdir): """内置tmpdir fixture使用""" # 创建临时文件

  • springboot整合mybatis流程详解

    目录 1.mybatis是什么 2.整合 2.1 导入依赖 2.2 创建包和类 2.3 在application.yaml配置mybatis 3.使用注解版mybaits 4.实战过程 1.mybatis是什么 MyBatis 是一款优秀的持久层框架,它支持自定义 SQL.存储过程以及高级映射.MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作.MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型.接口和 Java POJO(Plain Old Java

  • MVC+DAO设计模式下的设计流程详解

    DAO设计 : DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DAO的接口,然后在Spring的配置文件中定义此接口的实现类,然后就可在模块中调用此接口来进行数据业务的处理,而不用关心此接口的具体实现类是哪个类,显得结构非常清晰,DAO层的数据源配置,以及有关数据库连接的参数都在Spring的配置文件中进行配置. 在该层主要完成对象-关系映射的建立,通过这个映射,再通过访问业务对象即可实现对数据库的访问,使得开发中不必再用SQL语句编写复杂的

  • Java代码生成器的制作流程详解

    1. 前言 前几天写了篇关于Mybatis Plus代码生成器的文章,不少同学私下问我这个代码生成器是如何运作的,为什么要用到一些模板引擎,所以今天来说明下代码生成器的流程. 2. 代码生成器的使用场景 我们在编码中存在很多样板代码,格式较为固定,结构随着项目的迭代也比较稳定,而且数量巨大,这种代码写多了也没有什么技术含量,在这种情况下代码生成器可以有效提高我们的效率,其它情况并不适于使用代码生成器. 3. 代码生成器的制作流程 首先我们要制作模板,把样板代码的固定格式抽出来.然后把动态属性绑定

  • SpringMvc框架的简介与执行流程详解

    目录 一.SpringMvc框架简介 1.Mvc设计理念 2.SpringMvc简介 二.SpringMvc执行流程 1.流程图解 2.步骤描述 3.核心组件 三.整合Spring框架配置 1.spring-mvc配置 2.Web.xml配置 3.测试接口 4.常用注解说明 四.常见参数映射 1.普通映射 2.指定参数名 3.数组参数 4.Map参数 5.包装参数 6.Rest风格参数 五.源代码地址 一.SpringMvc框架简介 1.Mvc设计理念 M:代表模型Model 模型就是数据,应用

  • Windows下安装Redis的流程详解

    目录 一.简介 二.下载与安装Redis 1.下载 2.解压 3.几个重要的文件 三.环境变量配置 四.验证与连接redis 1.验证 3.连接Redis 4.设置一个key测试一下 一.简介 Redis作为常用开源的非关系型数据库,是开发中常用的数据库之一.Redis底层是使用ANSI C编写的,支持网络可基于内存和可持久化的日志型.Key-Value数据库,提供了多种语言API.(基于内存是Redis快的一个重要因素) 二.下载与安装Redis 1.下载 github上可以下载Windows

  • C++ 情怀游戏扫雷的实现流程详解

    扫雷最原始的版本可以追溯到1973年一款名为"方块"的游戏. 不久,"方块"被改写成了游戏"Rlogic".在"Rlogic"里,玩家的任务是作为美国海军陆战队队员,为指挥中心探出一条没有地雷的安全路线,如果路全被地雷堵死就算输.两年后,汤姆·安德森在"Rlogic"的基础上又编写出了游戏"地雷",由此奠定了现代扫雷游戏的雏形. 1981年,微软公司的罗伯特·杜尔和卡特·约翰逊两位工程师

随机推荐