Python + Selenium(十一)- pytest.mark.parametrize及前置后置的使用

文章目录

    • pytest.mark.parametrize
    • pytest的前置条件与后置条件
      • 1、用例的前置与后置条件
      • 2、类的前置与后置条件
      • 3、模块的前置与后置条件
      • 4、程序的前置后置条件

pytest.mark.parametrize

Pytest 中装饰器可以实现测试用例参数化,类似 unittest 中的DDT。

语法:@pytest.mark.parametrize(‘参数名’,list)

import pytest

class TestLogin:
	login_err_data = [{'name':'kaishui','pwd':''},
	{'name':'','pwd':'123'}]

@pytest.mark.parametrize('login_data', self.login_err_data)
    def test_login_err(self, login_data ):
    	# 调用登录方法,将用户名和密码传入
        res = login_page.login(login_data['name'],login_data['pwd'])
        # 验证是否登录成功
        assert res == '登录成功'

可以看出,pytest.mark.parametrize将列表login_err_data中的每个元素都赋值到变量login_data中。

该装饰器与ddt的区别是自动拆包了。

pytest的前置条件与后置条件

1、用例的前置与后置条件

import pytest

@pytest.fixture()
def case_fixture():
    # 前置条件
    username = 'kaishui'
    pwd = '123'
    print('这是用例的前置条件')
    yield username,pwd
    # 后置条件
    print('这是用例的后置条件')
    
    
class TestLogin:
	
    def test_login_err(self, case_fixture):
        # 声明name,pwd变量用来接收前置条件传来的参数
        name , pwd = case_fixture
    	# 调用登录方法,将用户名和密码传入
        res = login_page.login(name,pwd)
        # 验证是否登录成功
        assert res == '登录成功'  

@pytest.fixture():用来声明该方法是前置、后置方法;

yield:写在fixture方法中,用来区别前置条件和后置条件,并且能够return前置条件中的相关数据

用例前置后置条件的调用:直接在测试用例的参数中写入前置后置方法名。

用例前置后置条件的参数接收:直接拆包接收即可。

2、类的前置与后置条件

import pytest

@pytest.fixture(scope='class')
def class_fixture():
    # 前置条件
    print('这是类的前置条件')
    yield 
    # 后置条件
    print('这是类的后置条件')
    
class TestLogin:
	
    def test_login_err(self, class_fixture):
    	# 调用登录方法,将用户名和密码传入
        res = login_page.login(name,pwd)
        # 验证是否登录成功
        assert res == '登录成功'  

对比用例的前置后置条件,类只需要在后面加上**(scope=‘class’)** 即可。

只要在一个用例参数中写了类前置后置方法名,在执行时,该类就会调用该方法,且只调用一次。

3、模块的前置与后置条件

@pytest.fixture(scope='module',autouse=True)
def module_fixture():
	 # 前置条件
    print('这是模块的前置条件')
    yield 
    # 后置条件
    print('这是模块的后置条件')

对比类的前置后置条件,将scope的值换成了module

autouse=True: 代表不需要在模块中指定是否需要使用前置后置条件,所有的模块都会自动使用模块前置后置条件。

4、程序的前置后置条件

@pytest.fixture(scope='session',autouse=True)
def module_fixture():
	# 前置条件
    print('这是程序的前置条件')
    yield 
    # 后置条件
    print('这是程序的后置条件')

session 的前置后置条件在每一次程序中只会执行一次,即最外层的前置后置。

你可能感兴趣的:(#,Python,+,Selenium)