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

 更新时间:2022年12月17日 10:30:03   作者:爱学习de测试小白  
这篇文章主要介绍了pytest用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编写测试用例内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Django中外键使用总结

    Django中外键使用总结

    本文主要介绍了Django中外键使用总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Pandas DataFrame.drop()删除数据的方法实例

    Pandas DataFrame.drop()删除数据的方法实例

    pandas作为数据分析强大的库,是基于numpy数组构建的,专门用来处理表格和混杂的数据,下面这篇文章主要给大家介绍了关于Pandas DataFrame.drop()删除数据的相关资料,需要的朋友可以参考下
    2022-07-07
  • python持久化存储文件操作方法

    python持久化存储文件操作方法

    本文给大家分享python持久化存储文件操作方法,给大家讲解存储文件的重要性,指针的基本概念及关闭文件的方法,介绍文件的创建和删除技巧,感兴趣的朋友一起看看吧
    2021-06-06
  • python dict如何定义

    python dict如何定义

    在本篇文章里小编给大家整理的是关于python dict如何定义的相关知识点内容,需要的朋友们可以参考下。
    2020-09-09
  • Python使用Selenium实现浏览器打印预览功能

    Python使用Selenium实现浏览器打印预览功能

    在Web开发中,打印预览是一个常见的功能需求,通过打印预览,我们可以预览和调整网页的打印布局、样式和内容,Python的Selenium库是一个强大的工具,可以自动化浏览器操作,包括打印预览,本文将介绍如何使用Python Selenium库来实现浏览器的打印预览功能
    2023-11-11
  • Python实现自动签到脚本功能

    Python实现自动签到脚本功能

    这篇文章主要介绍了Python实现自动签到脚本,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • Python最好的日期处理库pendulum的使用指南

    Python最好的日期处理库pendulum的使用指南

    关于日期处理,Python 提供了很多的库,比如标准库 datetime、第三方库 dateutil、arrow 等等。本文将为大家介绍一个小编最喜欢的库 pendulum,用起来可以说非常的方便,任何对日期的操作它都能满足
    2022-07-07
  • 利用机器学习预测房价

    利用机器学习预测房价

    这篇文章主要介绍了利用机器学习回归模型预测房价,解释清晰,代码详细,是很不错的机器学习实战演练,对机器学习感兴趣的朋友可以参考一下
    2021-04-04
  • python 接收处理外带的参数方法

    python 接收处理外带的参数方法

    今天小编就为大家分享一篇python 接收处理外带的参数方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • 利用Django模版生成树状结构实例代码

    利用Django模版生成树状结构实例代码

    这篇文章主要给大家介绍了关于利用Django模版生成树状结构的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Django具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05

最新评论