手把手教你如何从零开始搭建一套基于python+pytest的接口自动化测试框架

嗨,大家好,我是兰若姐姐,今天满满的都是干货。分享一套成熟框架,下面是一个基于Python的接口自动化测试框架的完整目录结构和代码示例。

目录结构

api_test_framework/
├── config/
│   ├── config.py
├── data/
│   ├── test_data.json
├── libs/
│   ├── __init__.py
│   ├── request_handler.py
├── logs/
│   ├── test.log
├── reports/
│   ├── report.html
├── testcases/
│   ├── __init__.py
│   ├── test_sample.py
├── utils/
│   ├── __init__.py
│   ├── logger.py
├── .gitignore
├── conftest.py
├── pytest.ini
├── requirements.txt
└── run_tests.py

文件和代码

config/config.py

import os

class Config:
    BASE_URL = "<https://api.example.com>"
    TIMEOUT = 30

    @staticmethod
    def get_env_variable(name, default=None):
        return os.getenv(name, default)

data/test_data.json

{
    "test_case_1": {
        "endpoint": "/endpoint1",
        "method": "GET",
        "headers": {
            "Authorization": "Bearer sampletoken"
        },
        "params": {
            "param1": "value1"
        },
        "expected_status": 200,
        "expected_response": {
            "key": "value"
        }
    }
}

libs/request_handler.py

import requests
from config.config import Config

class RequestHandler:

    @staticmethod
    def send_request(method, endpoint, headers=None, params=None, data=None):
        url = f"{Config.BASE_URL}{endpoint}"
        try:
            response = requests.request(method, url, headers=headers, params=params, data=data, timeout=Config.TIMEOUT)
            return response
        except requests.exceptions.RequestException as e:
            print(f"Request failed: {e}")
            return None

utils/logger.py

import logging

def setup_logger(name, log_file, level=logging.INFO):
    formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
    handler = logging.FileHandler(log_file)
    handler.setFormatter(formatter)

    logger = logging.getLogger(name)
    logger.setLevel(level)
    logger.addHandler(handler)

    return logger

logger = setup_logger('api_test_logger', 'logs/test.log')

testcases/test_sample.py

import pytest
import json
from libs.request_handler.py import RequestHandler

def load_test_data(file_path):
    with open(file_path, 'r') as file:
        return json.load(file)

test_data = load_test_data('data/test_data.json')

@pytest.mark.parametrize("case", test_data.values(), ids=test_data.keys())
def test_api(case):
    response = RequestHandler.send_request(
        method=case['method'],
        endpoint=case['endpoint'],
        headers=case.get('headers'),
        params=case.get('params')
    )

    assert response.status_code == case['expected_status']
    assert response.json() == case['expected_response']

conftest.py

import pytest
from utils.logger import logger

@pytest.fixture(scope='session', autouse=True)
def setup_and_teardown():
    logger.info("Test session started")
    yield
    logger.info("Test session ended")

pytest.ini

[pytest]
addopts = --maxfail=2 --strict-markers
log_cli = 1
log_cli_level = INFO

requirements.txt

requests
pytest

run_tests.py

import pytest

if __name__ == "__main__":
    pytest.main(['-v', '--html=reports/report.html'])

.gitignore

*.pyc
__pycache__/
logs/
reports/

这样搭建的接口自动化测试框架具有配置管理、日志记录、测试数据管理和测试报告生成等功能,可以帮助团队更高效地进行接口测试。

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值