Проверка подключения к интернету
#1
Отправлено 09 апреля 2012 - 07:53
Задался себе вопросом - а как лучше всего организовать проверку подключения к интернету по средствам TC?
Данным инструментом провожу функциональное тестирование веб-страницы. так вопрос стоит в том, чтобы самым первым делом в тесте шла проверка на наличие интернета. Т.е. если проверка провалилась, тест дальше не шел.
В голове есть вариант (и он на данный момент реализован): Переход на определенный урл (скажем яндекс) и проверка по какому-нибудь элементу, скажем по caption окна браузера. Но тут тоже проверку не всегда можно назвать правдивой - ведь может и кэпшн поменяться и например сайт яндекса ляжет и т.д.
Поделитесь пожалуйста своими умными мыслями по данному поводу.
Спасибо
#2
Отправлено 09 апреля 2012 - 08:41
#3
Отправлено 09 апреля 2012 - 14:49
Я просто не представляю как это реализовать. запустить cmd команду на пинг из TC смогу, а вот как получить результат пинга и как его обработать?!
#4
Отправлено 09 апреля 2012 - 15:04
Про пинг теоритически понятно, а вот как это будет выглядеть на практике?
Я просто не представляю как это реализовать. запустить cmd команду на пинг из TC смогу, а вот как получить результат пинга и как его обработать?!
После получения из окна CMD текста, надо поискать фрагмент, соответствующий наличию или отсутствию пинга.
#5
Отправлено 09 апреля 2012 - 15:14
В FAQ рекомендуют так или так (смотрите раздел про StdIn\StdOut ), но, как по мне, проще вызывать пинг так:Про пинг теоритически понятно, а вот как это будет выглядеть на практике?
Я просто не представляю как это реализовать. запустить cmd команду на пинг из TC смогу, а вот как получить результат пинга и как его обработать?!
ping ya.ru >> pingresults.txt
а потом уже парсить результаты из файла. По поводу обработки, просто посмотрите на результаты отправки пакетов, если Lost = 0, то все Ок.
Как-то так.
Хотя... вот красивый вариант по факу:
function isConnectionUp(){ var shell = new ActiveXObject("WScript.Shell"); var WshShellObj = new ActiveXObject("WScript.Shell"); var WshShellExecObj = WshShellObj.Exec("cmd.exe"); readTillChar(WshShellExecObj, ">"); WshShellExecObj.StdIn.Write("ping ya.ru\n"); var out = readTillChar(WshShellExecObj, ">"); var lostPattern = /.*Lost = 0.*/; return lostPattern.test(out); } function readTillChar(WshShellExecObj, endChar){ var out = ""; var curChar; while (!WshShellExecObj.StdOut.AtEndOfStream) { curChar = WshShellExecObj.StdOut.Read(1); out += curChar; if (curChar == endChar) break; } return out; } function test(){ Log.Message(isConnectionUp()); }
#6
Отправлено 09 апреля 2012 - 15:44
Лично мне больше нравится вариант с WMI-классом Win32_PingStatus:Про пинг теоритически понятно, а вот как это будет выглядеть на практике?
Я просто не представляю как это реализовать. запустить cmd команду на пинг из TC смогу, а вот как получить результат пинга и как его обработать?!
http://www.robvander...etwork_ping.php
В таком случае не надо возиться с cmd и парсить результат.
#7
Отправлено 10 апреля 2012 - 06:25
Про пинг теоритически понятно, а вот как это будет выглядеть на практике?
Я просто не представляю как это реализовать. запустить cmd команду на пинг из TC смогу, а вот как получить результат пинга и как его обработать?!
Хотя... вот красивый вариант по факу:function isConnectionUp(){ var shell = new ActiveXObject("WScript.Shell"); var WshShellObj = new ActiveXObject("WScript.Shell"); var WshShellExecObj = WshShellObj.Exec("cmd.exe"); readTillChar(WshShellExecObj, ">"); WshShellExecObj.StdIn.Write("ping ya.ru\n"); var out = readTillChar(WshShellExecObj, ">"); var lostPattern = /.*Lost = 0.*/; return lostPattern.test(out); } function readTillChar(WshShellExecObj, endChar){ var out = ""; var curChar; while (!WshShellExecObj.StdOut.AtEndOfStream) { curChar = WshShellExecObj.StdOut.Read(1); out += curChar; if (curChar == endChar) break; } return out; } function test(){ Log.Message(isConnectionUp()); }
Странно, просто скопировал данный пример и вставил в проект. запустил и всегда возвращает false
#8
Отправлено 10 апреля 2012 - 07:27
Если у вас локаль не английская, то паттерн "Lost = 0" надо заменить на локализованный.
Про пинг теоритически понятно, а вот как это будет выглядеть на практике?
Я просто не представляю как это реализовать. запустить cmd команду на пинг из TC смогу, а вот как получить результат пинга и как его обработать?!
Хотя... вот красивый вариант по факу:function isConnectionUp(){ var shell = new ActiveXObject("WScript.Shell"); var WshShellObj = new ActiveXObject("WScript.Shell"); var WshShellExecObj = WshShellObj.Exec("cmd.exe"); readTillChar(WshShellExecObj, ">"); WshShellExecObj.StdIn.Write("ping ya.ru\n"); var out = readTillChar(WshShellExecObj, ">"); var lostPattern = /.*Lost = 0.*/; return lostPattern.test(out); } function readTillChar(WshShellExecObj, endChar){ var out = ""; var curChar; while (!WshShellExecObj.StdOut.AtEndOfStream) { curChar = WshShellExecObj.StdOut.Read(1); out += curChar; if (curChar == endChar) break; } return out; } function test(){ Log.Message(isConnectionUp()); }
Странно, просто скопировал данный пример и вставил в проект. запустил и всегда возвращает false
#9
Отправлено 10 апреля 2012 - 07:37
До, Вы правы, русская версия винды. Но вот теперь возникает следующий вопрос - Вместо Lost=0 пишет потеряно = 0. Но русские символы в данную строчку кода не катят. Что-то я совсем невнимательный и не могу разобраться в чем делоЕсли у вас локаль не английская, то паттерн "Lost = 0" надо заменить на локализованный.
Про пинг теоритически понятно, а вот как это будет выглядеть на практике?
Я просто не представляю как это реализовать. запустить cmd команду на пинг из TC смогу, а вот как получить результат пинга и как его обработать?!
Хотя... вот красивый вариант по факу:function isConnectionUp(){ var shell = new ActiveXObject("WScript.Shell"); var WshShellObj = new ActiveXObject("WScript.Shell"); var WshShellExecObj = WshShellObj.Exec("cmd.exe"); readTillChar(WshShellExecObj, ">"); WshShellExecObj.StdIn.Write("ping ya.ru\n"); var out = readTillChar(WshShellExecObj, ">"); var lostPattern = /.*Lost = 0.*/; return lostPattern.test(out); } function readTillChar(WshShellExecObj, endChar){ var out = ""; var curChar; while (!WshShellExecObj.StdOut.AtEndOfStream) { curChar = WshShellExecObj.StdOut.Read(1); out += curChar; if (curChar == endChar) break; } return out; } function test(){ Log.Message(isConnectionUp()); }
Странно, просто скопировал данный пример и вставил в проект. запустил и всегда возвращает false
Прикрепленные файлы
#10
Отправлено 10 апреля 2012 - 07:44
До, Вы правы, русская версия винды. Но вот теперь возникает следующий вопрос - Вместо Lost=0 пишет потеряно = 0. Но русские символы в данную строчку кода не катят. Что-то я совсем невнимательный и не могу разобраться в чем дело
var lostPattern = new RegExp(".*потеряно = 0.*")
А вообще выше предложили вариант с WMI, который куда как лучше.
#11
Отправлено 10 апреля 2012 - 07:52
C WMI возможно стоит разобраться, правда фигово, что там Vbscript. А насчет данного кода (все таки хочется разобраться, и так сказать добить его) Все равно возвращает false. Пробовал только цифры вставлять - все ок, с русским текстом - никак. Возможно кодировки другие?
До, Вы правы, русская версия винды. Но вот теперь возникает следующий вопрос - Вместо Lost=0 пишет потеряно = 0. Но русские символы в данную строчку кода не катят. Что-то я совсем невнимательный и не могу разобраться в чем делоvar lostPattern = new RegExp(".*потеряно = 0.*")
А вообще выше предложили вариант с WMI, который куда как лучше.
Прикрепленные файлы
#12
Отправлено 10 апреля 2012 - 08:02
Ну, если хочется добить, то добивайте http://stackoverflow...lish-characters . Я забыл, что в JS с юникодом не так просто.C WMI возможно стоит разобраться, правда фигово, что там Vbscript. А насчет данного кода (все таки хочется разобраться, и так сказать добить его) Все равно возвращает false. Пробовал только цифры вставлять - все ок, с русским текстом - никак. Возможно кодировки другие?
А что касается WMI, то я не очень понимаю в чем проблема. Если не знаете как им пользоваться, то найдите любой пример на JS и просто подставьте в него нужный запрос. Это будет самое надежное и быстрое решение.
#13
Отправлено 10 апреля 2012 - 08:56
Не серчайте пожалуйста, но с WMI что-то очень тяжко. Я немного не улавливаю логику (видимо не вспался + еще только начинаю разбираться в программинге) но тут такой момент, нашел пример, поштудировал хелп и собрал примерно такую солянку, как на скриншоте. Но отказывается работать. Дайте пожалуйста хотя бы намек, либо примерно готовый вариант. Хочется реально разобраться. СпасибоНу, если хочется добить, то добивайте http://stackoverflow...lish-characters . Я забыл, что в JS с юникодом не так просто.
C WMI возможно стоит разобраться, правда фигово, что там Vbscript. А насчет данного кода (все таки хочется разобраться, и так сказать добить его) Все равно возвращает false. Пробовал только цифры вставлять - все ок, с русским текстом - никак. Возможно кодировки другие?
А что касается WMI, то я не очень понимаю в чем проблема. Если не знаете как им пользоваться, то найдите любой пример на JS и просто подставьте в него нужный запрос. Это будет самое надежное и быстрое решение.
Прикрепленные файлы
#14
Отправлено 10 апреля 2012 - 09:01
Не серчайте пожалуйста, но с WMI что-то очень тяжко. Я немного не улавливаю логику (видимо не вспался + еще только начинаю разбираться в программинге) но тут такой момент, нашел пример, поштудировал хелп и собрал примерно такую солянку, как на скриншоте. Но отказывается работать. Дайте пожалуйста хотя бы намек, либо примерно готовый вариант. Хочется реально разобраться. Спасибо
Ну, если хочется добить, то добивайте http://stackoverflow...lish-characters . Я забыл, что в JS с юникодом не так просто.
C WMI возможно стоит разобраться, правда фигово, что там Vbscript. А насчет данного кода (все таки хочется разобраться, и так сказать добить его) Все равно возвращает false. Пробовал только цифры вставлять - все ок, с русским текстом - никак. Возможно кодировки другие?
А что касается WMI, то я не очень понимаю в чем проблема. Если не знаете как им пользоваться, то найдите любой пример на JS и просто подставьте в него нужный запрос. Это будет самое надежное и быстрое решение.
Все, разобрался, прошу у всех прощения за отобранное время. Спасибо за помощь.
Все дело в InstanceOf! (точно не выспался). Необходимо использовать ExecQuery.
Вот тебе называется и собрал солянку.
Если я правильно понял, то возвращаемое значение 0 в лог означает - норм. пинг?
Кстати мало ли кому пригодится код:
function Ping(host) { var wmi = GetObject("Winmgmts:"); var eStatus = new Enumerator(wmi.ExecQuery("Select StatusCode from Win32_PingStatus Where Address='" + host + "'")); if (eStatus.item().StatusCode == 0){ Log.Message("Internet OK"); } else{ Log.Message("Internet Isn't OK"); } } function Test() { Ping("ya.ru") }
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных