pytest之参数化parametrize的使用

在测试用例的前面加上:
@pytest.mark.parametrize("参数名",列表数据)
参数名:用来接收每一项数据,并作为测试用例的参数。
列表数据:一组测试数据。

示例:

from datas import login
import pytest

class TestLogin():
  @pytest.mark.usefixtures('my_setup_class')
  @pytest.mark.login
  @pytest.mark.parametrize('data',login.user_incorrect)
  def test_login_2_wrong(self,data,my_setup_class):
    driver,login_page=my_setup_class
    login_page.clear_phone()
    login_page.clear_pwd()
    login_page.submit_userinfo(data['phone'],data['password'])
    assert (data['expected']==login_page.alert_info().text)

dataslogin.py里的数据:
user_incorrect=[{'phone':'','password':'','expected':'请输入手机号'},
{'phone':123,'password':'','expected':'请输入正确的手机号'}]

如上是一个登录失败的测试用例设计:

1、需要测试手机号为空、密码为空、手机号密码都为空、手机号不存在、密码错误等异常情况

2、这些用例的区别就在于输入的测试数据和对应的交互结果

3、所以我们可以只写一条登录失败测试用例,然后把多组测试数据和期望结果参数化,节省很多代码

注意:def test_login_2_wrong要加上data参数,执行的时候会对列表进行解包,然后根据data['key']的方式取值,实现了pytest的参数化。

原文地址:https://www.cnblogs.com/gurenqi0705/p/14040053.html