四、Pytest参数化用例

时间:2021-6-4 作者:qvyue

参数化使用

  • @pytest.mark.parametrize(argnames, argvalues)
  • argnames:要参数化的变量,string(逗号分割),list,tuple
  • argvalues:参数化的值,list,list[tuple]
import pytest

# 参数使用string
@pytest.mark.parametrize("a,b", [(10,20), (30,40)])
def test_param(a, b):
    print(a+b)

# 参数使用list
@pytest.mark.parametrize(["a","b"], [(10,20), (30,40)])
def test_param(a, b):
    print(a+b)

# 参数使用tuple
@pytest.mark.parametrize(("a","b"), [(10,20), (30,40)])
def test_param(a, b):
    print(a+b) 

参数使用list,就可以使用list的方法,比如 pop、append、insert、reverse等;参数使用tuple就可以使用tuple的方法,如 index、count;参数使用string同上。

yaml 数据参数化

yaml 安装
  • pip install PyYaml
  • 在pycharm中的设置里面进行安装:Project-> Project Interpreter-> + -> 搜索PyYaml -> 点击Install Package
yaml 实现 list
- 10
- 20
- 30
yaml 实现字典
by: id
locator: name
action: click
yaml 进行嵌套
- 
  - by: id
  - locator: name
  - action: click
companies:
  - 1
    id: 1
    name: company1
    price: 200w
  - 2
    id: 2
    name: company2
    price: 500w

结果为:companies: [{id:1, name:company1, price:200w}, {id:2, name:company2, price:500w}]

加载文件
  • yaml.safe_load(open("./data.yaml"))
实战

data.yaml 文件内容如下:

-
  - 10
  - 20
-
  - 30
  - 40
-
  - 15
  - 13

测试用例如下:

import pytest
import yaml
class TestData:
    @pytest.mark.parametrize("a,b",yaml.safe_load(open("data.yaml")))
    def test_data(self, a, b):
        print(a+b)

运行结果如下:

collecting ... collected 3 items

param_p.py::TestData::test_data[10-20] 
param_p.py::TestData::test_data[30-40] 
param_p.py::TestData::test_data[15-13] 

============================== 3 passed in 0.07s ==============================

Process finished with exit code 0
PASSED                            [ 33%]30
PASSED                            [ 66%]70
PASSED                            [100%]28

下一节:数据驱动(Yaml、JSON、Excel、CSV),包括使用外部数据自动创建用例

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。