基于PyQt5的HTTP接口测试工具开发实战

随着互联网技术的快速发展,HTTP接口测试成为了软件开发和测试过程中的重要环节。为了提高测试效率和准确性,开发一个用户友好的HTTP接口测试工具显得尤为重要。本文将介绍如何使用Python和PyQt5

随着互联网技术的快速发展,HTTP接口测试成为了软件开发和测试过程中的重要环节。为了提高测试效率和准确性,开发一个用户友好的HTTP接口测试工具显得尤为重要。本文将介绍如何使用Python和PyQt5框架开发一个简单的HTTP接口测试工具。该工具不仅支持GET和POST两种请求方法,还允许用户自定义请求头,并能详细显示请求和响应的信息,帮助开发者快速定位和解决问题。

项目背景

随着互联网的发展,各种 API(应用程序编程接口)的使用日益广泛。无论是在构建前端和后端应用,还是在进行数据分析和集成时,测试 API 的能力都是基础技能之一。我们将用 PyQt5 创建一个简单的工具,允许用户输入请求 URL 和请求头,并能够选择请求方式(GET 或 POST),以查看返回结果。

具体的效果可以看看这个视频给你们的一个练习

技术栈

Python:作为主要编程语言。

PyQt5:用于创建图形用户界面。

Requests:用于发送 HTTP 请求。

用户界面

我们将创建一个简单的用户界面,包含以下组件:

  • URL 输入框

  • 请求方式下拉框(GET/POST)

  • 请求头设置表格(可以增加和删除行)

  • 发送请求的按钮

  • 显示信息的区域(包括请求和响应的详细信息)

以下是 setupUi 方法的代码,负责构建用户界面:

