Перейти к содержимому

Фотография

Проверка подключения к интернету


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 14

#1 dguminsk

dguminsk

    Новый участник

  • Members
  • Pip
  • 44 сообщений
  • ФИО:Серебрянников Валентин Олегович


Отправлено 09 апреля 2012 - 07:53

Еще раз Здравствуйте.
Задался себе вопросом - а как лучше всего организовать проверку подключения к интернету по средствам TC?
Данным инструментом провожу функциональное тестирование веб-страницы. так вопрос стоит в том, чтобы самым первым делом в тесте шла проверка на наличие интернета. Т.е. если проверка провалилась, тест дальше не шел.
В голове есть вариант (и он на данный момент реализован): Переход на определенный урл (скажем яндекс) и проверка по какому-нибудь элементу, скажем по caption окна браузера. Но тут тоже проверку не всегда можно назвать правдивой - ведь может и кэпшн поменяться и например сайт яндекса ляжет и т.д.
Поделитесь пожалуйста своими умными мыслями по данному поводу.
Спасибо
  • 0

#2 SergeyP

SergeyP

    Специалист

  • Members
  • PipPipPipPipPip
  • 651 сообщений
  • Город:Москва

Отправлено 09 апреля 2012 - 08:41

Можно пропинговать парочку-другую заведомо надежных адресов.
  • 0

#3 dguminsk

dguminsk

    Новый участник

  • Members
  • Pip
  • 44 сообщений
  • ФИО:Серебрянников Валентин Олегович


Отправлено 09 апреля 2012 - 14:49

Про пинг теоритически понятно, а вот как это будет выглядеть на практике?
Я просто не представляю как это реализовать. запустить cmd команду на пинг из TC смогу, а вот как получить результат пинга и как его обработать?!
  • 0

#4 SergeyP

SergeyP

    Специалист

  • Members
  • PipPipPipPipPip
  • 651 сообщений
  • Город:Москва

Отправлено 09 апреля 2012 - 15:04

Про пинг теоритически понятно, а вот как это будет выглядеть на практике?
Я просто не представляю как это реализовать. запустить cmd команду на пинг из TC смогу, а вот как получить результат пинга и как его обработать?!


После получения из окна CMD текста, надо поискать фрагмент, соответствующий наличию или отсутствию пинга.
  • 0

#5 Vader

Vader

    Активный участник

  • Members
  • PipPip
  • 129 сообщений
  • Город:Харьков

Отправлено 09 апреля 2012 - 15:14

Про пинг теоритически понятно, а вот как это будет выглядеть на практике?
Я просто не представляю как это реализовать. запустить cmd команду на пинг из TC смогу, а вот как получить результат пинга и как его обработать?!

В FAQ рекомендуют так или так (смотрите раздел про StdIn\StdOut ), но, как по мне, проще вызывать пинг так:

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());  
}

  • 0

#6 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 09 апреля 2012 - 15:44

Про пинг теоритически понятно, а вот как это будет выглядеть на практике?
Я просто не представляю как это реализовать. запустить cmd команду на пинг из TC смогу, а вот как получить результат пинга и как его обработать?!

Лично мне больше нравится вариант с WMI-классом Win32_PingStatus:
http://www.robvander...etwork_ping.php

В таком случае не надо возиться с cmd и парсить результат.
  • 1

#7 dguminsk

dguminsk

    Новый участник

  • Members
  • Pip
  • 44 сообщений
  • ФИО:Серебрянников Валентин Олегович


Отправлено 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
  • 0

#8 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 10 апреля 2012 - 07:27



Про пинг теоритически понятно, а вот как это будет выглядеть на практике?
Я просто не представляю как это реализовать. запустить 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

Если у вас локаль не английская, то паттерн "Lost = 0" надо заменить на локализованный.
  • 0

#9 dguminsk

dguminsk

    Новый участник

  • Members
  • Pip
  • 44 сообщений
  • ФИО:Серебрянников Валентин Олегович


Отправлено 10 апреля 2012 - 07:37




Про пинг теоритически понятно, а вот как это будет выглядеть на практике?
Я просто не представляю как это реализовать. запустить 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

Если у вас локаль не английская, то паттерн "Lost = 0" надо заменить на локализованный.

До, Вы правы, русская версия винды. Но вот теперь возникает следующий вопрос - Вместо Lost=0 пишет потеряно = 0. Но русские символы в данную строчку кода не катят. Что-то я совсем невнимательный и не могу разобраться в чем дело

Прикрепленные файлы

  • Прикрепленный файл  Image123.jpg   151,71К   8 Количество загрузок:

  • 0

#10 Vader

Vader

    Активный участник

  • Members
  • PipPip
  • 129 сообщений
  • Город:Харьков

Отправлено 10 апреля 2012 - 07:44

До, Вы правы, русская версия винды. Но вот теперь возникает следующий вопрос - Вместо Lost=0 пишет потеряно = 0. Но русские символы в данную строчку кода не катят. Что-то я совсем невнимательный и не могу разобраться в чем дело

var lostPattern = new RegExp(".*потеряно = 0.*")

А вообще выше предложили вариант с WMI, который куда как лучше.
  • 0

#11 dguminsk

dguminsk

    Новый участник

  • Members
  • Pip
  • 44 сообщений
  • ФИО:Серебрянников Валентин Олегович


Отправлено 10 апреля 2012 - 07:52



До, Вы правы, русская версия винды. Но вот теперь возникает следующий вопрос - Вместо Lost=0 пишет потеряно = 0. Но русские символы в данную строчку кода не катят. Что-то я совсем невнимательный и не могу разобраться в чем дело

var lostPattern = new RegExp(".*потеряно = 0.*")

А вообще выше предложили вариант с WMI, который куда как лучше.

C WMI возможно стоит разобраться, правда фигово, что там Vbscript. А насчет данного кода (все таки хочется разобраться, и так сказать добить его) Все равно возвращает false. Пробовал только цифры вставлять - все ок, с русским текстом - никак. Возможно кодировки другие?

Прикрепленные файлы

  • Прикрепленный файл  Image1233.jpg   267,07К   2 Количество загрузок:

  • 0

#12 Vader

Vader

    Активный участник

  • Members
  • PipPip
  • 129 сообщений
  • Город:Харьков

Отправлено 10 апреля 2012 - 08:02

C WMI возможно стоит разобраться, правда фигово, что там Vbscript. А насчет данного кода (все таки хочется разобраться, и так сказать добить его) Все равно возвращает false. Пробовал только цифры вставлять - все ок, с русским текстом - никак. Возможно кодировки другие?

Ну, если хочется добить, то добивайте http://stackoverflow...lish-characters . Я забыл, что в JS с юникодом не так просто.

А что касается WMI, то я не очень понимаю в чем проблема. Если не знаете как им пользоваться, то найдите любой пример на JS и просто подставьте в него нужный запрос. Это будет самое надежное и быстрое решение.
  • 0

#13 dguminsk

dguminsk

    Новый участник

  • Members
  • Pip
  • 44 сообщений
  • ФИО:Серебрянников Валентин Олегович


Отправлено 10 апреля 2012 - 08:56



C WMI возможно стоит разобраться, правда фигово, что там Vbscript. А насчет данного кода (все таки хочется разобраться, и так сказать добить его) Все равно возвращает false. Пробовал только цифры вставлять - все ок, с русским текстом - никак. Возможно кодировки другие?

Ну, если хочется добить, то добивайте http://stackoverflow...lish-characters . Я забыл, что в JS с юникодом не так просто.

А что касается WMI, то я не очень понимаю в чем проблема. Если не знаете как им пользоваться, то найдите любой пример на JS и просто подставьте в него нужный запрос. Это будет самое надежное и быстрое решение.

Не серчайте пожалуйста, но с WMI что-то очень тяжко. Я немного не улавливаю логику (видимо не вспался + еще только начинаю разбираться в программинге) но тут такой момент, нашел пример, поштудировал хелп и собрал примерно такую солянку, как на скриншоте. Но отказывается работать. Дайте пожалуйста хотя бы намек, либо примерно готовый вариант. Хочется реально разобраться. Спасибо

Прикрепленные файлы

  • Прикрепленный файл  123.jpg   193,69К   9 Количество загрузок:

  • 0

#14 dguminsk

dguminsk

    Новый участник

  • Members
  • Pip
  • 44 сообщений
  • ФИО:Серебрянников Валентин Олегович


Отправлено 10 апреля 2012 - 09:01




C WMI возможно стоит разобраться, правда фигово, что там Vbscript. А насчет данного кода (все таки хочется разобраться, и так сказать добить его) Все равно возвращает false. Пробовал только цифры вставлять - все ок, с русским текстом - никак. Возможно кодировки другие?

Ну, если хочется добить, то добивайте http://stackoverflow...lish-characters . Я забыл, что в JS с юникодом не так просто.

А что касается WMI, то я не очень понимаю в чем проблема. Если не знаете как им пользоваться, то найдите любой пример на JS и просто подставьте в него нужный запрос. Это будет самое надежное и быстрое решение.

Не серчайте пожалуйста, но с WMI что-то очень тяжко. Я немного не улавливаю логику (видимо не вспался + еще только начинаю разбираться в программинге) но тут такой момент, нашел пример, поштудировал хелп и собрал примерно такую солянку, как на скриншоте. Но отказывается работать. Дайте пожалуйста хотя бы намек, либо примерно готовый вариант. Хочется реально разобраться. Спасибо


Все, разобрался, прошу у всех прощения за отобранное время. Спасибо за помощь.
Все дело в 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")
} 

  • 0

#15 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 10 апреля 2012 - 09:29

Если я правильно понял, то возвращаемое значение 0 в лог означает - норм. пинг?

Да - см. список статус-кодов в MSDN
  • 0


Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных