侧边栏壁纸
  • 累计撰写 31 篇文章
  • 累计创建 14 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

从0到1写一个小工具

AllyTester
2025-01-25 / 0 评论 / 0 点赞 / 22 阅读 / 0 字

在测试开发工作中,避免不了要进行一些重复繁杂不便的事项,那如何提高效率,简化测试流程呢,工具开发就是一个可选择的手段,那今天就基于 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_())

0

评论区