??本次计划的核心任务是开发一个,个人版的公共用例库,旨在将各系统和各类测试场景下的通用、基础以及关键功能的测试用例进行系统性地归纳整理,并以提高用例的复用率为目标,力求最大限度地减少重复劳动,提升测试效率。
??计划内容:完成公共用例库的开发实施工作,包括需求分析、系统设计、开发、测试、打包、运行维护等工作。
??需求分析、数据库表的设计:公共用例库计划–个人版(一)
??主体界面与逻辑设计:公共用例库计划–个人版(二)主体界面设计
??导出Excel功能:公共用例库计划–个人版(三)导出Excel功能
?? 1. 用例信息页面,对模块查询功能进行改造。实现下拉框输入模块名称,几秒钟后自动查询模块信息,或者回车查询。
??2. 部分模块的性能优化。
??3. 库表码值改造。
??现将模块显示框替换成下拉框,将可以编辑勾选上,就可以输入文本了。
??要实现输入模块名称,查询返回模块名称与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=0
logging.info('用例页面,模块查询')
函数写好了,现在需要在输入模块后调用。在这里使用信号槽机制:
??增加信号,在mk的编辑控件编辑完成,回车后,触发函数:self.mkcx_add
self.addcase.mk.lineEdit().returnPressed.connect(self.mkcx_add) # 编辑,触发模块查询
??现在输入名称,回车后可以查询模块信息,并显示到下拉框。
??想法:增加编辑文本的信号,在编辑后3秒钟,自动查询
??在下拉框文本编辑后,发送信号到: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秒后触发
??问题:现在已经实现了,回车查询、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=0
logging.info('用例页面,模块查询')
??问题:已经查询一次,然后再次输入。他会自动补齐文本,然后发现是下拉框已有的选项文本。因为下拉框是模块+ID,补齐的文本查询不出模块。
??解决方案:关闭自动补齐功能
self.addcase.mk.lineEdit().setCompleter(None) # 关闭自动补全功能
提升Python运行速度:
??对查询,保存等函数使用计时器,针对性优化。
def timeshow(func):
"""计时函数"""
from time import time
def newfunc(*arg, **kw):
t1=time()
res=func(*arg, **kw)
t2=time()
print(f"{func.__name__: >10} : {t2 - t1:.6f} sec")
return res
return newfunc
通义千问说:
将SQLite数据库中原本为TEXT类型的四个字段更改为INTEGER类型后,会带来以下对性能和存储的影响:
查询速度提升:
对于整数字段进行比较、计算和索引操作通常比文本字段更快。尤其是当执行涉及这些字段的数学运算或者使用了索引进行查询时,性能差异更为显著。
排序效率提高:
整数排序的速度要快于文本排序,因为整数比较是直接在二进制层面完成的,而文本排序需要基于字符编码进行比较。
减少数据转换开销:
如果之前在应用程序中处理这些字段时,频繁地在文本和数值之间转换,那么现在可以直接处理整数,可能降低转换过程中的CPU开销。
空间占用减小:
INTEGER类型相比TEXT类型,在存储同样大小或范围内的数值时,通常会占用更少的空间。每个INTEGER值通常固定占用4个字节(取决于SQLite的具体实现和整数的大小),而TEXT则根据内容长度不同,可能占用更多空间。
索引优化:
如果这些字段被用作索引,那么将TEXT改为INTEGER可能会使得索引更紧凑,从而加速查询并减少磁盘I/O操作。
就现试看看,新增codes码值表,将模块表与用例表码值转换成对应的编码。