欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實戰(zhàn)之使用PyQt5構建HTTP接口測試工具

 更新時間:2024年11月18日 11:19:40   作者:兆。  
在現(xiàn)代軟件開發(fā)中,測試接口的有效性與響應情況變得尤為重要,本文將指導構建一個簡單的HTTP接口測試工具,使用Python的PyQt5庫創(chuàng)建用戶界面,并通過requests庫發(fā)送 HTTP 請求,需要的可以參考下

項目背景

隨著互聯(lián)網(wǎng)的發(fā)展,各種 API(應用程序編程接口)的使用日益廣泛。無論是在構建前端和后端應用,還是在進行數(shù)據(jù)分析和集成時,測試 API 的能力都是基礎技能之一。我們將用 PyQt5 創(chuàng)建一個簡單的工具,允許用戶輸入請求 URL 和請求頭,并能夠選擇請求方式(GET 或 POST),以查看返回結果。

具體的效果可以看看這個視頻給你們的一個練習

技術棧

Python:作為主要編程語言。

PyQt5:用于創(chuàng)建圖形用戶界面。

Requests:用于發(fā)送 HTTP 請求。

用戶界面

我們將創(chuàng)建一個簡單的用戶界面,包含以下組件:

  • URL 輸入框
  • 請求方式下拉框(GET/POST)
  • 請求頭設置表格(可以增加和刪除行)
  • 發(fā)送請求的按鈕
  • 顯示信息的區(qū)域(包括請求和響應的詳細信息)

以下是 setupUi 方法的代碼,負責構建用戶界面:

def setupUi(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")
    
    # 按鈕用于發(fā)送請求
    self.pushButton = QtWidgets.QPushButton(Form)
    self.pushButton.setText("發(fā)送")
    
    # 請求頭展示的表格
    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)

核心功能實現(xiàn)

用戶點擊“發(fā)送”按鈕后,將會根據(jù)輸入的 URL 和請求頭發(fā)送請求。下列是處理請求的 send_clicked方法:

def send_clicked(self):
    input_url = self.ui.lineEdit.text()
    send_made = self.ui.comboBox.currentText()
    
    data_dict = {}
    
    row_count = self.ui.tableWidget.rowCount()
    for row in range(row_count):
        key = self.ui.tableWidget.item(row, 0).text()
        value = self.ui.tableWidget.item(row, 1).text()
        data_dict[key] = value
    
    try:
        if send_made == 'GET':
            rt = requests.get(url=input_url, headers=data_dict)
        else:
            rt = requests.post(url=input_url, headers=data_dict)
    except Exception as e:
        self.ui.listWidget.addItem('請求失敗: ' + str(e))
        return

???????    self.ui.listWidget.addItem(f'狀態(tài)碼:{rt.status_code}')
    
    for key, value in rt.headers.items():
        self.ui.listWidget.addItem(f'{key}: {value}')

結果展示

在信息框中,會顯示請求的 URL、請求頭信息及其響應狀態(tài)碼。這種實時反饋可以幫助開發(fā)者快速調試 API。

如上圖所示,在只填寫url的情況下,發(fā)現(xiàn)狀態(tài)碼是412訪問失敗

當我們把useragent填充之后,就可以正常訪問網(wǎng)址了

完整代碼

import sys
import requests
from PyQt5.QtWidgets import QApplication,QWidget
from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Form(object):
    def setupUi(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)

    def retranslateUi(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", "發(fā)送"))
        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)

