pytest 接口串联场景

 

在编写接口测试时,如果有多个接口需要串联在一起调用,并且这些接口共同构成了一个业务场景,通常可以使用以下几种方法来组织代码,使其更具可读性和维护性。以下是一些规范的建议:

1. 使用 pytest 的 fixture 来管理接口依赖

pytest 的 fixture 非常适合管理测试中的依赖关系。你可以为每个接口调用创建一个 fixture,然后将这些 fixture 串联起来。

2. 使用函数或类来组织接口调用

为了使代码更具可读性和可维护性,可以将每个接口的调用封装到函数中,并在测试用例中按顺序调用这些函数。

#!/usr/bin/env python
import pytest
from src.utils.request_util import post
from logs.test import api_log

# 假设有10个接口,我们分别为每个接口定义一个调用函数

def login():
    url = 'login'
    data = {
        'username': '139ccc990002',
        'password': '123cc6'
    }
    res = post(url=url, data=data, info=False)
    api_log(info=res, level="INFO")
    assert res.status_code == 200, f"Login failed with status code {res.status_code}"
    return res.json()

def get_user_info(token):
    url = 'getUserInfo'
    headers = {
        'Authorization': f'Bearer {token}'
    }
    res = post(url=url, headers=headers, info=False)
    api_log(info=res, level="INFO")
    assert res.status_code == 200, f"Get user info failed with status code {res.status_code}"
    return res.json()

def update_user_info(token, new_data):
    url = 'updateUserInfo'
    headers = {
        'Authorization': f'Bearer {token}'
    }
    res = post(url=url, headers=headers, data=new_data, info=False)
    api_log(info=res, level="INFO")
    assert res.status_code == 200, f"Update user info failed with status code {res.status_code}"
    return res.json()

# 其他接口函数...

# 场景测试:假设场景是登录 -> 获取用户信息 -> 更新用户信息
def test_scenario():
    # Step 1: 登录获取 token
    token_info = login()
    token = token_info.get('token')

    # Step 2: 使用 token 获取用户信息
    user_info = get_user_info(token)
    user_id = user_info.get('user_id')

    # Step 3: 更新用户信息
    new_data = {
        'user_id': user_id,
        'new_field': 'new_value'
    }
    update_result = update_user_info(token, new_data)
    
    # 断言更新成功
    assert update_result.get('success'), "Update user info failed"

# 如果需要在多个场景中共享某些数据,可以使用 pytest fixture
@pytest.fixture
def token():
    # 登录获取 token
    return login().get('token')

def test_get_user_info(token):
    # 使用 fixture 提供的 token 获取用户信息
    user_info = get_user_info(token)
    assert user_info.get('user_id'), "User ID not found"

# 其他测试用例...

if __name__ == '__main__':
    pytest.main(['test_login.py'])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值