【unittest】TestSuite搭建测试用例示例二

news2024/11/16 22:22:19

1.1 打开串口示例

常用的模组则包含AT指令测试,或串口数据测试,则可添加串口配置,将指令通过串口发送出去,如下所示:

import serial  
  
def open_serial_port(port, baudrate=115200, timeout=2):  
    try:  
        # 创建并配置串行端口对象  
        serial_port = serial.Serial(port=port, baudrate=baudrate, timeout=timeout)  
        # 如果需要,可以在这里添加更多的配置代码  
          
        # 检查端口是否成功打开  
        if serial_port.isOpen():  
            print(f"Serial port {port} opened successfully.")  
            return serial_port  
        else:  
            raise Exception(f"Failed to open serial port {port}.")  
    except serial.SerialException as e:  
        print(f"Error opening serial port {port}: {e}")  
        return None  
  
# 使用示例  
if __name__ == "__main__":  
    port = "COM23"  
    baudrate = 115200  
    timeout = 2  
    serial_port = open_serial_port(port, baudrate, timeout)  
    if serial_port:  
        print("Open serial success.")
        # 这里可以添加使用 serial_port 的代码  
        pass  
    else:  
        print("Failed to open serial port.")
        exit(1) #直接退出程序
1.2 导入多个测试用例示例

本文以移远模组为示例,则对模组信号查询与网络查询AT指令进行测试,常用的指令为:
在这里插入图片描述

则本文以其进行示例创建测试用例

首先,创建一个log打印的py文件名为at_log_set.py,将直接使用 Python 的日志级别将其映射,更方面的管理日志。

import sys
import serial
import time
import logging
from time import strftime, localtime

# 配置日志  
logging.basicConfig(level=logging.DEBUG, filename='log.txt')  
# 创建一个handler,用于将日志输出到控制台  
console_handler = logging.StreamHandler(sys.stdout)  
console_handler.setLevel(logging.DEBUG)  
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')  
console_handler.setFormatter(formatter)  
logger = logging.getLogger(__name__)  
logger.addHandler(console_handler)  

def report_info(loginfo, loglevel=logging.DEBUG):
	logger.log(loglevel, loginfo)

def send_at(serial_port, at_str, timeout):
	report_info(at_str, logging.DEBUG)
	serial_port.write(at_str.encode())
	serial_port.flush
	if(timeout > 0):
		time.sleep(timeout)
	at_response = serial_port.readall().decode()
	report_info(at_response, logging.DEBUG)
	return at_response

def capture_response_with_retry(serial_port, at_response, des_str, timeout_step, timeout_retraymax):
	retray = 1
	while(retray < timeout_retraymax):
		if(at_response != ""):
			report_info(at_response, logging.DEBUG)	
			if (at_response.find(des_str) != -1):
				return 0
		retray = retray + 1
		serial_port.flush()
		time.sleep(timeout_step)
		at_response = serial_port.readall().decode()
	if(retray >= timeout_retraymax):
		report_info("timeout_retraymax don't find", logging.ERROR)
		return -1
	return 0

def retry_send_str(serial_port, at_response, src_str, des_str, count, timeout):
	index = 1
	while(index < count):
		at_response = send_at(serial_port,src_str, timeout)
		if(at_response != ""):
			report_info(at_response, logging.DEBUG)
			if (at_response.find(des_str) != -1):
				return 0
		index = index + 1
	if(index >= count):
		report_info("don't find", logging.ERROR)
		return -1
	return 0

新建一个python文件,at_internet_test.py,代码如下:

import sys
import serial
import unittest
from at_log_set import *

def at_test(serial_port):
	at_response = send_at(serial_port, "AT\r\n", 0.5)
	if(at_response.find("OK") == -1):
		return -1
	return 0

def csq_test(serial_port):
	at_response = send_at(serial_port, "AT+CSQ\r\n", 0.5)
	if(at_response.find("+CSQ:") == -1):
		return -1
	return 0

def cereg_test(serial_port):
	at_response = send_at(serial_port, "AT+CEREG?\r\n", 0.5)
	if(retry_send_str(serial_port, at_response,  "AT+CEREG?\r\n", "+CEREG:0,1", 10, 0.5) == 0):
            return 0
	return -1

def internet_at(serial_port):
	ret = 0
	if(at_test(serial_port) == -1):
		ret = -1
	if(csq_test(serial_port) == -1):
		ret = -1
	if(cereg_test(serial_port) == -1):
		ret = -1
	return ret

将之前所示的串口和测试用例放到一起,则为main.py, 如下所示:

import unittest
from unittestreport import TestRunner
import os
import serial
from at_log_set import *
from at_internet_test import *

def open_serial_port(port, baudrate=115200, timeout=2):  
    try:  
        serial_port = serial.Serial(port=port, baudrate=baudrate, timeout=timeout)   
        if serial_port.isOpen():  
            print(f"Serial port {port} opened successfully.")  
            return serial_port  
        else:  
            raise Exception(f"Failed to open serial port {port}.")  
    except serial.SerialException as e:  
        print(f"Error opening serial port {port}: {e}")  
        return None  
  
