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文件,如下图所示:

python测试框架-->pytest结合数据驱动-yaml(五)_第1张图片

(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}")
    

运行结果:

python测试框架-->pytest结合数据驱动-yaml(五)_第2张图片

案例二:

#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"])

执行结果:

python测试框架-->pytest结合数据驱动-yaml(五)_第3张图片

案例三:

#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}")

python测试框架-->pytest结合数据驱动-yaml(五)_第4张图片

案例四:

#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)

python测试框架-->pytest结合数据驱动-yaml(五)_第5张图片

(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的学习笔记,希望可以帮助到你们

你可能感兴趣的:(Python,Pytest测试框架,python)