# 邏輯函數(shù)
class Mywindow(QWidget):
    def __init__(self):
        super().__init__()
        self.ui = Ui_Form() # 實例化ui界面
        self.ui.setupUi(self)
        self.clicked_row = 0 # 默認用戶選擇的是第0行
        self.info_text = []

    def table_clicked(self,row):
        self.clicked_row = row

    def send_clicked(self):
        self.clean_panel()
        input_url = self.ui.lineEdit.text()
        send_made = self.ui.comboBox.currentText()
        # 展示信息在面板上
        self.ui.listWidget.addItem('--------發(fā)送請求---------')
        self.ui.listWidget.addItem(f'用戶要訪問的網(wǎng)址是:{input_url}')
        self.ui.listWidget.addItem(f'用戶訪問對網(wǎng)址的請求方式是:{send_made}')
        self.ui.listWidget.addItem('請求頭如下:')

        data_dict = {}
        # 獲取行數(shù)
        row_count = self.ui.tableWidget.rowCount()
        # 遍歷每一行
        for row in range(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:
            if send_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'狀態(tài)碼:{rt}')
        if not rt == 404:
            for key,value in rt.headers.items():
                self.ui.listWidget.addItem(f'{key}  :  {value}')

    def add_row(self):
        self.ui.tableWidget.insertRow(self.ui.tableWidget.rowCount())

    def move_row(self):
        self.ui.tableWidget.removeRow(self.clicked_row)
        self.clicked_row = 0  # 把刪除行置零

    def clean_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_())

完整的代碼已經(jīng)在前面展示。確保已經(jīng)安裝 PyQt5 和 requests 庫,可以通過以下命令安裝:

pip install PyQt5 requests

總結

本項目展示了如何用 PyQt5 來構建 GUI 應用程序,并通過 requests 庫發(fā)送 HTTP 請求。這不僅是學習 PyQt5 的一個好方法,也為后續(xù)實現(xiàn)更復雜的 API 測試工具奠定了基礎。

到此這篇關于Python實戰(zhàn)之使用PyQt5構建HTTP接口測試工具的文章就介紹到這了,更多相關Python HTTP接口測試內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python3隨機漫步生成數(shù)據(jù)并繪制

    Python3隨機漫步生成數(shù)據(jù)并繪制

    這篇文章主要為大家詳細介紹了Python3隨機漫步生成數(shù)據(jù)并繪制的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • python3讀取autocad圖形文件.py實例

    python3讀取autocad圖形文件.py實例

    這篇文章主要介紹了python3讀取autocad圖形文件.py實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • python爬蟲獲取多頁天涯帖子

    python爬蟲獲取多頁天涯帖子

    本篇文章通過爬取多頁天涯帖子內容來教給大家深入理解python爬蟲相關知識,有興趣的參考學習下。
    2018-02-02
  • Python學習入門之區(qū)塊鏈詳解

    Python學習入門之區(qū)塊鏈詳解

    區(qū)塊鏈的基礎概念很簡單:一個分布式數(shù)據(jù)庫,存儲一個不斷加長的 list,list 中包含著許多有序的記錄。下面這篇文章主要給大家介紹了關于Python學習入門之區(qū)塊鏈的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友們下面來一起看看吧。
    2017-07-07
  • 解決Python使用列表副本的問題

    解決Python使用列表副本的問題

    今天小編就為大家分享一篇解決Python使用列表副本的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python內建類型bytes深入理解

    Python內建類型bytes深入理解

    這篇文章主要為大家介紹了Python內建類型bytes的深入理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • Python中json常見四種用法舉例

    Python中json常見四種用法舉例

    這篇文章主要給大家介紹了關于Python中json常見四種用法舉例的相關資料,眾所周知JSON是一種輕量級的數(shù)據(jù)交換格式,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-08-08
  • Python callable()函數(shù)用法實例分析

    Python callable()函數(shù)用法實例分析

    這篇文章主要介紹了Python callable()函數(shù)用法,結合實例形式分析了Python callable()函數(shù)的功能、使用方法及相關操作注意事項,需要的朋友可以參考下
    2018-03-03
  • Python源碼解析之List

    Python源碼解析之List

    今天帶大家來復習Python底層代碼LIST,文中有非常詳細的介紹及代碼示例,對正在學習python的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • 淺析Python中的元編程

    淺析Python中的元編程

    Python元編程是指在運行時對Python代碼進行操作的技術,它可以動態(tài)地生成、修改和執(zhí)行代碼,從而實現(xiàn)一些高級的編程技巧,本文就來和大家詳細聊聊吧
    2023-03-03

最新評論