如何使用yaml实现用例数据参数化

这里是用例调用yml的方法

'''导包
 如果没有安装需要安装两个模块pip install pytest
 pip install pyYAML
'''
import yaml
import pytest
# 读取文件
def yaml_data_with_file(file_name):
    with open('./'+ file_name +'.yml',encoding='utf-8') as f:
        return yaml.safe_load(f)
# 读取yaml数据中的key值,这里的yaml文件名是data
def yaml_data_with_key(key):
    return yaml_data_with_file('data')[key]

class Test_01():
    # 单参列表形式等价于
    # @pytest.mark.parametrize('name',['name1','name2'])
    @pytest.mark.parametrize('name',yaml_data_with_key('test_login0'))
    def test_login(self,name):
        print('----')
        print(name)
        print('---')

        #  这里的多参给绑定元组方式
        #  ((value,passd)),[(value,passd),(value1,passd1)]
        #  yaml_data_with_key("value")中的value对应为data.yaml的键值

        # 相当于
    # @pytest.mark.parametrize(('name','password'),[('name3','password3'),('name4','password4')])
    @pytest.mark.parametrize(('name','password'),yaml_data_with_key('test_login1'))
    def test_login2(self,name,password):
        print('-----')
        print(name)
        print(password)
        print('-----')
        # 字典形式的数据
        # 字典形式就相当于{'name':'password'},此时他是一个整体那么在选择时就相当于
    # @pytest.mark.parametrize('dict1',[{'name':'name7','password':'password7'},{'name':'name8','password':'password8'}])
        # 这时就需要抓字典的key来实现参数化
    @pytest.mark.parametrize('dict1',yaml_data_with_key('test_login2'))
    def test_login3(self,dict1):
        print('-----')
        name=dict1['name']
        password=dict1['password']
        print(name)
        print(password)
        print('-----')
# if __name__ == '__main__':
#     pytest.main(['-s','demo.py'])

这下面是data.yml文件的内容

#['name1','name2','name3'] 单参列表方式
test_login0 :
  - 'name1'
  - 'name2'
  - 'name3'
#[('name4','password4'),('name5','password5'),('name6','password6')]多参列表套元组
test_login1 :
  -
    - 'name4'
    - 'password4'
  -
    - 'name5'
    - 'password5'
  -
    - 'name6'
    - 'password6'
#[{'name7':'password7'},{'name8':'password8'},{'name9':'password9'}]
test_login2 :
  -
    name : 'name7'
    password : 'password7'
  -
    name : 'name8'
    password : 'password8'
  -
    name : 'name9'
    password : 'password9'

pytest.ini的文件内容

[pytest]
addopts= -s
testpaths=./
python_files=demo.py
python_classes=Test_*
python_functions=test_*

这三个文件就可以构成一个yaml参数化的简单示例

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pytest是Python中最流行的测试框架之一,它支持使用yaml格式来编写测试用例。以下是使用pytest和yaml编写测试用例的步骤: 1. 安装pytest和pyyaml: ```python pip install pytest pyyaml ``` 2. 创建一个yaml文件,文件名可以是任意的。在文件中,我们可以定义多个测试用例,每个测试用例包含以下信息: - name: 测试用例名称 - input: 测试用例输入 - expected_output: 测试用例预期输出 例如: ```yaml - name: addition_test input: a: 1 b: 2 expected_output: 3 - name: subtraction_test input: a: 5 b: 2 expected_output: 3 ``` 3. 在pytest测试文件中使用yaml文件中的测试用例。我们可以使用pyyaml库将yaml文件解析为Python对象,然后在pytest中使用它。 ```python import yaml def test_yaml_cases(): with open('test_cases.yaml', 'r') as f: test_cases = yaml.load(f, Loader=yaml.FullLoader) for case in test_cases: input_data = case['input'] expected_output = case['expected_output'] assert your_function(*input_data.values()) == expected_output ``` 在上面的代码中,我们首先打开yaml文件并使用pyyaml库将其解析为Python对象。然后,我们迭代测试用例并执行测试。对于每个测试用例,我们使用字典的values()方法获取输入数据并将其作为参数传递给被测试的函数。最后,我们断言函数的实际输出与测试用例的预期输出相同。 4. 运行pytest测试框架来验证我们的测试用例是否可以正常工作。 ```python pytest test_yaml_cases.py ``` 通过上述步骤,我们可以快速有效地设计和执行测试用例使用pytest和yaml编写测试用例不仅可以提高代码质量,还可以帮助开发人员减少繁琐的测试工作,从而更好地专注于软件开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值