class TestInternetAT(unittest.TestCase):
    def test_internet_at(self):
        self.assertEqual(0, internet_at(serial_port))

# 创建 TestSuite 实例  
suite = unittest.TestSuite()  
suite.addTest(TestInternetAT("test_internet_at"))  

BasePath = os.path.dirname(__file__)#获取当前文件所在路径
if __name__ == "__main__":
    port = "COM7"  
    baudrate = 115200  
    timeout = 2  
    serial_port = open_serial_port(port, baudrate, timeout)  
    if serial_port:  
        print("Open serial success.")  
    else:  
        print("Failed to open serial port.")
        exit(1)
    if not os.path.isdir("report"):
        os.mkdir("report")
    fp = BasePath + "\\report" #特别需要注意的是 report文件是已存在的,否则会报错
    runner = TestRunner(suite,filename="TEST测试报告.html",report_dir=fp,title="TEST测试报告",tester="USER1",desc="20240731执行测试")
    runner.run()

则可将该测试用例导入测试,若有其他模块的测试用例,可参考该测试用例进行导入,之后则运行main.py,则将测试报告显示在report文件夹下
运行log如下图所示:
在这里插入图片描述

也可通过tkinter将其作为可视化测试工具,结合数据库,更方便的用来管理模块化测试用例,后续持续更新。。。

若有错误,欢迎指正

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

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

相关文章

Vue 3+Vite+Eectron从入门到实战系列之一环境安装篇

Electron 都应该不会陌生了,是一个使用 JavaScript、HTML 和 CSS 构建桌面应用的框架。通过将 Chromium 和 Node.js 嵌入到其二进制文件中,Electron 允许你维护一个 JavaScript 代码库并创建可在 Windows、macOS 和 Linux 上运行的跨平台应用 - 无需原生开发经验。 实现效果…

YOLOv6训练自己的数据集

文章目录 前言一、YOLOv6简介二、环境搭建三、构建数据集四、修改配置文件①数据集文件配置②权重下载③模型文件配置 五、模型训练和测试模型训练模型测试 总结 前言 提示&#xff1a;本文是YOLOv6训练自己数据集的记录教程&#xff0c;需要大家在本地已配置好CUDA,cuDNN等环…

思源笔记结合群晖WebDav与cpolar内网穿透实现跨网络笔记云同步

文章目录 前言1. 开启群晖WebDav 服务2. 本地局域网IP同步测试3. 群晖安装Cpolar4. 配置远程同步地址5. 笔记远程同步测试6. 固定公网地址7. 配置固定远程同步地址 前言 本教程主要分享如何将思源笔记、cpolar内网穿透和群晖WebDav三者相结合&#xff0c;实现思源笔记的云同步…

如何使用代理IP进行电子邮件保护?

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 前言 随着企业信息化的深入发展&#xff0c;电子邮件在私人生活和商业运营中起到越来越重要的作用&#xff0c;随之而来电子邮件…

掌握eBay刊登:十大工具助力卖家脱颖而出

在经济全球化的浪潮中&#xff0c;eBay作为全球最大的跨境电商平台之一&#xff0c;为卖家提供了一个展示商品、拓展市场的广阔舞台。然而&#xff0c;平台越大&#xff0c;意味着商家之间的竞争越激烈。如何在eBay上有效刊登商品&#xff0c;是卖家吸引用户的关键步骤。本文将…

500元蓝牙耳机排行榜有哪些?四款百元蓝牙耳机品牌排行推荐

在如今这个充满科技魅力的时代&#xff0c;蓝牙耳机已成为我们日常生活中不可或缺的一部分&#xff0c;无论是沉浸在音乐的世界中&#xff0c;还是在繁忙的通勤路上享受片刻宁静&#xff0c;一副优秀的蓝牙耳机都能为我们带来无与伦比的听觉享受&#xff0c;面对市场上琳琅满目…

合作文章(IF=5.9)|16s和非靶代谢组分析揭示亚麻籽木脂素对PAM过量诱导的肝毒性的保护作用

研究背景 扑热息痛&#xff08;PAM&#xff09;是世界上最常用的镇痛解热的药物之一。在肝酶细胞色素P450 Cyp2E1和Cyp1A2PAM酶的作用下&#xff0c;PAM转化为一种高活性的代谢物乙酰对位苯醌亚胺(NAPQI)&#xff0c;通过与谷胱甘肽(GSH)偶联可解毒为无毒的谷胱甘肽-NAPQI。然…

视频汇聚平台EasyCVR接入移动执法记录仪,视频无法播放且报错500是什么原因?

