Скрипт за тест на интернет скорост

В тази статия ще разгледаме как да създадем професионално приложение за тест на интернет скорост. Скриптът използва библиотеките tkinter, speedtest-cli, и threading на Python. Той предоставя лесен за употреба графичен интерфейс (GUI), който измерва скоростта на сваляне и качване на интернет връзката, както и пинг-а.

Инсталация на Нужните Библиотеки

За да изпълните този скрипт, трябва да инсталирате нужните библиотеки. Следвайте стъпките по-долу:

1. Инсталация на speedtest-cli

Тази библиотека се използва за извършване на тестовете за интернет скорост. За да я инсталирате, отворете терминала или командния ред и въведете следната команда:

pip install speedtest-cli

2. Вградените библиотеки

Библиотеките tkinter и threading са вградени в Python. Те не изискват допълнителна инсталация.

Структура на Скрипта

1. Създаване на клас за GUI
2. Настройка на стиловете
3. Създаване на графични компоненти
4. Стартиране на теста
5. Изпълнение на теста за скорост
6. Стартиране на приложението

Ето някои от ключовите характеристики

  1. Измерва скоростта на сваляне и качване в Mbps.
  2. Показва пинга в милисекунди.
  3. Предоставя информация за доставчика на интернет услуги (ISP).
  4. Има удобен и професионален интерфейс с прогрес бар.
  5. Използва многонишково програмиране, за да не блокира интерфейса по време на теста.
  6. Обработва грешки и показва съобщения при проблеми.

Как да започнете

Трябва да започнете със създаване на нов файл с разширение ".py". Отворете любимият си текстов редактор и добавете следният код:

import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
import speedtest
import threading
import socket

class SpeedtestGUI:
    def __init__(self, master):
        self.master = master
        master.title("Fedya Speedtest")
        master.geometry("400x550")
        master.configure(bg="#2c3e50")

        style = ttk.Style()
        style.theme_use("clam")

        # Общи стилове
        style.configure("TButton", padding=10, font=("Arial", 12), background="#2980b9", foreground="white")
        style.map("TButton", background=[('active', '#3498db')])
        style.configure("TLabel", background="#2c3e50", foreground="white", font=("Arial", 12))
        style.configure("Header.TLabel", font=("Arial", 16, "bold"), background="#2c3e50", foreground="#ecf0f1")
        style.configure("TFrame", background="#34495e")

        # Прогрес бар стил
        style.configure("TProgressbar", thickness=10, troughcolor="#34495e", background="#3498db")

        self.create_widgets()

    def create_widgets(self):
        header = ttk.Label(self.master, text="Измерване на интернет скорост", style="Header.TLabel")
        header.pack(pady=20)

        self.progress = ttk.Progressbar(self.master, orient="horizontal", length=300, mode="indeterminate")
        self.progress.pack(pady=10)

        self.result_frame = ttk.Frame(self.master, padding="10")
        self.result_frame.pack(fill="x", padx=20)

        labels = ["Скорост на сваляне:", "Скорост на качване:", "Пинг:", "ISP:"]
        self.result_labels = {}

        for label in labels:
            ttk.Label(self.result_frame, text=label).grid(column=0, row=len(self.result_labels), sticky="w", pady=5)
            result_label = ttk.Label(self.result_frame, text="", font=("Arial", 12, "bold"), foreground="#ecf0f1")
            result_label.grid(column=1, row=len(self.result_labels), sticky="e", pady=5)
            self.result_labels[label] = result_label

        self.start_button = ttk.Button(self.master, text="Започни тест", command=self.start_speedtest)
        self.start_button.pack(pady=20)

        self.status_label = ttk.Label(self.master, text="", font=("Arial", 10, "italic"), background="#2c3e50", foreground="#bdc3c7")
        self.status_label.pack(pady=10)

    def start_speedtest(self):
        self.start_button.config(state="disabled")
        self.progress.start()
        self.status_label.config(text="Тестът започна. Моля, изчакайте...")
        threading.Thread(target=self.run_speedtest, daemon=True).start()

    def run_speedtest(self):
        try:
            s = speedtest.Speedtest()
            self.master.after(0, self.update_status, "Избиране на най-добър сървър...")
            s.get_best_server()
            self.master.after(0, self.update_status, "Измерване на скорост на сваляне...")
            download_speed = s.download() / 1_000_000  # Convert to Mbps
            self.master.after(0, self.update_status, "Измерване на скорост на качване...")
            upload_speed = s.upload() / 1_000_000  # Convert to Mbps
            ping = s.results.ping
            isp = s.results.client["isp"]

            self.master.after(0, self.update_results, download_speed, upload_speed, ping, isp)
        except Exception as e:
            self.master.after(0, self.show_error, str(e))
        finally:
            self.master.after(0, self.reset_ui)

    def update_results(self, download, upload, ping, isp):
        self.result_labels["Скорост на сваляне:"].config(text=f"{download:.2f} Mbps")
        self.result_labels["Скорост на качване:"].config(text=f"{upload:.2f} Mbps")
        self.result_labels["Пинг:"].config(text=f"{ping:.2f} ms")
        self.result_labels["ISP:"].config(text=isp)
        self.status_label.config(text="Тестът завърши успешно!")

    def show_error(self, error_message):
        messagebox.showerror("Грешка", f"Възникна грешка при теста: {error_message}")

    def reset_ui(self):
        self.progress.stop()
        self.start_button.config(state="normal")

    def update_status(self, status):
        self.status_label.config(text=status)

if __name__ == "__main__":
    root = tk.Tk()
    app = SpeedtestGUI(root)
    root.mainloop()

Запазете файла и му дайте име, примерно speedtest-gui.py

Стартиране на скрипта

За да стартирате скрипта, просто кликнете два пъти върху файла speedtest-gui.py

Заключение

Този скрипт предоставя лесен и професионален начин за измерване на интернет скоростта чрез графичен интерфейс. С минимални настройки и лесна инсталация, можете да получите точни резултати за скоростта на вашата интернет връзка. Ако следвате внимателно инструкциите, ще можете бързо и лесно да създадете свое собствено приложение за тест на интернет скорост.

Благодарим ви за прочитането на статията! Ако намерихте информацията за полезна, можете да дарите посредством бутоните по-долу: