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

news2024/11/27 22:30:41

目录

 前言:

一、框架介绍

本框架包含两个部分:

本框架的构建目标是:

二、框架目录结构

三、规范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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/551082.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最佳实践,高效编写Web自动化测试强制交互方法封装技巧

目录 前言: 一、Web自动化测试的基本原理 二、封装强制交互方法 1、输入框强制交互 2、其他强制交互 三、封装基础类方法 四、总结 前言: Web自动化测试是现代软件开发中必不可少的部分。Web自动化测试可以帮助测试人员快速地验证页面功能并发现潜…

Fiddler 抓包工具下载安装基本使用(详)

在做软件测试或者Bug定位的时候会用到一些抓包工具,当然抓包工具还要一些其他用途可以做一些API的抓取,那么本篇内容就来讲 Fiddler 抓包工具的下载安装以及如何来实际的应用。讲了这些可能有的读者还不知道这个"Fiddler"怎么读呢?…

详解flutter刷新流程,让你的应用更流畅

本文已授权公众号【缦图技术团队】发布 详解flutter刷新流程,让你的应用更流畅 一、概述 Flutter 是谷歌推出的高性能、跨端UI框架,可以通过一套代码,支持 iOS、Android、Windows/MAC/Linux 等多个平台,且能达到原生性能。Flutte…

pthread_getspecific和pthread_setspecific详解

写在前面 在Linux系统中使用C/C进行多线程编程时,我们遇到最多的就是对同一变量的多线程读写问题,大多情况下遇到这类问题都是通过锁机制来处理,但这对程序的性能带来了很大的影响,当然对于那些系统原生支持原子操作的数据类型来…

【CV】Yolov8:ultralytics目标检测、关键点检测、语义分割

note Yolov8提供了一个全新的 SOTA 模型,包括 P5 640 和 P6 1280 分辨率的目标检测网络和基于 YOLACT 的实例分割模型。和 YOLOv5 一样,基于缩放系数也提供了 N/S/M/L/X 尺度的不同大小模型,用于满足不同场景需求骨干网络和 Neck 部分可能参…

KVM(一)Linux部署KVM及新建虚拟机

目录 一、准备工作 1.1 防火墙、SElinux 二、安装KVM 2.1 yum源 2.2 安装工具包 2.3 安装KVM组件 2.4 查看磁盘/新建目录 2.5 安装Linux GUI可视化界面 三、KVM桌面版新建虚拟机 3.1 挂载目录 3.2 新建raw/qcow2文件 3.3 新建虚拟机 3.4 KVM命令行新建虚拟机 一、…

Linux rootfs

前言 通过《initrd&init进程》我们知道rootfs 是文件系统的根目录,其包含了操作系统所需的所有文件和目录,包括程序、库文件、配置文件、设备文件等,它是系统启动时必须加载的文件系统之一。当系统启动后,内核会首先挂载 roo…

本地Jrebel 许可服务器搭建

一、下载 下载 JrebelLicenseServer.zip 二、解压 解压后进入 bin 目录 三、服务安装|启动|停止|删除|... 安装服务:JrebelLicenseServer.bat install启动服务:JrebelLicenseServer.bat start停止服务:JrebelLicenseServer.bat stop删除服…

【Three.js】第一、二章 入门指南和基础知识

01.介绍 Three.js 非常庞大,你可以用它做无数的事情。 在第一章中,我们将学习所有基础知识,例如创建第一个场景、渲染、添加对象、选择正确的材料、添加纹理、为所有内容制作动画,甚至将其放到网上。有些人可能会觉得这部分有点…

如何轻松掌握接口测试——POST请求和COOKIE使用技巧?

目录 引言 请求方法: POST请求方法:添加资源(对服务端已存在的资源也可以做修改和删除操作) 实战练习 实战练习2 COOKIE: Status Code:协议状态码 接口文档 结语 引言 对于初学者或者没有接口测试…

[笔记]渗透测试工具Burpsuit《一》Burpsuit介绍

文章目录 前言一、安装配置1.1 环境1.2 安装过程1.3 科技过程 二、常用功能2.1 Manual penetration testing features2.2 Advanced/custom automated attacks2.3 Automated scanning for vulnerabilities2.4 Productivity tools2.5 Extensions 三、拓展功能 前言 Burp Suite(b…

设计原则-单一职责原则

在编程大环境中,评价代码组织方式质量的好坏涉及到各个方面,如代码的可读性、可维护性、可复用性、稳定性等各个方面。而在面向对象语言中也可以通过以下各个方面: 类中方法的设计类中属性的设计类(接口、抽象类、普通类)的设计类与类之间的…

IMU 积分进行航迹推算

IMU 积分进行航迹推算 Reference https://github.com/gaoxiang12/slam_in_autonomous_driving 1.0 递推方程推导 \quad 连续时间内的 IMU 运动学方程: R ˙ R ω ∧ q 1 2 q ω ˙ p ˙ v v ˙ a \dot{\mathbf{R}}\mathbf{R}\omega ^{\wedge} \\ \dot{\mathbf{…

[CTF/网络安全] 攻防世界 weak_auth 解题详析

[CTF/网络安全] 攻防世界 weak_auth 解题详析 弱认证弱认证绕过方法姿势Burp Suite 爆破 总结 题目描述:小宁写了一个登陆验证页面,随手就设了一个密码。 弱认证 weak_auth翻译:弱认证 这个术语通常用来描述一种较弱的安全认证方法或机制&am…

HTML语法、常用标签、表单,CSS选择器。简单登录页面的实现

HTML和CSS粗略介绍 文章目录 HTML和CSS粗略介绍HTML页面第一个HTML页面添加图片和视频 HTML语法规范div标签span标签转义字符 HTML常用标签换行和分割线标题超链接列表元素表格 HTML表单输入框和按钮多行文本 CSS样式CSS选择器input标签选择器id选择器类选择器 组合选择器和优先…

【HackTheBox Bagel】打靶记录

一、namp扫描到5000 8000 22 端口 二、访问8000端口,看到跳转到域名bagel.htb,加入到hosts 看到该url 像文件包含,尝试fuzz一波 尝试找公私钥均未果,找到了cmdline 进一步对其包含 HTTP/1.1 200 OK Server: Werkzeug/2.2.2 …

Java多线程异常处理

文章目录 一. 线程中出现异常的处理1. 线程出现异常的默认行为2. setUncaoughtExceptionHandler()方法处理异常3. setDefaultUncaoughtExceptionHandler()方法进行异常处理 二. 线程组内出现异常 一. 线程中出现异常的处理 1. 线程出现异常的默认行为 当单线程中初出现异常时…

工业缺陷检测数据及代码(附代码)

介绍 目前,基于机器视觉的表面缺陷检测设备已广泛取代人工视觉检测,在包括3C、汽车、家电、机械制造、半导体与电子、化工、制药、航空航天、轻工等多个行业领域得到应用。传统的基于机器视觉的表面缺陷检测方法通常采用常规图像处理算法或人工设计的特征加分类器。一般而言…

【Tomcat下载及使用说明】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 1.什么是Tomcat 2.Tomcat下载流程及注意问题 …

Eclipse将代码收缩if/for/try,支持自定义区域收缩

Hi, I’m Shendi Eclipse将代码收缩if/for/try,支持自定义区域收缩 最近忙于给网站增加功能,在使用 Eclipse 编写 Java 代码时发现一个函数内代码过多,并且 if,for,try这种代码块无法收缩(在IDEA&#xff0…