GB28181国标视频汇聚平台EasyCVR视频管理系统以其强大的拓展性、灵活的部署方式、高性能的视频能力和智能化的分析能力&#xff0c;为各行各业的视频监控需求提供了优秀的解决方案。视频智能分析平台EasyCVR支持多协议接入&#xff0c;兼容多类型的设备&#xff0c;包括IPC、NV…

自动化测试中元素定位失败的解决策略

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、引言 自动化测试是软件开发流程中的重要组成部分&#xff0c;它能够帮助测试人员快速地验证应用程序的功能是否符合预期。然而&#xff0c;在自动化测试的过程…

互联网解决方案-文件存储方案:seafile真实案例

目录 seafile可靠性保证 事件驱动 seafile.log events.log 事件驱动好处 本地联思文件同步云联思真实案例 本地联思文件同步云联思架构 云联思客户端检查文件API 本地联思访问客户端封装 本地联思队列消费检查 实践过程中的弯路 文件目录处理 move = copy & de…

ANTD PRO VUE使用

目录 1.访问Antd Pro Vue官网 2.安装 3.目录结构 4.安装运行 5.npm run serve可能会报以下错误 6.解决办法 ​7.缩放会报以下错误 ​8.解决办法 1.访问Antd Pro Vue官网 https://pro.antdv.com 点击开始使用 2.安装 从 GitHub 仓库中直接安装最新的脚手架代码。 git…

TF卡(SD NAND)参考设计和使用提示

目录 电路设计 Layout 设计说明 贴片注意事项 电路设计 1、参考电路&#xff1a; R1~R5 (10K-100 kΩ)是上拉电阻&#xff0c;当SD NAND处于高阻抗模式时&#xff0c;保护CMD和DAT线免受总线浮动。 即使主机使用SD NAND SD模式下的1位模式&#xff0c;主机也应通过上拉电…

《Attention Is All You Need》总结

&#x1f9d9;‍♂️ 诸位好&#xff0c;吾乃斜杠君&#xff0c;编程界之翘楚&#xff0c;代码之大师。算法如流水&#xff0c;逻辑如棋局。 &#x1f4dc; 吾之笔记&#xff0c;内含诸般技术之秘诀。吾欲以此笔记&#xff0c;传授编程之道&#xff0c;助汝解技术难题。 &#…

H5 使用微信地址

效果图 1.先引入sdk 文件 $.ajax({type: "get",url: baseUrl "api/wechat/Pubaccount/jssdk?url" linkurl,//请求接口&#xff0c;获取授权success:function(data){let res data;jWeixin.config({debug: false,appId: res.appId,timestamp: res.time…

【批处理】一、批量修改文件的后缀名

一、简介 批处理(Batch)是常被应用于windows系统下的脚本语言&#xff1b; 此文章主要讲解如何利用批处理批量修改指定后后缀名的文件&#xff0c;具体过程如下所示&#xff1b; 二、批处理代码实现 REM 关闭请求回显功能 echo offREM 延迟环境变量拓展 setlocal enabledela…

Transformers实战04-微调gpt-2生成python代码。

文章目录 简介案例描述收集数据数据集处理回顾预处理input\_ids和attention_mask&#xff1a;special tokenchunkdatacollatormap 预处理 初始化模型回顾模型参数计算 初始化 完整代码测试 简介 GPT-2&#xff08;Generative Pre-trained Transformer 2&#xff09;是由OpenAI…

C语言——自定义函数调用

今天&#xff0c;在完成大小写转换时遇到了一个问题&#xff1a; 注释&#xff1a;本VS版本为2022&#xff0c;使用了更为安全的scanf_s()函数 代码如下&#xff1a; #include <stdio.h> #include <stdlib.h> void daxiaoxie(char *p,int n) {int i;for (i 0; …

奥运会Ⅶ--史上最快AI芯片“搜狐”,比B200快10倍

生成式AI推理的性价比是GPU的140倍。 大模型时代&#xff0c;全球算力短缺&#xff0c;买来铲屎的Nvidia市值被推上天。 如今&#xff0c;终于有一家公司拿出了自己的AI芯片来挑战。 今天早上&#xff0c;科技圈迎来一则重磅消息&#xff0c;美国芯片初创公司Etched推出了旗下…

以太网UDP测试实验

目录 一.UDP简介 1.1UDP概述 1.2UDP协议 二.实验任务 三.模块设计 3.1总体模块设计 3.2UDP模块设计 3.2.1udp_rx模块设计 3.2.2udp_tx模块设计 四.板级验证 一.UDP简介 1.1UDP概述 UDP &#xff08;User Datagram Protocol)用户数据协议 是一种面向无连接的传输层协…

65、zookeeper+kafka实现订阅号生产及阅读

前言回顾 elk es–elasticsearch l–logstash k–kibana f–filebeat 一、elkfk kafka带入集群当中 zookeeper集群kefka集群 zookeeper是一个开源的&#xff0c;分布式的&#xff0c;为分布式架构提供协调服务的APACHE的项目。 保存元数据。 1.1、zookeeper的工作机…