阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

pytest接口测试之fixture传参数request

71次阅读
没有评论

共计 2584 个字符,预计需要花费 7 分钟才能阅读完成。

导读 本文主要介绍了 pytest 接口测试之 fixture 传参数 request 的使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
前言

有的测试用例,需要依赖于某些特定的 case 才可以执行,比如登录获取到 token,后面的请求都需要带着,为了确保在同一用户,必须带着和登录时获取的 cookies。

大部分的用例都会先登录,就需要把登录单独抽出来写个函数,其他用例全部调用这个登录函数就行,但是登录的账号不能写死。

一、函数传参

单独写个登录函数,传 2 个参数 user 和 password,写用例的时候调用登录函数,输入几组 user、password 参数化。需要用到装饰器 $pytest.mark.parametrize,里面写两个参数

第 1 个参数是字符串,多个参数中间用逗号隔开

第 2 个参数是 list,多组数组用元组类型

import pytest
 
def login(user, password):
    '''登录函数'''
    print('用户名:%s' % user)
    print('密码:%s' % password)
    return 'hello'
 
login_data = [('admin', '123456'), ('admin','')]
 
# 装饰器
@pytest.mark.parametrize('user, password', login_data)
def test_login(user, password):
    '''登录测试用例'''
    result = login(user, password)
    assert result == 'hello'
 
if __name__ == '__main__':
    pytest.main('-s', 'day0110_fixture.py')
'''
运行结果
============================= 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 . 用户名:admin
密码:123456
. 用户名:admin
密码:[100%]
 
========================== 2 passed in 0.02 seconds ===========================
'''
request 参数

request 就是我需要什么东西,用来接受参数,用到 @pytest.fixture 装饰器,传参就用默认的 request 参数,user = request.param 这一步是接收传入的参数。

import pytest
 
# 测试账号数据
test_data = ["admin1", "admin2"]
 
@pytest.fixture(scope="function")
def login(request):
    user = request.param
    print("登录账户:%s"%user)
    return user
 
@pytest.mark.parametrize("login", test_data, indirect=True)
def test_login(login):
    """登录用例"""
    a = login
    print("测试用例中 login 的返回值:%s" % a)
    assert a != ""

indirect=True 参数是为了把 login 当作一个函数去执行,而不是一个参数

request 传两个参数

如果用到 @pytest.fixture,里面用 2 个参数情况,可以把多个参数用一个字典去存储,这样最终还是只传一个参数。

不同的参数再从字典里面取对应 key 值就行,如:user = request.param[“user”]

#_*_coding:utf-8_*_
# 作者:Administrator
# 创建时间:2020/1/1018:18
# 文件:day0110_fixture.py
 
import pytest
 
@pytest.fixture(scope='function')
def login(request):
    '''登录函数'''
    user = request.param['user']
    password = request.param['password']
    print('用户名:%s' % user)
    print('密码:%s' % password)
    return 'hello'
 
login_data = [{'user': 'admin', 'password': '123456'}, {'user': 'admin', 'password': '1'}]
 
# 装饰器
@pytest.mark.parametrize('login',  login_data, indirect=True)
def test_login(login):
    '''登录测试用例'''
    result = login
    assert result == 'hello'
 
if __name__ == '__main__':
    pytest.main('-s', 'day0110_fixture.py')
'''
运行结果:============================= 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 用户名:admin
密码:123456
. 用户名:admin
密码:1
.                                                    [100%]
 
========================== 2 passed in 0.02 seconds ===========================
 
'''

到此这篇关于 pytest 接口测试之 fixture 传参数 request 的使用的文章就介绍到这了

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计2584字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中