Use of fixture Transmission Parameter request in pytest Interface Test

  • 2021-11-24 02:03:51
  • OfStack

Preface to the table of contents 1. Function parameter transmission request parameter request passes two parameters

Preface

Some test cases need to rely on some specific case before they can be executed. For example, login obtains token, and subsequent requests need to be brought with them. In order to ensure that the same user must bring cookies obtained at login.

Most use cases will log in first, so it is necessary to draw out the login separately and write a function. All other use cases will call this login function, but the logged-in account can't be written dead.

1. Function parameter transmission

Write a login function separately, pass two parameters user and password, call the login function when writing use cases, and input several groups of user and password parameterization. Need to use the decorator $pytest. mark. parametrize, which writes two parameters

The first parameter is a string, and multiple parameters are separated by commas
The second parameter is list, and the tuple type is used for multiple arrays


import pytest

def login(user, password):
    ''' Login function '''
    print(' User name: %s' % user)
    print(' Password: %s' % password)
    return 'hello'

login_data = [('admin', '123456'), ('admin','')]

#  Decorator 
@pytest.mark.parametrize('user, password', login_data)
def test_login(user, password):
    ''' Login test case '''
    result = login(user, password)
    assert result == 'hello'

if __name__ == '__main__':
    pytest.main('-s', 'day0110_fixture.py')
'''
 Running result 
============================= test session starts =============================
platform win32 -- Python 3.6.6, pytest-4.5.0, py-1.8.0, pluggy-0.13.1
rootdir: F:\python work\youyou_class\study_pytestcollected 2 items

day0110_fixture.py . User name: admin
 Password: 123456
. User name: admin
 Password: 
                                                    [100%]

========================== 2 passed in 0.02 seconds ===========================
'''

request parameter

request is what I need to accept parameters. With the @ pytest. fixture decorator, the default request parameters are used for passing parameters. user = request. param is to receive the incoming parameters.


import pytest

#  Test account data 
test_data = ["admin1", "admin2"]

@pytest.fixture(scope="function")
def login(request):
    user = request.param
    print(" Login account: %s"%user)
    return user

@pytest.mark.parametrize("login", test_data, indirect=True)
def test_login(login):
    """ Login use case """
    a = login
    print(" In test cases login Return value of :%s" % a)
    assert a != ""

The indirect=True parameter is used to execute login as a function, not as a parameter

request passes two parameters

If @ pytest. fixture is used, and two parameters are used in it, multiple parameters can be stored in one dictionary, so that only one parameter is passed in the end.
Just take the corresponding key value from the dictionary for different parameters, such as: user = request. param ["user"]


#_*_coding:utf-8_*_
#  Author       : Administrator
#  Creation time   : 2020/1/1018:18
#  Documents       : day0110_fixture.py

import pytest

@pytest.fixture(scope='function')
def login(request):
    ''' Login function '''
    user = request.param['user']
    password = request.param['password']
    print(' User name: %s' % user)
    print(' Password: %s' % password)
    return 'hello'

login_data = [{'user': 'admin', 'password': '123456'}, {'user': 'admin', 'password': '1'}]

#  Decorator 
@pytest.mark.parametrize('login',  login_data, indirect=True)
def test_login(login):
    ''' Login test case '''
    result = login
    assert result == 'hello'

if __name__ == '__main__':
    pytest.main('-s', 'day0110_fixture.py')
'''
 Run results: 
============================= test session starts =============================
platform win32 -- Python 3.6.6, pytest-4.5.0, py-1.8.0, pluggy-0.13.1
rootdir: F:\python work\youyou_class\study_pytestcollected 2 items

day0110_fixture.py  User name: admin
 Password: 123456
. User name: admin
 Password: 1
.                                                    [100%]

========================== 2 passed in 0.02 seconds ===========================

'''

Related articles: