python测试框架-->pytest结合数据驱动-yaml(五)

1、数据驱动的含义

数据驱动就是数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。简单来说,就是参数化的应用。数据量小的测试用例可以使用代码的参数化来实现数据驱动,数据量大的情况下建议大家使用一种结构化的文件(例如yaml,json、excel、csv等)来对数据进行存储,然后在测试用例中读取这些数据。

2、数据驱动应用场景

应用场景:APP、Web、接口自动化测试

  • 测试步骤的数据驱动
  • 测试数据的数据驱动
  • 配置的数据驱

3、pytest结合YAML

  • yaml是一个可读性高,用来表达数据序列化的格式。pyyaml模块在python中用于处理yaml格式数据,主要使用yaml.safe_load()和yaml.sofa_dump()函数将python值和yaml格式数据相互转换。yaml.safe_load()是从yaml中读取数据,yaml.sofa_dump()是将数据写入到yaml文件中。

4、安装PyYAML

  • 安装pip install PyYAML

5、实战

  • 案例:创建用例文件以及数据文件来完成数据驱动的测试案例,创建一个文件夹testdata,在这个文件夹下创建data.yaml和test_yaml.py文件,如下图所示:

在这里插入图片描述

(1)yaml的数据类型是列表

案例一:

#创建data.yml
-
  - 1
  - 2
-
  - 20
  - 30
#创建test_yaml.py
  
import pytest
import yaml

@pytest.mark.parametrize("a,b",yaml.safe_load(open("data.yaml",encoding='utf-8')))
def test_foo(a,b):
    print(f"a+b = {a+b}")
    

运行结果:

在这里插入图片描述

案例二:

#data.yml
-
  dev: 127.0.0.1
# perject:testdata
# name:test_demo.py.py
# date:2022-4-18
import yaml
import pytest

class TestDemo:

    def test_get_data(self):
        data = yaml.safe_load(open("data.yaml", encoding='utf-8'))
        print(type(data))

    @pytest.mark.parametrize("env",yaml.safe_load(open("./data.yaml")))
    def test_demo(self,env):
        if "test" in env:
            print("这是测试环境")
            print("测试环境ip是:",env["test"])
        elif "dev" in env:
            print("这是开发环境")
            print("开发环境的ip是:",env["dev"])

执行结果:

在这里插入图片描述

案例三:

#data.yaml文件
-
  - 10
  - 20
-
  - 30
  - 6
# perject:testdata
# name:test_demo.py.py
# date:2022-4-18
import pytest
import yaml


class TestData:
    # @pytest.mark.parametrize("a,b",[(10,20),(10,30)])
    
    #元祖
    # @pytest.mark.parametrize(("a","b"), [(10, 20), (10, 30)])
    
    # #列表
    # @pytest.mark.parametrize(["a", "b"], [(10, 20), (10, 30)])
    
    @pytest.mark.parametrize(["a", "b"], yaml.safe_load(open("./data.yaml")))
    def test_data(self,a,b):
        print(f"a+b={a+b}")

在这里插入图片描述

案例四:

#data.yaml
-
  - 10
  - 10
  - 20
-
  - 30
  - 6
  - 36
# perject:testdata
# name:test_demo.py.py
# date:2022-4-18
import pytest
import yaml


def my_add(x, y):
    result = x + y
    return result

def test_get_json():
    with open("data.yaml", 'r',encoding="UTF-8") as  file:
        data = yaml.safe_load(file.read())
        data1 = []
        for i in data:
            data1.append(i)
        # print(data1)
        return data1

class TestWithJson:
    @pytest.mark.parametrize("x,y,expected",test_get_json())
    def test_add(self,x,y,expected):
        value = my_add(x,y)
        assert value == int(expected)

在这里插入图片描述

(2)yaml的数据类型是字典

#data.yaml
info:
  "name": "chengzi"
  "age": 18
# perject:testdata
# name:test_yaml.py.py
# date:2022-4-18
import pytest
import yaml

def get_data():
    data = yaml.safe_load(open("data.yaml", encoding='utf-8'))
    name = data["info"]["name"]
    age = data["info"]["age"]
    return name,age

'''这个用例是为了打印数据,可以忽略'''
def test_get_data():
    data = yaml.safe_load(open("data.yaml", encoding='utf-8'))
    name = data["info"]["name"]
    age = data["info"]["age"]
    print(name)
    print(age)
    print(data)
    print(type(data))

@pytest.mark.parametrize("name,age", [get_data()])
def test_info(name,age):
    print(f"姓名是{name},年龄是{age}")

以上是pytest 结合数据驱动-yaml的学习笔记,希望可以帮助到你们

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橙子软件测试菇凉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值