ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

pytest-setup与用例之间传参

2022-08-07 23:03:21  阅读:227  来源: 互联网

标签:传参 test1 begin setup param 用例 case time print


pytest前置钩子(setup)与用例之间互相传参

  1. 方法一:
import pytest
import time

@pytest.fixture()
def setup(request):
    begin_time = time.time()
    print('param from case: %s' % request.param)
    return begin_time

@pytest.mark.parametrize('setup',[1,5], indirect=True)  #indirect 把setup当作函数执行
@pytest.mark.parametrize('a,b',
                         [(1,5),(3,4)])
def test_param(setup,a,b):
    begin_time = setup
    print('begin_time is: ', begin_time)
    print('param_a', a)
    print('param_b', b)

执行结果:

Launching pytest with arguments test1.py::test_param --no-header --no-summary -q in D:\pythontest

============================= test session starts =============================
collecting ... collected 4 items

test1.py::test_param[1-5-1] param from case: 1
PASSED                                       [ 25%]begin_time is:  1659103133.1927586
param_a 1
param_b 5

test1.py::test_param[1-5-5] param from case: 5
PASSED                                       [ 50%]begin_time is:  1659103133.1967208
param_a 1
param_b 5

test1.py::test_param[3-4-1] param from case: 1
PASSED                                       [ 75%]begin_time is:  1659103133.2007089
param_a 3
param_b 4

test1.py::test_param[3-4-5] param from case: 5
PASSED                                       [100%]begin_time is:  1659103133.2037005
param_a 3
param_b 4


============================== 4 passed in 0.02s ==============================

Process finished with exit code 0

方法二:发现了cache的使用,进一步优化(如果是多个用例文件共用setup,则可以把setup添加至conftest)

import pytest
import time

@pytest.fixture()
def setup(cache, request):
    begin_time = time.time()
    print('param from case: %s' % request.param)
    cache.set('begin_time', begin_time)
    # return begin_time
    yield
    print('after case')
    print(cache.get('a',default='haha'))
    print(cache.get('b',default='haha'))
    print(cache.get('my_dict',default='haha'))


@pytest.mark.parametrize('setup',[1,5], indirect=True)
@pytest.mark.parametrize('a,b',
                         [(1,5),(3,4)])
def test1_param(cache,setup,a,b):
    begin_time = cache.get('begin_time','haha')
    print('begin_time is: ', begin_time)
    print('param_a', a)
    print('param_b', b)
    cache.set('a', a)
    cache.set('b', b)
    cache.set('my_dict', {1:2, 2:'heihei'})


if __name__ == '__main__':
     pytest.main(['-sv', 'test1.py'])

执行结果:

============================= test session starts =============================
collecting ... collected 4 items

test1.py::test1_param[1-5-1] param from case: 1
PASSED                                      [ 25%]begin_time is:  1659190713.9223804
param_a 1
param_b 5
after case
1
5
{'1': 2, '2': 'heihei'}

test1.py::test1_param[1-5-5] param from case: 5
PASSED                                      [ 50%]begin_time is:  1659190713.9303615
param_a 1
param_b 5
after case
1
5
{'1': 2, '2': 'heihei'}

test1.py::test1_param[3-4-1] param from case: 1
PASSED                                      [ 75%]begin_time is:  1659190713.9403338
param_a 3
param_b 4
after case
3
4
{'1': 2, '2': 'heihei'}

test1.py::test1_param[3-4-5] param from case: 5
PASSED                                      [100%]begin_time is:  1659190713.9483128
param_a 3
param_b 4
after case
3
4
{'1': 2, '2': 'heihei'}


============================== 4 passed in 0.04s ==============================

Process finished with exit code 0

 

标签:传参,test1,begin,setup,param,用例,case,time,print
来源: https://www.cnblogs.com/amber10086/p/16560178.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有