前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pytest + yaml 框架 -8.一个yaml 文件可以支持多个用例了

pytest + yaml 框架 -8.一个yaml 文件可以支持多个用例了

作者头像
上海-悠悠
发布2023-01-03 13:56:39
7060
发布2023-01-03 13:56:39
举报
文章被收录于专栏:从零开始学自动化测试

前言

一个yaml 文件中可以写多个用例,yaml 文件相当于py模块,每个用例相当于模块里面定义 pytest 的一个函数, 用例名称最好是test开头,如果不是test开头,也会帮你自动拼接成test开头的

pip 安装插件

代码语言:javascript
复制
pip install pytest-yaml-yoyo

yaml 文件写多个用例功能在 v1.0.6 版本上实现

基本用例执行

在pytest 用例中,我们可以在一个模块写多个函数式的用例,每个用例test开头,如下

代码语言:javascript
复制
import pytest

def test1():
    """用例1"""
    print("hello 111")

def test2():
    """用例2"""
    print("hello 222")

def test3():
    """用例3"""
    print("hello 333")

if __name__ == '__main__':
    pytest.main(['-s', 'test_sample.py'])

执行后会看到3个用例

代码语言:javascript
复制
collected 3 items

test_sample.py hello 111
.hello 222
.hello 333
.

=============== 3 passed in 0.01s ===========

根据以上pytest的基本运行原理,于是我们也可以在yaml文件中写出同等的效果

代码语言:javascript
复制
    test1:
        name: 用例1
        print: hello 11111

    test2:
        name: 用例2
        print: hello 22222

    test3:
        name: 用例3
        print: hello 3333

输入pytest 运行yaml 用例文件

代码语言:javascript
复制
(venv) D:\demo>pytest test_case.yml -s
=================================== test session starts ===================================
platform win32 -- Python 3.8.5, pytest-7.2.0, pluggy-1.0.0
collected 3 items                                                                          

test_case.yml hello 11111
.hello 22222
.hello 3333
.

==================================== 3 passed in 0.15s ====================================

可以看出执行效果是完全一样的

重新定义了yaml用例格式

为了框架的可扩展性,config 和 teststeps 都不是必须的了,当然以前的格式还是会兼容

代码语言:javascript
复制
    config:
        name: demo

    teststeps:
    -
      name: GET请求示例
      request:
        method: GET
        url: http://httpbin.org/get
      validate:
        - eq: [status_code, 200]

    test1:
        name: 用例1
        print: hello 11111

    test2:
        name: 用例2
        print: hello 22222

用例部分支持2种格式,可以是一个键值对格式

代码语言:javascript
复制
    test1:
        name: 用例1
        print: hello 11111

也可以是一个list

代码语言:javascript
复制

    test1:
     -
        name: 用例1
        print: hello 11111

如果一个用例有多个步骤需要执行,那么用例应该是一个list,会按顺序去执行

代码语言:javascript
复制
    config:
        name: demo


    test1:
        name: 用例1
        print: hello 11111

    test2:
    -
        name: get
        request:
            method: GET
            url: http://httpbin.org/get
        validate:
          - eq: [status_code, 200]

    -
        name: post
        request:
            method: POST
            url: http://httpbin.org/post
            json:
              username: test
              password: "123456"
        validate:
          - eq: [status_code, 200]

支持中文命名

用例的函数名称也可以使用中文命名了,这样更直观

代码语言:javascript
复制
config:
    name: demo

用例演示1:
    name: 用例1
    print: hello 11111

用例是多个步骤2:
-
    name: get
    request:
        method: GET
        url: http://httpbin.org/get
    validate:
      - eq: [status_code, 200]

-
    name: post
    request:
        method: POST
        url: http://httpbin.org/post
        json:
          username: test
          password: "123456"
    validate:
      - eq: [status_code, 200]

原有的用例规则不变,只是teststeps 不是必须的关键字,可以用其它的名称,也可以继续使用teststeps (为了兼容大家的使用习惯)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-12-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 基本用例执行
  • 重新定义了yaml用例格式
  • 支持中文命名
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档