-. --
- : -= Klyopa =-
- :.
- :
. .- Тестирование
:. -:. -. .: Интернет соединения
: :. : :
:. .- - - - :
: .- .-::.... ....:.: -- -
-. - -.. .:--.-.: -
-. :. ...:-- -.
- .-. :*-..:. .. ..
.. ..: +: . -. . .
.. -::* :*:: ....-:- .. -
-- .-:.: -.:- ..: Сервис предоставляется
-: .....-. - .: ..- OKKLA
-:-:- .. - -. :..: www.speedtest.net
.-. .. ..::. .-
.-- .:..... -.. -
:.----. .--
-. .-:::-.
Скрипт написан на python v.3
. Вы можете использовать скрипт на любой операционной системе через
интерпретатор python3
.
- убедитесь в доступности
python3
- рекомендуется разворачивать скрипт в виртуальном окружении python
python3 -m venv _имя_вашего_окружения
- скачайте код по ссылке, распакуйте его
- из под активированного виртуального окружения установите зависимости через pip
pip install -r requirements.txt
- запустите скрипт
python main.py
Для удобства пользователей Windows, скрипт и все зависимости упакованы в один exe
файл. Для запуска скачайте файл zip
из папки Windows
данного репозитория, распакуйте zip
и запустите файл exe
. Дополнительно никаких зависимостей устанавливать не надо.
При этом, в файл exe
пакуется только стабильная версия.
В некоторых случаях под Windows, после запуска скрипта закрывается окно консоли. Во избежание данной ошибки запустите start.cmd
из архива.
Вы можете изменять start.cmd
путем добавления/удаления символов ::
для выбора той или иной команды.
В одном из тестов (п.2.1) описывается необходимость запуска скрипта с правами Администратора. В любой операционной системе, если вы запускаете скрипт через интерпретатор python3
, то виртуальное окружение также должно быть активированно из под учетной записи Администратора.
Остальные тесты работают из под пользовательской среды.
Первоначальная задача скрипта - получить более/менее объективные результаты тестирования Интернет соединения с возможностью распределния по направлениям и по времени (например, с помощью планировщика задач), и, главное, без участия пользователя.
Сценарии использования различны:
- косвенный показатель качества услуг доступа в Интернет в корпоративных средах при приемке канала связи в эксплуатацию;
- периодический мониторинг качества предоставляемой услуги;
- сравнение предложений различных провайдеров;
- оценка "последней мили" и/или конретного направления.
Сервис тестирования Интернет соединения основан на технологиях OKKLA. Скрипт прорабатывает следующие шаги:
- определение текущего IP адреса, имени провайдера связи и локацию;
- определение наилучшего сервера и проведение теста (алгоритм OKKLA);
- определение списка ближайших серверов и проведение тестов (алгоритм OKKLA);
- тесты co случайно выбранными серверами текущей локации;
- тесты co случайно выбранными серверами по всему миру;
- генерация отчета в консоли и локального файла
report_дата+время.html
.
ВАЖНО: скрипт работает только с прямым Интернет-соединением, нет поддержки прокси-серверов
Добавлена возможность тестирования узла провайдера icmp запросами. Таким образом, приходит понимание качества "последней мили". Для запуска ping
в направлении узла оператора необходимо воспользоваться аргументами командной строки.
ВАЖНО: для проведения icmp тестов скрипт необходимо запускать с правами Администратора (root)
Доступные аргументы:
- --help - справка
- --node - указываем имя или ip адрес узла провайдера, который тестируем, например:
--node ttk.ru
или --node 8.8.8.8
- --number_of_tests - количество icmp пакетов для проведения теста (по умолчанию 10000 пакетов), примеры:
--number_of_tests 100
- --packet_size - размер icmp пакета в байтах (по умолчанию 996 байт). Для совместимости с различными операционными системами действиует ограничение на максимальный размер пакета в 996 байт. Примеры:
--packet_size 64
-
--server_mode - режим сервера speedtest (не реализовано)
-
--ratio_of_global_tests - коэффициент количества глобальных тестов скорости Интернет соединения (по умолчанию 3).
Подробнее: данный аргумент относится к основному функционалу тестирования Интернет соединения. В алгоритме скрипта заложенны тесты co случайно выбранными серверами текущей локации и всего мира. При проведении таких тестов, минимум тестируется три случайных сервера по текущей локации (ближайший, средней удаленности и территориально удаленный сервер) и три аналогичных сервера по всему миру. Итого 3+3=6 тестов. Данный аргумент позволяет увеличить количество выбранных серверов для тестов. Например:
--ratio_of_global_tests 2
- увеличивает количество серверов для тестов в два раза (3 * 2 + 3 * 2 = 12)--ratio_of_global_tests 3
- это значение по умолчанию, всего тестов с 18-ю серверами (3 * 3 + 3 * 3 = 18)
Примеры командных строк:
- через интерпретатор
python3 main.py --node ttk.ru --number_of_tests 1000 --packet_size 64 --ratio_of_global_tests 1
Тестируем ttk.ru 1000-ю icmp пакетами размером по 64 байта. Глобальных тестов скорости - 6 шт.
- через exe-файл (windows)
main.exe --node 8.8.8.8 --ratio_of_global_tests 5
Тестируем ip 8.8.8.8, количество пакетов 10000 (значение по умолчанию), размер пакетов 996 байт (значение по умолчанию). Количество глобальных тестов скорости - 30 шт.
Результаты icmp тестов консолидируются в таблицу. Таблица попадает в report.html, а также отображается в консоли.
Следующие тесты были включены в тело скрипта:
- наличие Интернет соединения (проверяется доступ к google.com)
- наличие прав Администратора (root) при icmp тестах
- проверка доступности узла провайдера для icmp тестирования посредством DNS
- ограничено значение
ratio_of_global_tests
от 1 до 10 (от 6 до 60 тестов, соответвенно) - проверка размера icmp пакета от 1 до 996 байт
- ограничено значение
number_of_tests
от 1 до 10000 пакетов
TODO
- отчет, что ещё добавить?
- улучшить алгоритм определения территориально удаленных серверов (сейчас это основано на OKKLA с сильной погрешностью)
- проправить баг завершения работы скрипта в случае ошибки (только версия для windows)