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

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

运行测试文件封装

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

  1. import pytest

  2. def run_tests():

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

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

报告和日志的封装

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

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

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

  3. 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的数据驱动测试的示例:​​​​​​​

  1. import pytest

  2. import websockets

  3. import asyncio

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

  5. @pytest.mark.asyncio

  6. async def test_websocket_message(websocket, message):

  7. await websocket.send(message)

  8. received_message = await websocket.recv()

  9. assert received_message == message

  10. # 执行测试用例

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

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

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

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

 
  1. import pytest

  2. import websockets

  3. import asyncio

  4. import json

  5. def load_test_data():

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

  7. return json.load(file)

  8. @pytest.fixture(scope="module")

  9. def test_data():

  10. return load_test_data()

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

  12. @pytest.mark.asyncio

  13. async def test_websocket_message(websocket, data):

  14. message = data["message"]

  15. expected_response = data["expected_response"]

  16. await websocket.send(message)

  17. received_message = await websocket.recv()

  18. assert received_message == expected_response

  19. # 执行测试用例

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

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

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

 

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取   

 

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

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

相关文章

50-2 内网信息收集 - 内网工作环境(域相关知识)

一、工作组 工作组(Work Group)是局域网中最基本的资源管理模式,适用于小规模网络环境。 工作组的定义: 工作组是将不同功能或部门的计算机分组管理的方式。它提供了层次化的网络资源管理,使得组织内的计算机可以按照功能或部门分类。每个工作组有一个自定义的主机名称,…

牛客周赛 Round 48-D.小红的乘2除2

题目链接 D-小红的乘2除2_牛客周赛 Round 48 (nowcoder.com) 解析&#xff1a; 用DP来推&#xff0c;好理解&#xff0c;但是容易出错。 #include <bits/stdc.h> using namespace std; #define endl \n #define int long long // int gcd(int a, int b) { return b ?…

1-爬虫基础知识(6节课学会爬虫)

1-爬虫基础知识&#xff08;6节课学会爬虫&#xff09; 1.什么是爬虫2.爬取的数据去哪了3.需要的软件和环境4.浏览器的请求&#xff08;1&#xff09;Url&#xff08;2&#xff09;浏览器请求url地址&#xff08;3&#xff09;url地址对应的响应 5.认识HTTP/HTTPS5.1 http协议之…

海康+libtorch的血泪教训

一、LibTorch使用&#xff0c; 详见&#xff1a; /INCLUDE:?warp_sizecudaatYAHXZ 二、海康二次开发&#xff0c; 目前选4.31&#xff0c;只能c14。 三、做dll注意&#xff1a;

使用Python实现深度学习模型:演化策略与遗传算法

在深度学习和机器学习领域,演化策略(Evolution Strategies, ES)和遗传算法(Genetic Algorithms, GA)是两种强大的优化方法。它们通过模拟自然选择和生物进化过程来寻找最优解。本文将详细讲解如何使用Python实现这两种方法,并通过代码示例逐步解释其核心概念和实现步骤。…

Excel+vue+java实现批量处理功能

需求背景: 产品创建流程比较复杂&#xff0c;有时候需要一次性创建多至10个&#xff0c;所以做了Excel维护产品信息&#xff0c;直接导入创建的功能。能极大提高效率。 简要概括实现&#xff1a; 一、参考单个创建&#xff0c;设计创建模板&#xff0c;表头对应填写字段名&…

【华为OD机试】天然蓄水库(C++/Java/Python)

题目 题目描述 公元2919年,人类终于发现了一颗宜居星球——X星。 现想在X星一片连绵起伏的山脉间建一个天热蓄水库,如何选取水库边界,使蓄水量最大? 要求: 山脉用正整数数组s表示,每个元素代表山脉的高度。选取山脉上两个点作为蓄水库的边界,则边界内的区域可以蓄水,蓄…

ComfyUI汉化插件安装

步骤一&#xff1a;点击Manager 步骤二&#xff1a;选择安装插件 步骤三&#xff1a;搜索Translation&#xff0c;选择第一个点击右边得安装 步骤四&#xff1a;点击下放得RESTART进行重启 步骤五&#xff1a;等待重启完成后&#xff0c;点击设置 步骤六&#xff1a;选择中文语…

【Nginx】源码安装

1.安装地址 Nginx官网&#xff1a;nginx: download 2.下载依赖 //一键安装上面四个依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel 3.上传解压编译安装 //解压压缩包tar -xvf nginx-1.26.1.tar.gz //进入nginx cd nginx-1.26.1/ //安装到指定位…

