在测试开发工作中,避免不了要进行一些重复繁杂不便的事项,那如何提高效率,简化测试流程呢,工具开发就是一个可选择的手段,那今天就基于 PyQt 开发框架从0到1实现一个小工具。
PyQt 简介
PyQt 是 Python 语言的一个 GUI 开发框架,基于 Qt 库(一个跨平台的 C++ 框架),保留了 Qt 高运行效率的同时,大大提高了开发效率。PyQT 功能强大,组件丰富,适合复杂界面的开发。
PyQt 允许开发者使用 Python 快速构建功能丰富的桌面应用程序,同时继承 Qt 的强大特性,包括丰富的控件库、多线程支持、跨平台兼容性(Windows/Linux/macOS)以及高效的渲染能力。
工作中小工具的需求场景
构建数据
批量处理数据
压测工具
管理本地环境,如在操作系统上修改环境变量、修改hosts、清空进程。
接口安全检测工具/接口自动化检测工具
基于便签服务批量创建和删除便签的demo
批量创建便签页面:
输入参数后的结果:
批量删除便签页面:
输入参数后的结果:
代码步骤如下:
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys
import time
import random
from business.dataClear import all_notes_clear
from business.dataCreate import DataCreate
class MainWindow(QMainWindow):
def __init__(self):
# 初始化 继承父类QMainWindow
super(MainWindow, self).__init__(None)
# 设置窗口大小
self.resize(1050, 650)
self.setWindowTitle("notesDataProcTools")
self.setObjectName('miniTools')
self.setStyleSheet(
"#miniTools{border-image:url(./picture/cd9c98ae6a7a6c1b770d0e0a9d00337.jpg);}"
"QPushButton{color:rgb(106,149,184)}"
"QPushButton:hover{color:rgb(144,241,251)}"
"QPushButton{border:2px solid rgb(33,144,158)}"
"QPushButton{background:url(./picture/btn3.png) round 27;}"
"QPushButton{font:75 15pt '黑体'}"
"QPushButton{border-radius:10px}"
"QPushButton{padding:2px 8px}"
"QLabel{font:75 15pt '黑体'}"
"QLabel{font-size:200%}"
"QLabel{color:rgb(242,210,7)}"
"QLineEdit{font:75 15pt '黑体'}"
"QLineEdit{color:rgb(221,221,221)}"
"QLineEdit{background-color:rgba(0,62,90,200)}"
"QLineEdit{border:2px solid rgb(34,120,154) round 1}"
"QTextBrowser{font:75 15pt '黑体'}"
"QTextBrowser{color:rgb(169,174,180)}"
"QTextBrowser{background-color: rgb(3,7,25);}"
"QTextBrowser{border:2px solid rgb(34,120,154) round 1}"
)
# 使用QFrame定义容器,设置大小和坐标
btn_window_frame = QFrame(self)
self.btn1_frame = QFrame(self)
self.btn2_frame = QFrame(self)
btn_window_frame.setGeometry(0, 0, 250, 650)
self.btn1_frame.setGeometry(250, 0, 800, 650)
self.btn2_frame.setGeometry(250, 0, 800, 650)
# 设置垂直布局
btn_window_box = QVBoxLayout(btn_window_frame)
btn1_frame_box = QVBoxLayout(self.btn1_frame)
btn2_frame_box = QVBoxLayout(self.btn2_frame)
# 定义按钮窗口下的组件
aes_btn1 = QPushButton('创建普通便签', self)
aes_btn2 = QPushButton('删除所有便签', self)
# 绑定点击事件
aes_btn1.clicked.connect(self.aes_btn1_click)
aes_btn2.clicked.connect(self.aes_btn2_click)
# 将组件放入容器
btn_window_box.addWidget(aes_btn1)
btn_window_box.addWidget(aes_btn2)
# 创建便签
self.key_input_edit = QLineEdit(self)
self.key_input_edit.setPlaceholderText('请输入创建便签数量(必填)')
self.iv_input_edit = QLineEdit(self)
self.iv_input_edit.setPlaceholderText('请输入user_id(必填)')
self.text_input_edit = QLineEdit(self)
self.text_input_edit.setPlaceholderText('请输入sid(必填)')
click_btn = QPushButton('创建便签', self)
click_btn.clicked.connect(self.click_btn_notes_create)
self.output1 = QTextBrowser(self)
btn1_frame_box.addWidget(self.key_input_edit)
btn1_frame_box.addWidget(self.iv_input_edit)
btn1_frame_box.addWidget(self.text_input_edit)
btn1_frame_box.addWidget(click_btn)
btn1_frame_box.addWidget(self.output1)
# 删除便签
self.userId = QLineEdit(self)
self.userId.setPlaceholderText('请输入user_id(必填)')
self.sid = QLineEdit(self)
self.sid.setPlaceholderText('请输入sid(必填)')
click_btn_clear = QPushButton('删除便签', self)
click_btn_clear.clicked.connect(self.click_btn_notes_clear)
self.output2 = QTextBrowser(self)
btn2_frame_box.addWidget(self.userId)
btn2_frame_box.addWidget(self.sid)
btn2_frame_box.addWidget(click_btn_clear)
btn2_frame_box.addWidget(self.output2)
def aes_btn1_click(self):
'''显示或隐藏容器'''
self.btn1_frame.setVisible(True)
self.btn2_frame.setVisible(False)
def aes_btn2_click(self):
'''显示或隐藏容器'''
self.btn1_frame.setVisible(False)
self.btn2_frame.setVisible(True)
def click_btn_notes_create(self):
'''批量创建便签'''
num = self.key_input_edit.text().strip()
userId = self.iv_input_edit.text()
sid = self.text_input_edit.text()
data = DataCreate().note_create(num=int(num), user_id=userId, sid=sid)
res = "便签构建完成!便签编码如下:" + str(data)
self.output1.append(res)
def click_btn_notes_clear(self):
'''批量删除便签'''
userId = self.userId.text()
sid = self.sid.text()
res = all_notes_clear(user_id=userId, sid=sid)
print(res)
self.output2.append(res)
if __name__ == "__main__":
# 每一个pyqt程序中都需要有一个QApplication对象,sys.argv是一个命令行参数列表
app = QApplication(sys.argv)
# 实例化窗口
form = MainWindow()
# 窗口展示
form.show()
# 遇到退出情况,终止程序
sys.exit(app.exec_())
评论区