pytest——test case之间参数传递

前言

我们在做接口自动化测试的时候,会经常遇到这种场景:接口A的返回结果中的某个字段,是接口B的某个字段的入参。如果是使用postman,那我们可以通过设置后置变量,然后在需要使用的地方通过{{}}的方式来进行调用。但是如果是使用自己写的测试框架中要如何实现呢?我想到的是如下三种方法。

首先说明一下,以下三种方式均是通过python + pytest来实现的

一、通过conftest创建全局变量

conftest.py文件是pytest框架中很有用的一个东西,首先看下官方文档中的解释:

大概意思就是说,conftest.py文件供整个用例目录(conftest.py文件可以有多个,并且只在当前package下生效)使用而无需导入,也就是说在用例目录是conftest中的信息是公用的,例如:

a/conftest.py:
     def pytest_runtest_setup(item):
         # called for running each test in 'a' directory
         print("setting up", item)
    
a/test_sub.py:
     def test_sub():
         pass
    
test_flat.py:
     def test_flat():
         pass

运行后的结果:

pytest test_flat.py --capture=no # will not show "setting up"

pytest a/test_sub.py --capture=no # will show "setting up"

而我们就可以通过conftest + fixture函数来实现我们想要的效果了,具体代码如下:

# conftest.py
    
# 定义一个全局变量,用于存储内容
global_data = {}
    
@pytest.fixture
def set_global_data():
     """
     设置全局变量,用于关联参数
     :return:
     """
    
     def _set_global_data(key, value):
         global_data[key] = value
    
     return _set_global_data
    
@pytest.fixture
def get_global_data():
     """
     从全局变量global_data中取值
     :return:
     """
    
     def _get_global_data(key):
         return global_data.get(key)
    
     return _get_global_data

简单说一下实现逻辑:

  1. 首先定义一个变量global_data用于接收存储用例返回的结果
  2. set_global_data和get_global_data两个fixture方法顾名思义,set方法是往global_data中存数据,get方法是从global_data中取数据

方法实现了,具体应该怎么使用呢?如下:

# test_get_set.py
    
import requests
import pytest
    
    
    
def test_set(set_global_data):
     res = requests.get("http://www.baidu.com")
     status_code = res.status_code
     logger.info(f"请求返回状态码:{status_code}")
     set_global_data("status_code", status_code)
    
    
def test_get(get_global_data):
     data = get_global_data("status_code")
     logger.info(f'通过get_global_data方法获取的值:{data}')
    
    
if __name__ == '__main__':
     pytest.main(['-sv', 'test_get_set.py'])

返回结果:

test_get_set.py::test_set PASSED

2021-12-24 17:58:37.642 | INFO | cases.test_get_set:test_set:19 - 请求返回状态码:200

2021-12-24 17:58:37.643 | INFO | cases.test_get_set:test_get:25 - 通过get_global_data方法获取的值:200

test_get_set.py::test_get PASSED

============================== 2 passed in 0.06s ===============================

通过这种方式,便实现了用例间的参数传递问题。

在实际工作中,因为涉及到的接口、用例会很多,所以可以根据需要使用不同的conftest进行管理。并且存储的数据结构也需要进行规范区分,如使用方法名作为字典的key。

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值