做pc端网站案例,百度wordpress安装,什么是成交型网站建设,网页制作基础教程dw1、公共用例库计划
1.1、目标
在公司测试管理体系的演变过程中#xff0c;从禅道过渡到devops再到云效平台#xff0c;我们已经实现了对bug和用例的有效集中管理。然而#xff0c;在实际操作中发现#xff0c;尽管用例管理得到了初步整合#xff0c;但在面对不同系统和测…1、公共用例库计划
1.1、目标
在公司测试管理体系的演变过程中从禅道过渡到devops再到云效平台我们已经实现了对bug和用例的有效集中管理。然而在实际操作中发现尽管用例管理得到了初步整合但在面对不同系统和测试类型时缺乏一套完善的公共用例库体系导致每次进行新系统测试时都需要大量重复编写测试用例。即使在一定程度上参考了以往项目的用例但复用程度并不理想这不仅浪费了宝贵的测试资源也不利于经验总结与传承。
因此本次计划的核心任务是开发一个个人版的公共用例库旨在将各系统和各类测试场景下的通用、基础以及关键功能的测试用例进行系统性地归纳整理并以提高用例的复用率为目标力求最大限度地减少重复劳动提升测试效率。通过搭建并维护这个公共用例库能够更好地积累和分享测试经验降低由于人为疏忽或遗漏而产生的漏测风险确保产品质量得到持续稳定的保障。同时这一举措也将有助于团队内部知识共享和标准化建设为今后的测试工作打下坚实的基础。
1.2、任务概述
工作内容包括完成公共用例库的开发实施工作包括需求分析、系统设计、开发、测试、打包、运行维护等工作。
2、分析与设计
2.1、功能性需求
2.1.1 主页 主页作为系统的入口和概览界面主要展示关键的统计信息 模块总数展示当前系统内所有模块的数量。用例总数显示所有已创建的测试用例数量。各用例类型数列出并统计各类测试用例如功能测试、性能测试、兼容性测试等的数量。
2.1.2 用例库 模块管理 模块新增创建新的测试模块用于归类和组织相关联的测试用例支持3级目录。模块编辑更改模块名称、描述或其他属性以适应业务需求的变化。模块查询搜索特定的测试模块便于查看该模块下的所有测试用例。模块删除将不再需要的模块移至回收站保持用例库结构清晰有序。 用例管理 新增先选择模块再创建新的测试用例填写详细的用例标题、前置条件、操作步骤、预期结果等信息。编辑提供对已有用例进行修改的功能可以更新用例的各种属性或内容。复制支持复制现有用例在原模块下创建一个相同的新用例便于快速生成类似的测试场景。查询通过关键字搜索、过滤器等方式查找所需的测试用例。删除从用例库中移除不再需要的测试用例放入回收站而非直接永久删除。
2.1.3 导入导出
下载模版为用户提供标准的Excel模版文件方便按照统一格式编写和导入用例数据。导入用例Excel支持用户上传已经填写好的Excel模版文件自动解析并导入到用例库中。导出用例选择特定的模块将该模块下的所有用例数据导出为Excel文件。
2.1.4 回收站
恢复对于被删除的用例或模块允许用户在一定时间内将其恢复到原始位置。彻底删除若确定不再需要某项已放入回收站的内容可执行彻底删除操作使其无法再被恢复。
2.1.5 关于
提供系统版本信息、版权声明、使用帮助文档等相关信息帮助用户更好地理解和使用公共用例库系统。 2.3、环境准备
开发流程使用Qt Disinger设计UIPyUIC把Qt Designer生成的.ui文件换成.py文件 环境
win10pycharm
Python3.9sqlite3PyQt6 6.6.1PyQt6-Qt6 6.6.1PyQt6-sip 13.6.0pyqt6-tools 6.4.2.3.3
Qt Designer软件 5.11.1环境配置参考
Python GUI编程https://www.kancloud.cn/ay66544/pygui/3044831PyQt窗口设计之Qt Designerhttps://blog.csdn.net/Itsme_MrJJ/article/details/122668802
环境安装pyqt下载一直很慢国内源也是。PyQt6与PyQt6-Qt6必须安装版本一致不然会报错dll找不到运行程序。
3、数据架构设计
使用SQLite数据库存储用例及模块数据SQLite 的使用下面这篇文章讲的很好。后面的封装示例直接拿来用了。 Python操作SQLite数据库非常详细https://c.biancheng.net/view/vb3b93m.html
3.1、表设计
表一testcase测试用例表 表二module模块表
3.2、数据库表与操作封装
至此数据库层面的代码基本实现后续需要设计GUI界面与功能需求的代码实现
# !/usr/bin/env python
# -*- coding:utf-8 -*-import sqlite3
import datetimeclass casedb:用例库操作增删改查def __init__(self):初始化连接数据库建表try:self.connect()# 创建模块表self.cursor.execute(fCREATE TABLE IF NOT EXISTS module (moduleid INTEGER PRIMARY KEY AUTOINCREMENT,--模块编号parent_id TEXT NOT NULL,--父idlevel TEXT,--层级parent_path TEXT,--路径modulename TEXT NOT NULL,--名称status TEXT,--是否启用 1/0order_num TEXT--顺序))# 创建用例表self.cursor.execute( CREATE TABLE IF NOT EXISTS testcase ( caseid INTEGER PRIMARY KEY AUTOINCREMENT, --用例编号moduleid INTEGER NOT NULL, --所属模块title TEXT NOT NULL, --用例标题preconditions TEXT, --前置条件step TEXT NOT NULL, --步骤expect TEXT, --预期keyword TEXT, --关键词priority TEXT, --优先级types TEXT, --用例类型status TEXT, --用例状态modificationdate TEXT default TIMESTAMP, --修改日期counts TEXT, --导出次数remarks TEXT --备注))self.conn.commit()self.over()print([数据库连接成功])except Exception as e:print([create table error], e)def connect(self):连接数据库self.connsqlite3.connect(testcaes.db) # 连接数据库self.cursorself.conn.cursor() # 创建游标# 插入或更新表数据一次插入或更新一条数据def operate_one(self, sql: str, value: tuple):插入或更新单条表记录:param sql: insert语句或update语句:param value: 插入或更新的值形如:return: True表示插入或更新成功try:self.cursor.execute(sql, value)self.conn.commit()if INSERT in sql.upper():print([insert one record success])if UPDATE in sql.upper():print([update one record success])return Trueexcept Exception as e:print([insert/update one record error], e)self.conn.rollback()return False# 插入或更新表数据一次插入或更新多条数据def operate_many(self, sql: str, value: list):插入或更新多条表记录:param sql: insert语句或update语句:param value: 插入或更新的字段的具体值列表形式为list:[(),()]:return: True表示插入或更新成功try:# 调用executemany()方法self.cursor.executemany(sql, value)self.conn.commit()if INSERT in sql.upper():print([insert many records success])if UPDATE in sql.upper():print([update many records success])return Trueexcept Exception as e:print([insert/update many records error], e)self.conn.rollback()return False# 查询一条数据def query_one(self, sql: str, paramsNone):查询单条数据:param sql: select语句:param params: 查询参数形如():return: 语句查询单条结果try:if params:self.cursor.execute(sql, params)else:self.cursor.execute(sql)# 调用fetchone()方法rself.cursor.fetchone()print([select one record success])return rexcept Exception as e:print([select one record error], e)# 查询多条数据def query_many(self, sql: str, paramsNone):查询多条数据:param sql: select语句:param params: 查询参数形如():return: 语句查询多条结果try:if params:self.cursor.execute(sql, params)else:self.cursor.execute(sql)# 调用fetchall()方法rself.cursor.fetchall()print(f[select many records success])return rexcept Exception as e:print([select many records error], e)# 删除表数据def delete_record(self, sql: str):删除表记录:param sql: 删除记录SQL语句:return: True表示删除成功try:if DELETE in sql.upper():self.cursor.execute(sql)self.conn.commit()print([detele record success])return Trueelse:print([sql is not delete])return Falseexcept Exception as e:print([detele record error], e)return Falsedef over(self):关闭连接self.cursor.close()self.conn.close()def main(self):#插入数据self.operate_one((INSERT INTO module VALUES (NULL,?,?,?,?,?,?)),(1,1,0/1,更多查询,1,1))# self.operate_many((INSERT INTO testcase VALUES (NULL,?,?,?,?,?,?,?,?,?,?,?,?,?)),[# (1, 选择查询日期, 无, 1、打开页面选择日期点击查询, 查询出相应日期结果, 日期查询, , , , , , , ),# (1, 选择下拉, 无, 1、打开页面选择下拉点击查询, 查询出相应结果, 下拉查询, , , , , , , )])# 更新数据SQL语句current_timedatetime.datetime.now()# 获取当前时间update_sqlupdate testcase set modificationdate? where caseid?update_value(current_time, 2)update_values[(current_time, 1), (current_time, 3)]self.operate_one(update_sql, update_value)# 一次更新一条数据self.operate_many(update_sql, update_values)# 一次更新多条数据#查询数据rowself.query_many((select * from testcase where moduleid?),1)print(row)#删除数据delete_sqldelete from module where moduleid 7self.delete_record(delete_sql)self.over()if __name__ __main__:acasedb()a.connect()rowa.query_many((select * from module))print(row)a.over()