llm学习-1(包含如何使用github的codespace):

本文学习参考&#xff1a;datawhalechina/llm-universe: 本项目是一个面向小白开发者的大模型应用开发教程&#xff0c;在线阅读地址&#xff1a;https://datawhalechina.github.io/llm-universe/ 一些可使用的大模型地址&#xff1a; Claude 使用地址 PaLM 官方地址 Gemini…

力扣第一道困难题《3. 无重复字符的最长子串》,c++

目录 方法一&#xff1a; 方法二&#xff1a; 方法三&#xff1a; 方法四&#xff1a; 没有讲解&#xff0c;但给出了优秀题解 本题链接&#xff1a;4. 寻找两个正序数组的中位数 - 力扣&#xff08;LeetCode&#xff09; 话不多说&#xff0c;我们直接开始进行本题的思路解…

24/06/24(12.1117)指针进阶 ,冒泡和快排 习题为依托巩固概念(strlen,sizeof,字符串,数组,指针大小的区别)

回调函数 回过头来调用的函数 #include <stdio.h> #include <stdlib.h> int Find_Max(int arr[], int n){ int max_value arr[0]; for (int i 1; i < n; i){ if (max_value < arr[i]) max_value arr[i]; } return…

金榜题名升学宴,怀庄之醉鸿运添彩

十年寒窗苦读&#xff0c;终于迎来金榜题名的辉煌时刻。这是对知识的向往与追求&#xff0c;也是对未来的期许与梦想。在这样一个值得纪念的时刻&#xff0c;举办一场升学宴&#xff0c;无疑是对过去努力的最好告别&#xff0c;也是对未来人生新旅程的美好祝愿。在选择升学宴用…

大数据面试题之HBase(3)

HBase的预分区 HBase的热点问题 HBase的memstore冲刷条件 HBase的MVCC HBase的大合并与小合并&#xff0c;大合并是如何做的?为什么要大合并 既然HBase底层数据是存储在HDFS上&#xff0c;为什么不直接使用HDFS&#xff0c;而还要用HBase HBase和Phoenix的区别 HBase支…

Java怎么对线程池做监控

对Java线程池进行监控是确保系统性能和稳定性的重要部分。监控线程池可以帮助我们了解线程池的状态&#xff0c;如当前活跃线程数、任务队列长度、已完成任务数等。以下是一个详细的介绍和代码示例&#xff0c;说明如何对Java线程池进行监控。 1. 监控内容 &#xff08;1&…

Spring MVC数据绑定和响应——页面跳转(一)返回值为void类型的页面跳转

一、返回值为void类型的页面跳转到默认页面 当Spring MVC方法的返回值为void类型&#xff0c;方法执行后会跳转到默认的页面。默认页面的路径由方法映射路径和视图解析器中的前缀、后缀拼接成&#xff0c;拼接格式为“前缀方法映射路径后缀”。如果Spring MVC的配置文件中没有配…

1,Windows-本地Linux 系统(WSL)

目录 第一步电脑设置 第二步安装Ubuntu 第三文件传递 开发人员可以在 Windows 计算机上同时访问 Windows 和 Linux 的强大功能。 通过适用于 Linux 的 Windows 子系统 (WSL)&#xff0c;开发人员可以安装 Linux 发行版&#xff08;例如 Ubuntu、OpenSUSE、Kali、Debian、Arc…

【子串】3. 无重复的最长子串

3. 无重复的最长子串 难度&#xff1a;中等难度 力扣地址&#xff1a;https://leetcode.cn/problems/longest-substring-without-repeating-characters/description/ 题目看起来简单&#xff0c;刷起来有好几个坑&#xff0c;特此记录一下&#xff0c;解法比官网的更加简单&…

51单片机第10步_数组

本章重点介绍如何访问数组。 #include <REG51.h> //包含头文件REG51.h,使能51内部寄存器; #include <string.h> //使能strcpy(); #include <stdio.h> //包含头文件stdio.h //_getkey();从串口读入一个字符; //putchar();向串口发送一个字节; //printf()…

[OtterCTF 2018]Play Time

还是这个程序 。。要找到游戏名字查看 进程 psscan pstree pslist 0x000000007d686b30 Rick And Morty 3820 2728 0x000000000b59a000 2018-08-04 19:32:55 UTC0000 0x000000007d7cb740 LunarMS.exe 708 2728 0x00000000731cb000 2018-08-04 19:27:39 UTC0000…