您现在的位置是:首页 >学无止境 >打造高效接口自动化框架,YAML测试用例封装技巧大揭秘!网站首页学无止境

打造高效接口自动化框架,YAML测试用例封装技巧大揭秘!

自动化测试码元 2024-06-17 11:27:56
简介打造高效接口自动化框架,YAML测试用例封装技巧大揭秘!

目录

 前言:

一、框架介绍

本框架包含两个部分:

本框架的构建目标是:

二、框架目录结构

三、规范YAML测试用例封装步骤

四、框架使用

五、总结


前言:

本文介绍了一个基于Python和PyTest的接口自动化框架封装项目实战,重点是如何规范YAML测试用例的封装。在这个项目中,我们将介绍如何使用PyTest和YAML文件来管理和执行接口测试用例,并结合Python编写的封装HTTP请求的库进行测试用例执行,从而实现一个简单易用的接口自动化测试框架。

一、框架介绍

本框架包含两个部分:

1. PyTest测试框架:PyTest是Python中非常流行的一个测试框架,它非常容易上手,支持自定义的fixture、测试用例的参数化等,能够满足大多数测试需求。使用PyTest可以提高测试的可读性、可运行性和可维护性。

2. 封装HTTP请求的库:本框架使用Python requests库来封装HTTP请求,它是Python中常用的HTTP库,使用方便,提供了多种发送HTTP请求的方式,可以轻松地实现GET、POST、PUT、DELETE等HTTP请求。

本框架的构建目标是:

1. 提高测试用例的可读性和可维护性;
2. 优化测试用例的运行效率;
3. 封装HTTP请求,让测试用例的编写变得更加简单。

二、框架目录结构

1. tests目录:用于存放测试用例;

2. common目录:封装了HTTP请求的代码和其他共享的辅助代码;

3. config目录:存放配置文件;

4. report目录:存放测试报告,以HTML格式生成。

三、规范YAML测试用例封装步骤

本框架使用YAML文件来管理和执行测试用例,YAML文件是一种简单的文本格式,易于阅读和编写。下面是实现规范的YAML测试用例封装的步骤:

1. 编写config.py文件,定义基础url等配置参数

class Config:
    base_url = 'http://127.0.0.1:5000'

2. 编写封装HTTP请求的库common/http_request.py,使用requests库封装HTTP请求和响应

import requests

class HTTPRequest:

    def __init__(self, url, method, headers=None, params=None, json=None, data=None, files=None):
        self.response = None

        if method.upper() == 'GET':
            self.response = requests.get(url, headers=headers, params=params)
        elif method.upper() == 'POST':
            self.response = requests.post(url, headers=headers, json=json, data=data, files=files)
        elif method.upper() == 'PUT':
            self.response = requests.put(url, headers=headers, json=json, data=data, files=files)
        elif method.upper() == 'DELETE':
            self.response = requests.delete(url, headers=headers, json=json, data=data, files=files)

        # 不同的报错信息打印不同的内容
        try:
            self.response.raise_for_status()
        except requests.exceptions.HTTPError:
            print(f"HTTP请求返回码错误,错误码为{self.response.status_code}")
        except requests.exceptions.Timeout:
            print("HTTP请求超时")
        except requests.exceptions.ConnectionError:
            print("HTTP请求连接失败")

    def json(self):
        return self.response.json()

    def text(self):
        return self.response.text

 3. 编写common/utils.py文件,定义一些共用的方法,比如日志输出、响应结果断言等

import logging

class Assert:

    @staticmethod
    def assert_code(response, expected_code):
        try:
            assert response.status_code == expected_code
        except AssertionError:
            logging.error(f"预期结果为 {expected_code}, 实际结果为 {response.status_code}")
            raise

    @staticmethod
    def assert_in_text(response, expected_str):
        try:
            assert expected_str in response.text
        except AssertionError:
            logging.error(f"string:{expected_str} not in {response.text}")
            raise

def get_logger():
    logger = logging.getLogger(__name__)
    logger.setLevel(logging.DEBUG)

    handler = logging.StreamHandler()
    handler.setLevel(logging.DEBUG)

    formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
    handler.setFormatter(formatter)

    logger.addHandler(handler)

    return logger

4. 编写tests/conftest.py文件,定义pytest fixture

import pytest
from common.http_request import HTTPRequest
from config.config import Config

@pytest.fixture(scope='session')
def url():
    return Config.base_url

@pytest.fixture(scope='session')
def http():
    return HTTPRequest

5. 编写测试用例YAML文件,以下是一个简单的例子:

- testcase: "测试获取产品列表API"
  url: "/api/products"
  method: "GET"
  params:
    current_page: 1
    page_size: 10
  expect:
    - code: 200
    - in_text: "成功"

6. 编写tests/test_products.py文件,测试用例文件

import pytest
import allure
from common.utils import get_logger, Assert
from config.config import Config

@pytest.mark.usefixtures("http", "url")
class TestProducts:

    @allure.title("测试获取产品列表API")
    @pytest.mark.smoke
    def test_get_products(self, http, url):
        case_path = Config.test_data_path.joinpath("get_products.yml")
        # 读取YAML测试用例
        case = http.load_yaml(case_path)

        # 发送HTTP请求
        response = http(url=url+case['url'], method=case['method'], params=case['params'])

        # 响应结果断言
        Assert.assert_code(response, case['expect'][0]['code'])
        Assert.assert_in_text(response, case['expect'][1]['in_text'])

7. 编写common/http_request.py文件中的load_yaml方法,用于从YAML文件中读取测试用例

import yaml

class HTTPRequest:

    ...

    @staticmethod
    def load_yaml(file_path):
        with open(file_path, encoding='utf-8') as f:
            test_data = yaml.safe_load(f)
        return test_data

四、框架使用

在项目根目录下运行以下命令:

1. 安装必要的Python库

pip install -r requirements.txt

2. 执行测试用例

pytest --html=./report/report.html

运行成功后,在report目录下会生成测试报告。

五、总结

本文介绍了一个基于Python和PyTest的接口自动化框架封装项目实战,主要介绍了如何规范YAML测试用例的封装。

该框架具有以下几个优点:

1. 提高测试用例的可读性和可维护性;
2. 优化测试用例的运行效率;
3. 封装HTTP请求,让测试用例的编写变得更加简单。

但是该框架也存在一些缺点,比如使用YAML文件来管理和执行测试用例的时候有一定的入门门槛,需要花费一定的时间和精力去学习。

总体来说,该框架非常适用于中小型接口自动化测试项目,可快速构建一个简单易用的接口自动化测试框架。

 作为一位过来人也是希望大家少走一些弯路,在这里我给大家分享一些自动化测试的经验必须品,如果你用得到的话可以直接拿走,希望能对你带来帮助。(包括Python编程、WEB自动化测试、app自动化测试、接口自动化测试、持续集成、自动化测试开发、性能测试、安全测试、大厂面试真题、简历模板等等),相信能使你更好的进步!

获取方式:留言【自动化测试】即可获取
【自动化测试交流】:574737577(进群备注ccc)icon-default.png?t=N4HBhttp://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=Dp4NVlFJbLm9cvGksiqeMjMqUah9R5dO&authKey=IUKh2O1tDD1pJQwar9eC6X%2BC9Fgmzyg%2FwoITLtMgqEkcmCHhr6lM8kL3o8dS6vSu&noverify=0&group_code=574737577

 

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。