• Pytest之参数化


    在unittest测试中,有参数化的概念,那么在pytest中也有。

     如何理解参数化:

            当对一个测试函数进行测试时,通常会给函数传递多组参数。比如测试账号登陆,我们需要模拟各种千奇百怪的账号密码。可以把这些参数写在测试函数内部进行遍历。不过虽然参数众多,但仍然是一个测试,当某组参数导致断言失败。我们想要的是一个的失败不影响其他的失败。通过参数化的方式来管理组织。那么我们看下pytest如何实现参数化的。

    pytest.mark.parametrize(argnames, argvalues)

    假设要测试密码的长度必须大于8位且小于16位。设计了几个密码

    ['123','12345678','1234567890123456','12345678901234561']
    

    我们看下如何使用

    import pytest
    
    @pytest.mark.parametrize('passwd',
                          ['123','12345678','1234567890123456','12345678901234561'])
    
    
    def test_passwd_length(passwd):
        assert len(passwd) >= 8
        assert len(passwd)<=16
    

     正常应该执行四个测试用例

     失败用例:

     

    符合我们预期,可以看到用参数化的思路可以减少代码编写。

    如果我们要验证用户名和密码呢,两个参数如何实现呢。

    import pytest
    
    
    @pytest.mark.parametrize('user,passwd', [
        ('lowen', '123'), ('lowen', '12345678'),
        ('lowen', '1234567890123456'),
        ('lowenlowen', '12345678901234561')
    ])
    
    def test_passwd_length(user, passwd):
        assert len(passwd) >= 8
        assert len(passwd) <= 16
        assert user == 'lowen'
    

      

     

     当然还可以给每组参数增加id

    import pytest
    
    
    @pytest.mark.parametrize('user,passwd',
                             [pytest.param('lowen', '123', id='User:lowen'),
                              pytest.param('lowen', '12345678', id='User:lowen'),
                              pytest.param('ll', '1234567890123456', id='User:ll'),
                              pytest.param('lowenlowen', '12345678901234561', id='User:lowenzishuoceshikwaifa')])
    
    def test_passwd_length(user, passwd):
        assert len(passwd) >= 8
        assert len(passwd) <= 16
        assert user == 'lowen'
    

     

    执行结果为:

     上面的都是写固定的,但是,实际的工作中呢,很多时候的参数都是实时读取的。这些参数数据都是动态读取来的,那么看下如何给参数动态传递呢,这里获取数据,写了一个demo。

    import pytest
    
    
    def getparame() -> list:
        return [('lowen', '123'), ('lowen', '12345678'), ('ll', '1234567890123456'),
                ('lowenzishuoceshikaifa', '12345678901234561')]
    
    
    @pytest.mark.parametrize('user,passwd',getparame())
    def test_passwd_length(user, passwd):
        assert len(passwd) >= 8
        assert len(passwd) <= 16
        assert user == 'lowen'
    

     

    执行结果为:

  • 相关阅读:
    又一道简单的题
    atoi函数的使用(将字符串转换成整型数)
    【贪心】Radar Installation(POJ1328)
    【BFS】鸣人与佐助
    谍报分析
    适配器模式(C++实现)
    策略模式(C++)
    工厂模式(C++实现)
    桥接模式(C++实现)
    关于getMemory函数的几点思考
  • 原文地址:https://www.cnblogs.com/pywen/p/16077786.html
Copyright © 2020-2023  润新知