接口自动化测试框架设计:数据驱动、Page Object、单例模式实战

news/2025/3/15 1:02:09/

 B站首推!2023最详细自动化测试合集,小白皆可掌握,让测试变得简单、快捷、可靠https://www.bilibili.com/video/BV1ua4y1V7Db

 目录

一、前言

二、设计模式

2.1 数据驱动测试模式

2.2 Page Object 模式

2.3 单例模式

三、代码实现

四、总结


一、前言

在软件开发过程中,测试是一个非常必要的环节。而随着互联网技术的不断发展,Web API 的应用越来越广泛,对 Web API 接口进行测试也就成为了重要的一环。因此,如何优秀地进行接口自动化测试就显得尤为重要。

本文将从接口自动化测试的角度出发,介绍一些设计模式,以及如何通过这些设计模式来提高接口自动化测试的效率和可维护性。

二、设计模式

2.1 数据驱动测试模式

数据驱动测试模式是指使用外部数据源(如 Excel 文件、数据库等)来驱动测试用例的执行。采用数据驱动测试模式,可以大大减少测试用例的编写量,并且使测试用例更加易于维护。下面是一个示例:

# testdata.xlsx
| CaseName | Url                   | Method | Headers | Body |
|----------|-----------------------|--------|---------|------|
| login    | https://example.com/login | POST   | token=xxx|{"username":"test","passwor":"123456"}|# test.py
import openpyxl
import requestsdef run_testcase(case_name, url, method, headers, body):response = requests.request(method, url, headers=headers, json=body)assert response.status_code == 200if __name__ == '__main__':wb = openpyxl.load_workbook('testdata.xlsx')sheet = wb.activefor row in sheet.iter_rows(min_row=2):data = [cell.value for cell in row]run_testcase(*data)

2.2 Page Object 模式

Page Object 模式是指将页面的元素抽象封装为一个类,用来描述该页面及其操作。在接口自动化测试中,我们可以将接口请求和响应的相关参数抽象为一个类,以便于代码的复用和维护。下面是一个示例:

class LoginApi:def __init__(self, url, headers):self.url = urlself.headers = headersdef login(self, username, password):body = {"username": username,"password": password}response = requests.post(self.url, headers=self.headers, json=body)return response.json()

2.3 单例模式

单例模式是指保证一个类只有一个实例,并提供一个全局访问点。在接口自动化测试中,我们经常需要用到共享资源(如数据库连接池、配置信息等),这时候单例模式就非常有用了。下面是一个示例:

class Singleton:_instance = Nonedef __new__(cls):if cls._instance is None:cls._instance = super().__new__(cls)return cls._instanceclass Database(Singleton):connection_pool = []def __init__(self, db_url):self.db_url = db_urlself.connect()def connect(self):connection = create_connection(self.db_url)self.connection_pool.append(connection)

三、代码实现

下面是一个完整的接口自动化测试框架示例,其中包含了上述三种设计模式的应用。

config.py 文件用于存放配置信息:

class Config:db_url = 'mysql://user:password@localhost/testdb'api_host = 'https://example.com/api'api_headers = {'Authorization': 'Bearer xxx'}

database.py 文件实现了单例模式,用于连接数据库并保证只有一个实例:

import mysql.connector
from singleton import Singletonclass Database(Singleton):connection_pool = []def __init__(self, db_url):self.db_url = db_urlself.connect()def connect(self):connection = mysql.connector.connect(url=self.db_url)self.connection_pool.append(connection)

api.py 文件实现了 Page Object 模式,定义了 LoginApi 类来处理登录接口请求和响应:

import requests
from page_object import PageObjectclass LoginApi(PageObject):def __init__(self, url=None, headers=None):super().__init__(url=url, headers=headers)def login(self, username, password):body = {"username": username,"password": password}response = requests.post(self.url + '/login', headers=self.headers, json=body)return response.json()

testcase.py 文件中实现了数据驱动测试模式,从外部数据源(如 Excel 文件)读取测试数据,并使用 unittest 框架编写测试用例:

import unittest
import openpyxl
from config import Config
from api import LoginApi
from database import Databaseclass TestLogin(unittest.TestCase):@classmethoddef setUpClass(cls):cls.api = LoginApi(url=Config.api_host, headers=Config.api_headers)cls.db = Database(db_url=Config.db_url)def test_login_success(self):# 从数据源中读取测试数据wb = openpyxl.load_workbook('testdata.xlsx')sheet = wb['login']data = [cell.value for cell in sheet[2]]username, password = data[1], data[2]# 调用接口进行登录response = self.api.login(username, password)user_id = response['user_id']# 验证数据库中是否存在该用户cursor = self.db.connection_pool[0].cursor()query = f"SELECT * FROM users WHERE id='{user_id}'"cursor.execute(query)result = cursor.fetchone()self.assertIsNotNone(result)if __name__ == '__main__':unittest.main()

 以上是一个简单的接口自动化测试框架示例,其中包含了数据驱动测试模式、Page Object 模式和单例模式的应用。这些设计模式能够提高接口自动化测试的效率和可维护性,使我们能够更加轻松地进行接口自动化测试。

四、总结

本文介绍了接口自动化测试中常用的三种设计模式:数据驱动测试模式、Page Object 模式和单例模式,并通过具体的代码示例展示了如何应用这些设计模式来提高接口自动化测试的效率和可维护性。这些设计模式不仅可以减少测试用例编写量,还能使测试用例更加易于维护,并且能够优化共享资源(如数据库连接池、配置信息等)的使用方式。希望本文对您在接口自动化测试方面有所启发。

 自动化测试学习步骤结构图:

自动化测试福利:


http://www.ppmy.cn/news/61677.html

相关文章

Redis基础

🥲 🥸 🤌 🫀 🫁 🥷 🐻‍❄️🦤 🪶 🦭 🪲 🪳 🪰 🪱 🪴 🫐 🫒 🫑…

如何让任何小程序都支持在windows系统中打开?

随着小程序的发展,出现了越来越多小程序在PC端打开的需求。很多程序员同行都想了解:小程序支持在windows系统、mac、统信UOS等桌面操作系统中打开吗? 答案当然是:可以! 本文就基于作者自身的经验,给大家介…

菜鸡shader2:L2基于BlinnPhong假环境反射,生锈材质

目录 假环境反射材质(不锈钢材质)生锈材质 假环境反射材质(不锈钢材质) 先放上最终图: 处理高光部分: 这里是phong模型不是blinnphong。应用观察方向的反射方向和光方向点乘算出高光,然后重…

UDS入门

UDS(Unified Diagnostic Services,统一诊断服务)是一种国际标准的汽车诊断通信协议。它定义了汽车电子控制单元(Electronic Control Unit,简称ECU)与诊断设备之间进行故障诊断、编程和测试的通信过程。UDS协…

k8s笔记25--k8s 跨主机网络flannel

k8s笔记25-- k8s 跨主机网络flannel 简介不同机器上网络设备区别flannel 网络常见三大后端模式UDPVXLANhost-gw 如何查看集群用哪种网络模式阿里云flannel容器网络 alloc参考文档 简介 在单机环境下,容器间可以通过 docker0 网桥来通信,但其无法实现不同…

jdk8和jdk17同时存在时的【环境配置】

一、先进行环境下载: jdk8:https://www.oracle.com/cn/java/technologies/javase/javase8u211-later-archive-downloads.html jdk17:https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html PS:jdk8在下载结束,安装…

Python | 人脸识别系统 — 人脸比对 代码部分

本博客为人脸识别系统的人脸比对代码解释 人脸识别系统博客汇总:人脸识别系统-博客索引 项目GitHub地址:Su-Face-Recognition: A face recognition for user logining 注意:阅读本博客前请先参考以下博客 工具安装、环境配置:人脸…

【genius_platform软件平台开发】第九十七讲:常见Visual Studio版本号对应表VisualStudioVersion

1. sln文件格式 使用记事本打开.sln文件, 从一个外行角度看,VC/VS有3种版本号,具备一定的迷惑性:(xx表示具体的数字) MSVC xx(VC版本 eg. VC6.0) _MSC_VER VisualStudio xx(VS版本 eg. VS2012&#xf…