公共用例库计划--个人版(四)功能改造与性能优化

1、任务概述

  本次计划的核心任务是开发一个,个人版的公共用例库,旨在将各系统和各类测试场景下的通用、基础以及关键功能的测试用例进行系统性地归纳整理,并以提高用例的复用率为目标,力求最大限度地减少重复劳动,提升测试效率。
  计划内容:完成公共用例库的开发实施工作,包括需求分析、系统设计、开发、测试、打包、运行维护等工作。

1.1、 已完成:

  需求分析、数据库表的设计:公共用例库计划–个人版(一)
  主体界面与逻辑设计:公共用例库计划–个人版(二)主体界面设计
  导出Excel功能:公共用例库计划–个人版(三)导出Excel功能

1.2、 本次待完成:

   1. 用例信息页面,对模块查询功能进行改造。实现下拉框输入模块名称,几秒钟后自动查询模块信息,或者回车查询。
  2. 部分模块的性能优化。
  3. 库表码值改造。

2、功能改造

2.1 用例信息页面

  现将模块显示框替换成下拉框,将可以编辑勾选上,就可以输入文本了。
在这里插入图片描述

2.2 逻辑修改

  要实现输入模块名称,查询返回模块名称与ID。先编写查询功能函数:

    def mkcx_add(self):"""用例页面,模块查询"""vlue=['%' + self.addcase.mk.lineEdit().text() + '%']	# 获取输入文本self.casedb.connect()self.row=self.casedb.query_many("select modulename,moduleid from module where modulename like ? and status = 10", vlue)self.casedb.over()self.addcase.mk.clear()	# 清空下拉框if self.row:self.mkid=self.row[0][1]		# 默认选择的第一个模块ID# 将模块名称、ID,写入下拉框选项for result in self.row:self.addcase.mk.addItem(result[0] + '—ID:' + str(result[1]))else:self.mkid=0logging.info('用例页面,模块查询')

函数写好了,现在需要在输入模块后调用。在这里使用信号槽机制:
  增加信号,在mk的编辑控件编辑完成,回车后,触发函数:self.mkcx_add

self.addcase.mk.lineEdit().returnPressed.connect(self.mkcx_add) # 编辑,触发模块查询

2.3 实现情况

  现在输入名称,回车后可以查询模块信息,并显示到下拉框。

在这里插入图片描述

2.4 输入信息后,自动查询

  想法:增加编辑文本的信号,在编辑后3秒钟,自动查询

2.4.1 信号槽设置

  在下拉框文本编辑后,发送信号到:self.on_text_changed

self.addcase.mk.lineEdit().textEdited.connect(self.on_text_changed)

  编写self.on_text_changed函数:在文本信息改变后,计时3秒。如果没有后续变动信号,计时结束就出发查询。

    def on_text_changed(self, text):# 取消之前可能存在的计时器if self.timer:self.timer.stop()self.timer.deleteLater()# 创建一个新的计时器,在3秒后触发查询函数self.timer=QTimer(self)self.timer.setSingleShot(True)  # 设置为单次触发self.timer.timeout.connect(self.mkcx_add)self.timer.start(3000)  # 3秒后触发

2.4.2 问题1

  问题:现在已经实现了,回车查询、3秒自动查询。但是,回车后还是会触发3秒查询。
  解决方案:在查询函数增加计时器的清理操作。因为在文本编辑后,同时触发的两个槽函数,那么回车就将计时清空,使自动查询不能继续触发查询函数。

    def mkcx_add(self):"""用例页面,模块查询"""if self.timer and self.timer.isActive(): # 关闭并删除计时器(确保不会触发3秒的定时事件)self.timer.stop()self.timer.deleteLater()self.timer=None  # 清空计时器引用vlue=['%' + self.addcase.mk.lineEdit().text() + '%']        # 获取输入文本self.casedb.connect()self.row=self.casedb.query_many("select modulename,moduleid from module where modulename like ? and status = 10", vlue)self.casedb.over()self.addcase.mk.clear()     # 清空下拉框if self.row:self.mkid=self.row[0][1]for result in self.row:     # 将模块名称、ID,写入下拉框选项self.addcase.mk.addItem(result[0] + '—ID:' + str(result[1]))else:self.mkid=0logging.info('用例页面,模块查询')

2.4.3 问题2

  问题:已经查询一次,然后再次输入。他会自动补齐文本,然后发现是下拉框已有的选项文本。因为下拉框是模块+ID,补齐的文本查询不出模块。
在这里插入图片描述

  解决方案:关闭自动补齐功能

self.addcase.mk.lineEdit().setCompleter(None)  # 关闭自动补全功能

3、模块的性能优化

提升Python运行速度:

  • 选择合适的数据结构
  • 少用循环
    • 用 列表推导式 代替循环
    • 用 迭代器 代替循环
    • 用 filter() 代替循环
    • 减少循环次数,精确控制,不浪费CPU
  • 避免循环重复计算
  • 少用内存、少用全局变量

3.1 使用计时装饰器

  对查询,保存等函数使用计时器,针对性优化。

def timeshow(func):"""计时函数"""from time import timedef newfunc(*arg, **kw):t1=time()res=func(*arg, **kw)t2=time()print(f"{func.__name__: >10} : {t2 - t1:.6f} sec")return resreturn newfunc

在这里插入图片描述

4、库表码值改造