defsetupUi(self,Form):Form.setObjectName(\"Form\")Form.resize(900,600)self.verticalLayout=QtWidgets.QVBoxLayout(Form)#添加ComboBox选择请求方式self.comboBox=QtWidgets.QComboBox(Form)self.comboBox.addItem(\"GET\")self.comboBox.addItem(\"POST\")#添加LineEdit输入URLself.lineEdit=QtWidgets.QLineEdit(Form)self.lineEdit.setPlaceholderText(\"此处填写url\")#按钮用于发送请求self.pushButton=QtWidgets.QPushButton(Form)self.pushButton.setText(\"发送\")#请求头展示的表格self.tableWidget=QtWidgets.QTableWidget(Form)self.tableWidget.setColumnCount(2)self.tableWidget.setHorizontalHeaderLabels([\"名称\",\"值\"])#信息框self.listWidget=QtWidgets.QListWidget(Form)#组件布局self.verticalLayout.addWidget(self.comboBox)self.verticalLayout.addWidget(self.lineEdit)self.verticalLayout.addWidget(self.pushButton)self.verticalLayout.addWidget(self.tableWidget)self.verticalLayout.addWidget(self.listWidget)

核心功能实现

用户点击“发送”按钮后,将会根据输入的 URL 和请求头发送请求。下列是处理请求的 send_clicked方法:

defsend_clicked(self):input_url=self.ui.lineEdit.text()send_made=self.ui.comboBox.currentText()data_dict={}row_count=self.ui.tableWidget.rowCount()forrowinrange(row_count):key=self.ui.tableWidget.item(row,0).text()value=self.ui.tableWidget.item(row,1).text()data_dict[key]=valuetry:ifsend_made==\'GET\':rt=requests.get(url=input_url,headers=data_dict)else:rt=requests.post(url=input_url,headers=data_dict)exceptExceptionase:self.ui.listWidget.addItem(\'请求失败:\'+str(e))returnself.ui.listWidget.addItem(f\'状态码:{rt.status_code}\')forkey,valueinrt.headers.items():self.ui.listWidget.addItem(f\'{key}:{value}\')

结果展示

在信息框中,会显示请求的 URL、请求头信息及其响应状态码。这种实时反馈可以帮助开发者快速调试 API。

基于PyQt5的HTTP接口测试工具开发实战

如上图所示,在只填写url的情况下,发现状态码是412访问失败

基于PyQt5的HTTP接口测试工具开发实战

当我们把useragent填充之后,就可以正常访问网址了

完整代码

importsysimportrequestsfromPyQt5.QtWidgetsimportQApplication,QWidgetfromPyQt5importQtCore,QtGui,QtWidgetsclassUi_Form(object):defsetupUi(self,Form):Form.setObjectName(\"Form\")Form.resize(900,600)self.verticalLayout=QtWidgets.QVBoxLayout(Form)self.verticalLayout.setObjectName(\"verticalLayout\")self.horizontalLayout=QtWidgets.QHBoxLayout()self.horizontalLayout.setObjectName(\"horizontalLayout\")self.comboBox=QtWidgets.QComboBox(Form)self.comboBox.setObjectName(\"comboBox\")self.comboBox.addItem(\"\")self.comboBox.addItem(\"\")self.horizontalLayout.addWidget(self.comboBox)self.lineEdit=QtWidgets.QLineEdit(Form)self.lineEdit.setObjectName(\"lineEdit\")self.horizontalLayout.addWidget(self.lineEdit)self.pushButton=QtWidgets.QPushButton(Form)self.pushButton.setObjectName(\"pushButton\")self.horizontalLayout.addWidget(self.pushButton)self.verticalLayout.addLayout(self.horizontalLayout)self.horizontalLayout_2=QtWidgets.QHBoxLayout()self.horizontalLayout_2.setObjectName(\"horizontalLayout_2\")self.label=QtWidgets.QLabel(Form)self.label.setObjectName(\"label\")self.horizontalLayout_2.addWidget(self.label)spacerItem=QtWidgets.QSpacerItem(40,20,QtWidgets.QSizePolicy.Expanding,QtWidgets.QSizePolicy.Minimum)self.horizontalLayout_2.addItem(spacerItem)self.pushButton_2=QtWidgets.QPushButton(Form)self.pushButton_2.setObjectName(\"pushButton_2\")self.horizontalLayout_2.addWidget(self.pushButton_2)self.pushButton_3=QtWidgets.QPushButton(Form)self.pushButton_3.setObjectName(\"pushButton_3\")self.horizontalLayout_2.addWidget(self.pushButton_3)self.verticalLayout.addLayout(self.horizontalLayout_2)self.tableWidget=QtWidgets.QTableWidget(Form)self.tableWidget.setObjectName(\"tableWidget\")self.tableWidget.setColumnCount(2)self.tableWidget.setRowCount(0)item=QtWidgets.QTableWidgetItem()self.tableWidget.setHorizontalHeaderItem(0,item)item=QtWidgets.QTableWidgetItem()self.tableWidget.setHorizontalHeaderItem(1,item)self.verticalLayout.addWidget(self.tableWidget)self.label_2=QtWidgets.QLabel(Form)font=QtGui.QFont()font.setBold(True)font.setWeight(75)self.label_2.setFont(font)self.label_2.setObjectName(\"label_2\")self.verticalLayout.addWidget(self.label_2)self.listWidget=QtWidgets.QListWidget(Form)self.listWidget.setObjectName(\"listWidget\")self.verticalLayout.addWidget(self.listWidget)self.horizontalLayout_3=QtWidgets.QHBoxLayout()self.horizontalLayout_3.setObjectName(\"horizontalLayout_3\")spacerItem1=QtWidgets.QSpacerItem(40,20,QtWidgets.QSizePolicy.Expanding,QtWidgets.QSizePolicy.Minimum)self.horizontalLayout_3.addItem(spacerItem1)self.pushButton_4=QtWidgets.QPushButton(Form)font=QtGui.QFont()font.setBold(True)font.setWeight(75)self.pushButton_4.setFont(font)self.pushButton_4.setObjectName(\"pushButton_4\")self.horizontalLayout_3.addWidget(self.pushButton_4)spacerItem2=QtWidgets.QSpacerItem(40,20,QtWidgets.QSizePolicy.Expanding,QtWidgets.QSizePolicy.Minimum)self.horizontalLayout_3.addItem(spacerItem2)self.verticalLayout.addLayout(self.horizontalLayout_3)self.retranslateUi(Form)QtCore.QMetaObject.connectSlotsByName(Form)defretranslateUi(self,Form):_translate=QtCore.QCoreApplication.translateForm.setWindowTitle(_translate(\"Form\",\"HTTP接口测试\"))self.comboBox.setItemText(0,_translate(\"Form\",\"GET\"))self.comboBox.setItemText(1,_translate(\"Form\",\"POST\"))self.lineEdit.setPlaceholderText(_translate(\"Form\",\"此处填写url\"))self.pushButton.setText(_translate(\"Form\",\"发送\"))self.label.setText(_translate(\"Form\",\"请求头headers\"))self.pushButton_2.setText(_translate(\"Form\",\"+\"))self.pushButton_3.setText(_translate(\"Form\",\"-\"))item=self.tableWidget.horizontalHeaderItem(0)item.setText(_translate(\"Form\",\"名称\"))item=self.tableWidget.horizontalHeaderItem(1)item.setText(_translate(\"Form\",\"值\"))self.label_2.setText(_translate(\"Form\",\"信息框\"))self.pushButton_4.setText(_translate(\"Form\",\"清空\"))#绑定按钮self.pushButton.clicked.connect(Form.send_clicked)self.pushButton_2.clicked.connect(Form.add_row)self.pushButton_3.clicked.connect(Form.move_row)self.tableWidget.cellClicked.connect(Form.table_clicked)self.pushButton_4.clicked.connect(Form.clean_panel)#逻辑函数classMywindow(QWidget):def__init__(self):super().__init__()self.ui=Ui_Form()#实例化ui界面self.ui.setupUi(self)self.clicked_row=0#默认用户选择的是第0行self.info_text=[]deftable_clicked(self,row):self.clicked_row=rowdefsend_clicked(self):self.clean_panel()input_url=self.ui.lineEdit.text()send_made=self.ui.comboBox.currentText()#展示信息在面板上self.ui.listWidget.addItem(\'--------发送请求---------\')self.ui.listWidget.addItem(f\'用户要访问的网址是:{input_url}\')self.ui.listWidget.addItem(f\'用户访问对网址的请求方式是:{send_made}\')self.ui.listWidget.addItem(\'请求头如下:\')data_dict={}#获取行数row_count=self.ui.tableWidget.rowCount()#遍历每一行forrowinrange(0,row_count):key=self.ui.tableWidget.item(row,0).text()value=self.ui.tableWidget.item(row,1).text()dict1={f\'{key}\':f\'{value}\'}self.ui.listWidget.addItem(str(dict1))data_dict=dict1|data_dicttry:ifsend_made==\'GET\':rt=requests.get(url=input_url,headers=data_dict)else:rt=requests.post(url=input_url,headers=data_dict)except:self.ui.listWidget.addItem(\'url出错\')rt=404self.ui.listWidget.addItem(\'--------返回内容---------\')self.ui.listWidget.addItem(f\'状态码:{rt}\')ifnotrt==404:forkey,valueinrt.headers.items():self.ui.listWidget.addItem(f\'{key}:{value}\')defadd_row(self):self.ui.tableWidget.insertRow(self.ui.tableWidget.rowCount())defmove_row(self):self.ui.tableWidget.removeRow(self.clicked_row)self.clicked_row=0#把删除行置零defclean_panel(self):print(\'点击了清理\')self.ui.listWidget.clear()self.info_text=[]if__name__==\'__main__\':app=QApplication(sys.argv)window=Mywindow()window.show()sys.exit(app.exec_())

完整的代码已经在前面展示。确保已经安装 PyQt5 和 requests 库,可以通过以下命令安装:

pipinstallPyQt5requests

总结

本文详细介绍了如何使用Python和PyQt5开发一个功能齐全的HTTP接口测试工具。通过组合框选择请求方法、输入URL、设置请求头等操作,用户可以轻松发送HTTP请求,并查看详细的请求和响应信息。该工具不仅界面友好,操作简便,还具有良好的异常处理机制,能够有效帮助开发者进行接口测试和调试。通过本文的介绍,读者可以了解到如何结合Python和PyQt5实现一个实用的HTTP接口测试工具,从而提升开发和测试效率。

本站部分文章来自网络或用户投稿,如无特殊说明或标注,均为本站原创发布。涉及资源下载的,本站旨在共享仅供大家学习与参考,如您想商用请获取官网版权,如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
开发者

Mysql修改root密码的四种方法详解

2025-1-14 3:00:56

电脑百科

win7启动usb口不能用(win7更改usb启动不怎么回事)

2022-8-22 19:38:53

搜索