zoukankan      html  css  js  c++  java
  • Pytest单元测试框架之parametrize参数化

    1、参数化的本质:相同的步骤,但测试数据不同,比如登录的场景

    import math
    import pytest

    # 方式一:分离出List
    def list_Test():
    list = [
    [2, 2, 4],
    [2, 3, 8],
    [1, 9, 1],
    [0, 9, 0],
    ]
    return list
    @pytest.mark.parametrize('a,b,expect',list_Test())
    def test_add_one(a,b,expect):
    # 断言 -- 某数的平方=expect对象
    assert math.pow(a,b) == expect

    # 方式二:分离出tuple
    def tuple_Test():
    tuple = [
    (2, 2, 4),
    (2, 3, 8),
    (1, 9, 1),
    (0, 9, 0),
    ]
    return tuple
    @pytest.mark.parametrize('a1,b1,expect1',tuple_Test())
    def test_add_two(a1,b1,expect1):
    # 断言 -- 某数的平方=expect对象
    assert math.pow(a1,b1) == expect1

    # 方式三:分离出dict
    def dict_Test():
    dict = [
    {'a': 2, 'b': 2, 'expect': 4},
    {'a': 2, 'b': 3, 'expect': 8},
    {'a': 2, 'b': 4, 'expect': 16},
    {'a': 1, 'b': 9, 'expect': 1},
    ]
    return dict
    @pytest.mark.parametrize('datas',dict_Test())
    def test_add_three(datas):
    # 断言 -- 某数的平方=expect对象
    assert math.pow(datas['a'],datas['b']) == datas['expect']

    # 方式四: 使用pytest.param方法进行分离
    def param_Test():
    param = [
    pytest.param(1, 1, 1,id='one'),
    pytest.param(2, 2, 4,id='two'),
    pytest.param(3, 3, 27,id='three')
    ]
    return param
    # ids参数默认为None,用于定义测试用例的名称
    @pytest.mark.parametrize('a,b,expect',param_Test())
    def test_add_four(a,b,expect):
    # 断言 -- 某数的平方=expect对象
    assert math.pow(a,b) == expect

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

    运行代码结果如下:

     2、固件request

    在Pytest的测试框架中,参数化也会使⽤到pytest内置的固件request,通过request.param来获取参数,对上面的案例代码进行修改,fixture参数列表中request也是内建fixture
    import pytest
    import math

    def datas():
    dict_param = [
    {'a': 2, 'b': 2, 'expect': 4},
    {'a': 2, 'b': 3, 'expect': 8},
    {'a': 2, 'b': 4, 'expect': 16},
    ]
    return dict_param

    @pytest.fixture(params=datas())
    def getParams(request):
    return request.param

    def test_math_pow(getParams):
    # 断言 -- 某数的平方=expect对象
    assert math.pow(getParams['a'],getParams['b']) == getParams['expect']

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

    代码运行结果如下:
  • 相关阅读:
    call/cc 总结 | Scheme
    用call/cc合成所有的控制流结构
    词法作用域 vs 动态作用域
    数论部分第二节:埃拉托斯特尼筛法
    1022: [SHOI2008]小约翰的游戏John【Nim博弈,新生必做的水题】
    C++面向对象作业1
    数论部分第一节:素数与素性测试【详解】
    基数排序与桶排序,计数排序【详解】
    计蒜客:百度的科学计算器(简单)【python神解】
    优质免费在线学习网站【自用】
  • 原文地址:https://www.cnblogs.com/Teachertao/p/14675018.html
Copyright © 2011-2022 走看看