Python 接口自动化测试框架:Pytest + Allure + YAML + Requests

本指南将带您构建一个基于 Python 的接口自动化测试框架,涵盖 Pytest 用于测试执行、Allure 生成美观报告、YAML 用于管理配置和接口定义、Requests 用于发送 HTTP 请求。

1. 安装依赖库

使用以下命令安装必要的库:

pip install pytest
pip install allure-pytest
pip install pyyaml
pip install requests

2. 创建 conftest.py 文件

conftest.py 文件用于存放测试用例的公共方法和配置信息。

import pytest
import yaml
import requests


@pytest.fixture(scope='session')
def config():
    with open('config.yaml', 'r') as f:
        config = yaml.safe_load(f)
    return config


@pytest.fixture(scope='session')
def api():
    with open('api.yaml', 'r') as f:
        api = yaml.safe_load(f)
    return api


@pytest.fixture(scope='session')
def session():
    session = requests.Session()
    return session


@pytest.fixture(scope='session')
def headers(api):
    headers = api['headers']
    return headers


def api_request(session, method, url, headers=None, params=None, data=None, json=None):
    response = session.request(method=method, url=url, headers=headers, params=params, data=data, json=json)
    return response


def api_get(session, url, headers=None, params=None):
    response = api_request(session=session, method='GET', url=url, headers=headers, params=params)
    return response


def api_post(session, url, headers=None, data=None, json=None):
    response = api_request(session=session, method='POST', url=url, headers=headers, data=data, json=json)
    return response

解释:

  • config:读取 config.yaml 文件,包含基础配置信息,例如接口地址、用户名、密码等。
  • api:读取 api.yaml 文件,包含接口定义,例如接口地址、请求方法、请求头等。
  • session:创建 requests.Session 对象,用于管理 HTTP 请求会话。
  • headers:从 api 中获取默认请求头信息。
  • api_request:通用请求方法,支持各种 HTTP 方法,并返回响应对象。
  • api_get:简化 GET 请求的调用。
  • api_post:简化 POST 请求的调用。

3. 创建 config.yaml 文件

base_url: 'https://api.example.com'
username: 'admin'
password: '123456'

4. 创建 api.yaml 文件

headers:
  Content-Type: 'application/json'
  Authorization: 'Bearer xxxxxxxx'

users:
  - name: 'get_user'
    url: '/users/{user_id}'
    method: 'GET'

  - name: 'create_user'
    url: '/users'
    method: 'POST'

  - name: 'update_user'
    url: '/users/{user_id}'
    method: 'PUT'

  - name: 'delete_user'
    url: '/users/{user_id}'
    method: 'DELETE'

5. 创建测试用例文件(例如:test_users.py

import allure
from conftest import *


@allure.feature('用户管理')
class TestUsers:

    @allure.story('获取用户信息')
    @pytest.mark.parametrize('user_id', [1, 2, 3])
    def test_get_user(self, session, headers, api, user_id):
        url = config['base_url'] + api['users'][0]['url'].format(user_id=user_id)
        response = api_get(session=session, url=url, headers=headers)
        assert response.status_code == 200
        assert response.json()['user_id'] == user_id

    @allure.story('创建用户')
    def test_create_user(self, session, headers, api):
        url = config['base_url'] + api['users'][1]['url']
        data = {
            'username': 'test_user',
            'password': '123456'
        }
        response = api_post(session=session, url=url, headers=headers, json=data)
        assert response.status_code == 200
        assert response.json()['username'] == 'test_user'

    @allure.story('更新用户信息')
    @pytest.mark.parametrize('user_id', [1, 2, 3])
    def test_update_user(self, session, headers, api, user_id):
        url = config['base_url'] + api['users'][2]['url'].format(user_id=user_id)
        data = {
            'email': 'test_user@example.com'
        }
        response = api_post(session=session, url=url, headers=headers, json=data)
        assert response.status_code == 200
        assert response.json()['email'] == 'test_user@example.com'

    @allure.story('删除用户')
    @pytest.mark.parametrize('user_id', [1, 2, 3])
    def test_delete_user(self, session, headers, api, user_id):
        url = config['base_url'] + api['users'][3]['url'].format(user_id=user_id)
        response = api_post(session=session, url=url, headers=headers)
        assert response.status_code == 200

解释:

  • 使用 allure.featureallure.story 装饰器为测试用例添加 Allure 标签,用于生成更清晰的报告。
  • pytest.mark.parametrize 用于参数化测试用例,提高测试效率。
  • 使用 api_getapi_post 发送请求,并使用 assert 语句进行断言,确保预期结果。

6. 运行测试并生成报告

pytest --alluredir=./report
allure serve ./report

解释:

  • pytest --alluredir=./report:运行测试用例,并将结果保存到 ./report 目录。
  • allure serve ./report:启动 Allure 报告服务,在浏览器中查看测试报告。

总结

本指南展示了如何使用 Python + Pytest + Allure + YAML + Requests 构建一个接口自动化测试框架。该框架可以帮助您:

  • 组织和管理测试用例。
  • 简化请求发送和响应验证。
  • 生成清晰、可读的测试报告。
  • 提高测试效率和代码可维护性。

请根据您的实际需求进行调整和扩展。

Python 接口自动化测试框架:Pytest + Allure + YAML + Requests

原文地址: https://www.cveoy.top/t/topic/lfkH 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录