Python WebSocket自动化测试:构建高效接口测试框架

news2024/9/25 23:24:18

为了更高效地进行WebSocket接口的自动化测试,我们可以搭建一个专门的测试框架。本文将介绍如何使用Python构建一个高效的WebSocket接口测试框架,并重点关注以下四个方面的内容:运行测试文件封装、报告和日志的封装、数据驱动测试以及测试用例与测试数据的隔离。

运行测试文件封装

在构建WebSocket接口测试框架时,我们可以编写一个测试运行器来执行测试文件中的所有测试用例。下面是一个简单的测试运行器示例:

  1. import pytest

  2. def run_tests():

  3. pytest.main(["-s", "-v"])

在测试文件中,我们只需要调用run_tests()函数即可运行所有的测试用例。这样可以提高测试执行的统一性和可维护性。

报告和日志的封装

为了更好地了解测试结果,我们可以使用pytest框架提供的报告和日志功能。以下是一些常用的报告和日志插件:



pytest-html:生成详细的测试报告,包含测试结果和统计信息。

pytest-xdist:支持分布式执行测试用例,提高测试执行速度。

pytest-logger:记录测试执行过程中的日志信息,方便排查问题。

通过安装和配置这些插件,我们可以生成漂亮的测试报告,并记录测试执行过程中的日志,以便后续分析和排查。使用方法如下:

1. pytest-html

pytest-html插件用于生成详细的HTML测试报告。

安装pytest-html插件:

pip install pytest-html

使用方法:

在pytest配置文件中添加以下内容:

  1. # pytest.ini

  2. [pytest]

  3. addopts = --html=report.html

此处将测试报告生成为report.html文件。

执行测试用例时,添加--html选项:

pytest --html=report.html

执行完毕后,将在当前目录下生成report.html文件,即测试报告。

2. pytest-xdist

pytest-xdist插件用于支持分布式执行测试用例,提高测试执行速度。

安装pytest-xdist插件:

pip install pytest-xdist

使用方法:

执行以下命令:

pytest -n NUM

其中,NUM为指定的并发数量,表示同时运行的测试进程数。例如,pytest -n 3表示使用3个进程并发执行测试用例。

3. pytest-logger

pytest-logger插件用于记录测试执行过程中的日志信息。

安装pytest-logger插件:

pip install pytest-logger

使用方法:

在pytest配置文件中添加以下内容:

  1. # pytest.ini

  2. [pytest]

  3. log_cli = true

此处设置log_cli为true,表示在命令行中显示日志信息。

执行测试用例时,将日志信息输出到文件:

pytest --log-file=log.txt

执行完毕后,将在当前目录下生成log.txt文件,即日志文件。

以上就是使用pytest-html、pytest-xdist和pytest-logger插件的基本方法。通过配置和命令行选项,你可以方便地生成测试报告、实现分布式测试以及记录日志信息,提高测试框架的可视化和可扩展性。

3. 数据驱动测试

WebSocket接口的测试常常需要使用不同的数据进行测试。为了提高代码的复用性和可维护性,我们可以使用数据驱动的测试方法。以下是一个使用pytest的数据驱动测试的示例:

import pytest

import websockets

import asyncio

@pytest.mark.parametrize("message", ["Hello", "WebSocket", "Test"])

@pytest.mark.asyncio

async def test_websocket_message(websocket, message):

await websocket.send(message)

received_message = await websocket.recv()

assert received_message == message

# 执行测试用例

pytest.main(["-s", "-v"])

通过@pytest.mark.parametrize装饰器,我们可以将不同的测试数据传递给同一个测试用例,从而实现数据驱动的测试。

4. 测试用例与测试数据的隔离

为了更好地隔离测试用例和测试数据,提高代码的可读性和可维护性,我们可以将测试数据单独存放在一个文件或数据源中,并在测试用例中进行引用。以下是一个简单的示例:


import pytest

import websockets

import asyncio

import json

def load_test_data():

with open("test_data.json", "r") as file:

return json.load(file)

@pytest.fixture(scope="module")

def test_data():

return load_test_data()

@pytest.mark.parametrize("data", test_data())

@pytest.mark.asyncio

async def test_websocket_message(websocket, data):

message = data["message"]

expected_response = data["expected_response"]

await websocket.send(message)

received_message = await websocket.recv()

assert received_message == expected_response

# 执行测试用例

pytest.main(["-s", "-v"])

在上述示例中,我们使用load_test_data()函数从JSON文件中加载测试数据,并通过test_data()装饰器将测试数据传递给测试用例。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

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

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

相关文章

调查显示:超过30 %企业遭受过网络攻击,如何防范?

对于企业来讲,屡禁不止的网络安全攻击始终是阻碍业务发展的重大隐患。调查结果显示,有近8成的企业将网络安全视为企业很重要的工作之一,另外,有超过三成的企业遭受过网络安全攻击。 企业作为网络安全事故的责任承担方,…

synchronized和Lock(ReentrantLock)及二者区别

synchronized 是用于实现线程同步的关键字。它提供了两种主要的方式来保证多个线程访问共享资源时的互斥性和可见性:同步块和同步方法。 同步块 同步块允许你指定一个对象作为锁,并保护一段代码区域。这样,同一时刻只有一个线程可以执行这…

ChatGPT 为什么不建议关闭 MySQL 严格模式?

社区王牌专栏《一问一实验:AI 版》全新改版归来,得到了新老读者们的关注。其中不乏对 ChatDBA 感兴趣的读者前来咨询,表达了想试用体验 ChatDBA 的意愿,对此我们表示感谢 🤟。 目前,ChatDBA 还在最后的准备…

