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

news2024/11/20 22:38:35

 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 requests

def run_testcase(case_name, url, method, headers, body):
    response = requests.request(method, url, headers=headers, json=body)
    assert response.status_code == 200

if __name__ == '__main__':
    wb = openpyxl.load_workbook('testdata.xlsx')
    sheet = wb.active
    for 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 = url
        self.headers = headers
    
    def 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 = None
    
    def __new__(cls):
        if cls._instance is None:
            cls._instance = super().__new__(cls)
        return cls._instance

class Database(Singleton):
    connection_pool = []

    def __init__(self, db_url):
        self.db_url = db_url
        self.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 Singleton

class Database(Singleton):
    connection_pool = []

    def __init__(self, db_url):
        self.db_url = db_url
        self.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 PageObject

class 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 Database

class TestLogin(unittest.TestCase):
    @classmethod
    def 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.coloradmin.cn/o/491643.html

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

相关文章

小米路由器4A,(R4A千兆版)刷openwrt系统(Linux的一种)

下载系统 第一步下载自己路由器型号的系统固件,https://openwrt.org/toh/views/toh_fwdownload 直接在页面搜索自己路由器品牌找到区域再找到自己的型号对应的,然后选第一个链接是稳定版系统固件,下载后改名为openwrt.bin 固件备用 下载程序 …

Facebook禁止推广的产品,你知道吗?

作为全球最大的社交媒体平台之一,Facebook一直在努力保护广告客户和用户的权益,以及确保平台上的广告内容合法、道德、安全。 在本文中,我们将深入了解Facebook禁止推广的产品,以及为什么它们被禁止。ClonBrowser多账号功能可以通…

Java基础(十七)File类与IO流

1. java.io.File类的使用 1.1 概述 File类及本章下的各种流,都定义在java.io包下。一个File对象代表硬盘或网络中可能存在的一个文件或者文件目录(俗称文件夹),与平台无关。(体会万事万物皆对象)File 能新…

Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)

本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客。当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现。Perfect框架是加拿大一个创业团队开发的,目前是Perfect2.0版本,关于Perfect框架&a…

OpenGL光照教程之 透光物

引言 我们目前使用的所有光照都来自于一个单独的光源,这是空间中的一个点。它的效果不错,但是在真实世界,我们有多种类型的光,它们每个表现都不同。一个光源把光投射到物体上,叫做投光。这个教程里我们讨论几种不同的投…

告别被拒,如何提升iOS审核通过率(上篇)

iOS审核一直是每款移动产品上架苹果商店时面对的一座大山,每次提审都像是一次漫长而又悲壮的旅行,经常被苹果拒之门外,无比煎熬。那么问题来了,我们有没有什么办法准确把握苹果审核准则,从而提升审核的通过率呢&#x…

ESP32-C2开发板简介

C2是一个芯片采用4毫米x 4毫米封装,与272 kB内存。它运行框架,例如ESP-Jumpstart和ESP造雨者,同时它也运行ESP-IDF。ESP-IDF是Espressif面向嵌入式物联网设备的开源实时操作系统,受到了全球用户的信赖。它由支持Espressif以及所有…

PtQt的使用与pycharm的结合

PtQt的使用与pycharm的结合 环境安装 pip install pyqt5 -i https://pypi.tuna.tsinghua.edu.cn/simple # 如果执行成功,没有任何错误提示,则表明环境搭建成功 from PyQt5 import QtWidgets# 当然也可以查看PyQt版本 from PyQt5.QtCore import * print…

Unity之OpenXR+XR Interaction Toolkit实现 移动和转向

一.前言 我们知道,在VR游戏中,我们除了可以通过传送来移动之外,还可以通过手柄的遥感进行移动,那么接下来,我们就介绍一下如果通过XR Interaction Toolkit来实现遥感控制任务移动和旋转 二.准备工作 我们需要准备好…

C. Maximum Subrectangle(思维 + 考察两个数组相乘得到的矩阵的含义)

Problem - C - Codeforces 给定两个正整数数组 a 和 b,长度分别为 n 和 m。 定义矩阵 c 为一个 nm 的矩阵,其中 ci,jai⋅bj。 你需要在矩阵 c 中找到一个子矩形,使得它的元素之和最多为 x,并且它的面积(即元素总数&a…

考pmp有什么好处?

PMP证书报名条件要求高,这是众所周知的事,那你通过了PMP考试,就证明你是有一定能力的,重要的是,你已经有了至少半年的项目管理经验,并且在你申请考试的前六年内,累计项目管理达三年。 PMP有什么…

【Hadoop-Yarn】Yarn的常用命令

【Hadoop-Yarn】Yarn的常用命令 1)查看任务列表2)杀死任务3)查看日志4)根据 Application 状态过滤任务5)查询 Container 日志6)查看尝试运行的任务7)yarn container 查看容器8)yarn …

Conda 安装 OpenCV

1、conda 切换虚拟环境 activate 虚拟环境名称 温馨提示:查询虚拟环境列表 conda env list 2、conda 查看安装源 conda config --show-sources 我本地安装源为: Index of /anaconda/pkgs/free/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 修改c…

Qt音视频开发44-本地摄像头推流(支持分辨率/帧率等设置/实时性极高)

一、前言 本地摄像头推流和本地桌面推流类似,无非就是采集的设备源头换成了本地摄像头设备而不是桌面,其他代码完全一样。采集本地摄像头实时视频要注意的是如果设置分辨率和帧率,一定要是设备本身就支持的,如果不支持那就歇菜&a…

常规项目风险识别的规范流程和方法

一、识别风险输入 识别项目风险,首先需要对项目管理计划、项目文件、协议、采购文档、事业环境因素、组织过程资产等进行风险识别。 项目管理计划是指:需求、进度、成本、质量、资源、风险等管理计划以及范围基准、进度基准、成本基准。而项目文件指&…

普通2本,去过字节外包,到现在年薪25W+的测试开发,我的2年转行心酸经历...

个人简介 我是一个普通二本大学机械专业毕业,17年毕业,19年转行,目前做IT行业的软件测试已经有3年多,职位是高级测试工程师,坐标上海… 我想现在我也有一点资格谈论关于转行这个话题;希望你在决定转行之前…

Python爬虫-xpath方法爬虫技术分享,更高效,代码简洁!

这里写目录标题 一、获取文档树对象二、文本转化文档树对象文件转化文档树对象节点、元素、属性、内容路径表达式通配符谓语多个路径函数实战信息 ↓ ↓ ↓ 加下方名片找我,直接拿源码还有案例 ↓ ↓ ↓ 一、获取文档树对象 通过Xpath 获取文档的对象,获…

matlab定义函数

1新建文件 首先建立M文件或直接点击(File/New/Function)建立函数文件,其中函数文件的格式是: function [输出变量] 函数名称(输入变量) % 注释 % 函数体 2函数语法 2.1基本语法 function yf(x) %函数的声明 yx^2 就是建立了一个y…

边框虚线滚动动画特效

边框线条效果如上 /*边框虚线滚动动画特效*/.border-animate {background: linear-gradient(90deg, gray 60%, transparent 60%) repeat-x left top/10px 1px,linear-gradient(0deg, gray 60%, transparent 60%) repeat-y right top/1px 10px,linear-gradient(90deg, gray 60%,…

今天面了一个来字节要求月薪23K,明显感觉他背了很多面试题...

最近有朋友去字节面试,面试前后进行了20天左右,包含4轮电话面试、1轮笔试、1轮主管视频面试、1轮hr视频面试。 据他所说,80%的人都会栽在第一轮面试,要不是他面试前做足准备,估计都坚持不完后面几轮面试。 其实&…