基于PyQt5的HTTP接口测试工具开发实战
近期有些网友想要了解基于PyQt5的HTTP接口测试工具开发实战的相关情况,小编通过整理给您分析,同时介绍一下有关信息。
随着互联网技术的快速发展,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输入URL self.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]=value try: 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)) return self.ui.listWidget.addItem(f'状态码:{rt.status_code}') forkey,valueinrt.headers.items(): self.ui.listWidget.addItem(f'{key}:{value}')
结果展示
在信息框中,会显示请求的 URL、请求头信息及其响应状态码。这种实时反馈可以帮助开发者快速调试 API。
如上图所示,在只填写url的情况下,发现状态码是412访问失败
当我们把useragent填充之后,就可以正常访问网址了
完整代码
importsys importrequests fromPyQt5.QtWidgetsimportQApplication,QWidget fromPyQt5importQtCore,QtGui,QtWidgets classUi_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.translate Form.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=row defsend_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_dict try: 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=404 self.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接口测试工具,从而提升开发和测试效率。
推荐阅读
-
基于PyQt5的HTTP接口测试工具开发实战
-
Java中的URL编码(URLDecoder)与解码(URLEncoder)使用详解
-
Mysql修改root密码的四种方法详解
-
JavaScript中保留两位小数的多种实现方法
-
PHP调用API接口详解:从基础到实践
-
Python中使用PyYAML库来读取、解析和处理YAML文件的方法
近期有些网友想要了解Python中使用PyYAML库来读取、解析和处理YAML文件的方法的相关情况,小编通过整理给您分析,同时介绍...
-
使用Python中的BeautifulSoup (bs4) 解析复杂HTML内容的技巧与示例
-
Microsoft SQL Server 2012 数据库安装图文教程
-
PHP获取本机ip地址实例代码详解
-
C#使用iTextSharp库将图片转换为PDF的步骤及实例代码解析