记录一次 npm ERR! cb() never called! 解决过程

gitlab cicd过程,使用docker部署Vue3前端项目,报错如下: 针对 npm ERR! cb() never called! 这个报错,网上有很多解决方案,大都是清空缓存,重新运行npm 之类的。笔者全都试过,无法解决问题。笔者…

linux,docker查看资源消耗总结

在linux和docker中我们将一个程序运行到后台,之后我们想查看它的运行状态,对于服务器的资源消耗等等 1.linux查看进程 ps aux | grep python ps aux:列出所有正在运行的进程。grep python:过滤出包含 python 的进程 2.linux查…

springCloud集成activiti5.22.0流程引擎(分支)

springCloud集成activiti5.22.0流程引擎 点关注不迷路,欢迎再访! 精简博客内容,尽量已行业术语来分享。 努力做到对每一位认可自己的读者负责。 帮助别人的同时更是丰富自己的良机。 文章目录 springCloud集成activiti5.22.0流程引擎一.Sprin…

你知道家电的保质期吗?

家人们,你们有关注过家里的电器用了多少年了吗? “家电不坏,就能一直用。” “坏了修一修,一样能用。” 很多家长都有这样的想法,家里的电器即使出了故障,修一修也就继续用了。 其实,家电也…

打造智能化直播商城平台:AI与大数据在平台开发中的应用

在当今竞争激烈的电商市场中,直播商城平台已经成为品牌和商家实现差异化竞争的重要工具。随着人工智能(AI)和大数据技术的不断进步,智能化直播商城平台的开发成为了行业的新趋势。这些技术不仅可以优化用户体验,还能提…

AI革新体育:IBM携手USTA升级美国公开赛观赛体验

IBM和美国网球协会(USTA)合作,在2024年美国网球公开赛中引入了创新的AI技术,为观众和选手带来全新的体验。8月19日赛事开幕,IBM的watsonx平台将推出多项新功能,增强三周赛事的互动性。 喜好儿网 IBM的Gra…

Prometheus:pushgateway使用

1 项目目标 (1)熟练部署pushgateway (2)使用api增删改查数据 (3)使用python Client SDK Push数据到pushgateway 2.1 规划节点 主机名 主机IP 节点规划 prome-master01 10.0.1.10 服务端 prome-no…

探索PyUSB:Python与USB设备的桥梁

文章目录 探索PyUSB:Python与USB设备的桥梁背景:为何选择PyUSB?什么是PyUSB?如何安装PyUSB?简单的库函数使用方法场景应用常见问题与解决方案总结 探索PyUSB:Python与USB设备的桥梁 背景:为何选…

GD32F470 FREERTOS + lwip UDP丢包问题解决

现象:使用GD32F470Z评估板已经官方FreeRTOSUDP例程测试,使用上位机UDP测试工具,连续收发UDP数据包,每发送65535次数据,第65536包数据就会丢。如下图所示: 测试了很多次,都是在65536的时候停了&a…

NVR方案背景与产品介绍与构建一套完整的NVR产品解决方案

一、NVR和DVR 在视频监控领域,DVR和NVR是两种常用的录像技术。它们在系统结构、视频处理、存储和访问方式等方面存在明显的区别。,但都在视频监控中扮演着重要的角色。首先来了解它们的区别和特点,这有助于在选择合适的设备时做出明智的决策…

HDMI切换器(2进1,1进2,三切1)介绍

目录 HDMI介绍: 二进一出HDMI切换器: 通俗的解释: 一进二出HDMI切换器: 通俗解释: HDMI1进2和2进1的区别: 三进1出HDMI切换器: 通俗的解释: HDMI介绍: HDMI描述全称高清多媒体接口(High Definition Multimedia Interface&…

太阳能光伏气象站——助力光伏发电

在光伏产业蓬勃发展的今天,‌太阳能光伏气象站作为专为光伏发电站打造的环境监测系统,‌其重要性日益凸显。‌它不仅是电站运维优化、‌智能控制的关键环节,‌更是提高发电效率、‌保障光伏电站稳定运行的重要工具。‌ 首先,‌太阳…

Linux--传输层协议TCP

目录 1.理解TCP的部分字段 2.TCP的策略以及其它报头 确认应答(ACK)机制​编辑 超时重传机制 连接管理机制 建立连接为什么要三次握手? 为什么要四次挥手? 验证两种状态,CLOSE_WAIT(不关闭文件fd即可)和TIME_WA…

langchian 批次调用 prompt

目录 基础不使用批次 batch 批次调用 关于 langchian 额一些应用,可以查看案例: GitHub - 5zjk5/prompt-engineering: prompt 工程项目案例 基础不使用批次 from dotenv import load_dotenv import time import os from langchain_core.prompts imp…

【JUC】07-死锁

1. 死锁 死锁指的是两个或以上的线程在执行过程中,因争夺资源而造成的一种互相等待的现象。 // 死锁代码 public class DeadLockDemo {public static void main(String[] args) {final Object objectA new Object();final Object objectB new Object();new Threa…

【Linux 驱动】IMX6ULL gpio驱动

1. 概述 如果 pinctrl子系统将一个 PIN 复用为 GPIO 的话,那么接下来要用到 gpio 子系统了。gpio 子系统顾名思义,就是用于初始化 GPIO 并且提供相应的 API 函数,比如设置 GPIO为输入输出,设置读取 GPIO 的值等。 gpio 子系统的主…

kettle-spoon界面空白

点击spoon的connect、save、打开资源库等等,出现以下界面空白,已排查IE11的问题。 解决办法:清除kettle的配置文件,包括:Data Integration/.kettle、C:\Users\XXX.kettle等所有配置文件。