通义千问说:
将SQLite数据库中原本为TEXT类型的四个字段更改为INTEGER类型后,会带来以下对性能和存储的影响:

  1. 性能影响:
  • 查询速度提升:

    对于整数字段进行比较、计算和索引操作通常比文本字段更快。尤其是当执行涉及这些字段的数学运算或者使用了索引进行查询时,性能差异更为显著。

  • 排序效率提高:

    整数排序的速度要快于文本排序,因为整数比较是直接在二进制层面完成的,而文本排序需要基于字符编码进行比较。

  • 减少数据转换开销:

    如果之前在应用程序中处理这些字段时,频繁地在文本和数值之间转换,那么现在可以直接处理整数,可能降低转换过程中的CPU开销。

  1. 存储影响:
  • 空间占用减小:

    INTEGER类型相比TEXT类型,在存储同样大小或范围内的数值时,通常会占用更少的空间。每个INTEGER值通常固定占用4个字节(取决于SQLite的具体实现和整数的大小),而TEXT则根据内容长度不同,可能占用更多空间。

  • 索引优化:

    如果这些字段被用作索引,那么将TEXT改为INTEGER可能会使得索引更紧凑,从而加速查询并减少磁盘I/O操作。

就现试看看,新增codes码值表,将模块表与用例表码值转换成对应的编码。
在这里插入图片描述

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

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

相关文章

SpringBoot异常处理

1.SpringBoot异常处理 1.1.自定义错误页面 SpringBoot默认的处理异常的机制:SpringBoot 默认的已经提供了一套处理异常的机制。一旦程序中出现了异常 SpringBoot 会向/error 的 url 发送请求。在 springBoot 中提供了一个叫 BasicErrorController 来处理/error 请…

leedcode刷题笔记day1

题目大意: 暴力解法 两个for循环(也是我一看到题目想到的方法) 枚举在数组中所有的不同的两个下标的组合逐个检查它们所对应的数的和是否等于 target 复杂度分析 时间复杂度:O(n2),这里 n 为数组的长度 空间复杂度:O(1)&#x…

新定义51单片机(RD8G37)实现测距测速仪

本文描述用新定义51单片机(RD8G37)超声波一体测距传感器实现简单的测距测速仪。 测距仪演示效果 新定义RD8G37Q48RJ开发板 超声波测距模块: 8位并口屏 1、main.c unsigned short timeConsuming0; unsigned int oldDistance;void rectClearS…

Javascript,到底要不要写分号?

小白随机在互联网上乱丢一些赛博垃圾,还望拨冗批评斧正。 要不要加分号? 先说结论:“不引起程序出错的前提下,加不加都可以,按自身习惯来。” 为什么JS可以不加分号? 实际上,行尾使用分号的风…

解决方案|镭速赋能影视行业数字化,电影高速分发技术打造一流传输体验!

中国电影产业链主要分为三部分,即上游制片,中游宣发,下游院线影院,互联网产业发展后衍生出线上票务平台作为产业终端。随着4K、3D、高帧率、高动态范围、广色域、沉浸式音频等新兴视听技术的发展与应用,高新技术格式电…

stm32内存分配博客笔记

原文: stm32内存分配 笔记: 1、向量表与代码段;根据Cortex-M3权威指南描述,系统复位后,在向量表异常0处保存的是堆栈起始地址,而后紧跟中断向量表 2、可以从链接脚本.ld文件中看到终端向量表第一个被链接…

Date,SimpleDateFormate类和Calendar类

目录 一、Date 二、SimleDateFormate类 作用 练习一 练习二 三、Calendar类 概述 Calendar小结 一、Date 构造方法说明public Date()创建Date对象,表示一个时间public Date(long date)创建Date对象,表示指定时间public void setTime(long time)设置…

服务器变矿机,该如何应对?

开始 恶意的挖矿程序会导致服务器cpu的异常占用&#xff0c;很让人讨厌。起初&#xff0c;我只是使用top命令显示出占用cpu不正常的进程&#xff0c;发现其中一个进程占用了百分之九十九点几&#xff0c;然后通过kill -9 <PID>命令干掉它。但总是过不了几天&#xff0c;…

VRPSolverEasy:支持VRP问题快速建模的精确算法Python包

文章目录 前言一步步安装免费版主要模块介绍1. depot point2. customer point3. links4. vehicle type VRPTW 算例数据说明模型建立输出求解状态及结果 前言 VRPSolverEasy 是用于车辆路径问题&#xff08;VRP&#xff09;的最先进的分支切割和定价算法求解器1&#xff0c;它的…

[二]rtmp服务器搭建

[二]rtmp服务器搭建 一.测试二.使用Nginx搭建自己的rtmp服务器1.nginx是什么&#xff1f;2.环境准备 三、搭建过程1.安装编译 nginx 所需要的库2.下载 nginx-1.21.6.tar.gz3.下载 nginx-rtmp-module 4.解压5.编译6.启动nginx&#xff0c;检测nginx是否能成功运行7.配置nginx使用…

易飞ERP抛转钉钉签核,并自动审核易飞单据

支持易飞ERP所有单据送签到钉钉 &#xff08;v: rainholy&#xff09; 1、钉钉界面 2、易飞ERP单据配置 3、钉钉审批完后&#xff0c;自动审核易飞ERP单据

66.Go从零搭建一个orm框架【简版】

文章目录 一&#xff1a;前置学习1、 为什么要用orm2、Golang里面是如何原生连接MySQL的3、ORM框架构想 二: 开始造1、连接Connect2、设置/读取表名Table/GetTable3、新增/替换Insert/Replace4、条件Where5、条件OrWhere6、删除Delete7、修改Update8、查询9、设置查询字段Field…