понедельник, 28 ноября 2016 г.

UNIX, AQA: Как удалить файлы из списка?

Команда rm не принимает перенаправление ввода, поэтому rm < files-to-remove.txt работать не будет.
Можно использовать:
  1. rm `cat files-to-remove.txt`
  2. xargs rm < files-to-remove.txt
  3. Небольшой скрипт:
    foreach i (`cat files-to-remove.txt`)
    rm $i
    end
Аналогично можно удалить файлы, отобранные командой grep:
rm `ls | grep 123`

источник: 

Life:

------------------------------------------------------------------------------------------------------------------
TC: установить плагин на Total Commander;
TC: плагин 32х требует ТС 32х скачать тут;

1. Скопировать архив плагина Script Content Plugin;
2. Установить плагин (читай справку TC - "Тематические обзоры\Плагины и языки", раздел "Как установить плагин") .
3. В папке установленного плагина открыть на редактирование файл script.ini. Заменить его содержимое приведенным текстом. 


Код:
[Script]
Section=General

[General]
LongName=0
ParseDirs=1
Script=General.vbs
4. В папке установленного плагина создать текстовый файл General.vbs с приведенным  текстом. 



Код:
'============================
' Колонка Result будет возвращать признак наличия файла\каталога в указанном файле-списке:
'   0 - файл\каталог НЕ найден; 1 - файл\каталог найден
'=== Изменяемые параметры ===
Const FileList = "C:\FileList.txt" 'Файл-список
'============================

Dim FSO, List, QuitFlag
Const ForReading = 1
Set FSO = CreateObject("Scripting.FileSystemObject")

QuitFlag = False
content  = 0

If Not FSO.FileExists(FileList) Then
  Quit
End If

If Not QuitFlag Then
  On Error Resume Next
  List = FSO.OpenTextFile(FileList, ForReading, False).ReadAll
  If Err.Number <> 0 Then
    Quit
  End If
  On Error GoTo 0
End If

If Not QuitFlag Then
  If InStr(1, vbNewLine & List & vbNewLine, vbNewLine & filename & vbNewLine, vbTextCompare) > 0 Then
    content = 1
  End If
End If

Quit

Sub Quit
  QuitFlag = True
  Set FSO  = Nothing
End Sub

5. Создать файл "C:\FileList.txt" со списком файлов (твои "40шт"). Имя и размещение этого файла-списка может быть любым, но тогда в файле General.vbs необходимо соответствующим образом изменить строку 
6. Запустить поиск (Alt+F7).
7. Перейти на закладку "Плагины".
8. Установить галочку "Поиск с плагинами".
9. В поле "Плагин:" выбрать "script".
10. Поле "Свойство:" = "Result".
11. "Операция:" = "содержит".
12. "Значение:" = "1".
13. Нажать "Начать поиск".
14. Радоваться найденным файлам.


источник 


пятница, 25 ноября 2016 г.

SQL Oracle: Tips&Tricks

How to know which version of DB is used? 
   select * from v$version
 
Pagination on Oracle by RowNum
link on oracle 
 
Examples: worked query
SELECT PGM_META_ID
            FROM 
              (select a.*, rownum rnum
                FROM
                  (select * from
                  PGM_EPISODEINFO
                  WHERE  EPISODE_TITLE is null) a
                WHERE rownum <= 150
              )
            WHERE rnum >= 148
... in progress (not work)...
select * FROM ID_MAP WHERE PGM_META_ID in         
  (SELECT PGM_META_ID
            FROM 
              (select a.*, rownum rnum
                FROM
                  (select * from
                  PGM_EPISODEINFO
                  WHERE  EPISODE_TITLE is null) a
                WHERE rownum <= 150
              )
            WHERE rnum >= 148);
     
 
 

вторник, 15 ноября 2016 г.

AQA. Введение в XPath (часть 2). Основы построения запросов

Где при тестировании может понадобиться XPath, а также обзор инструментальных средств для отладки XPath-запросов можно найти в предыдущей статье. Что же представляет из себя xpath-запрос? XPath (XML Path Language) — язык запросов к элементам XML или XHTML документа. XML имеет древовидную структуру. В документе всегда имеется корневой элемент. У элемента дерева всегда существуют предки (исключение — корневой элемент, у которого предков нет) и могут существовать потомки. Каждый элемент дерева находится на определенном уровне вложенности. У элементов на одном уровне бывают предыдущие и следующие за ним элементы. Строка XPath — это фактически путь к элементу в дереве, где каждый уровень разделяется косой чертой «/». В результате обработки выражения XPath получается объект, который может быть: набор узлов (node-set) — неупорядоченный набор узлов без дубликатов булево значение (boolean) — true или false число (number) — число с плавающей точкой строка (string) — последовательность UCS символов Небольшой примерчик для старта:
* — обозначает любое имя или набор символов / — определяет уровень дерева Если в запросе первым символом стоит «/» , то путь адресации считается абсолютным (то есть от корня документа). Корень документа всегда является контекстом по умолчанию. Контекст — это текущий полученный узел или набор узлов, относительно которых рассчитывается следующий шаг. Оси Оси это основа запросов XPath и их обязательная часть. ancestor:: — возвращает множество предков. ancestor-or-self:: — возвращает множество предков и текущий элемент. attribute:: — возвращает множество атрибутов текущего элемента. child:: — возвращает множество потомков на один уровень ниже. descendant:: — возвращает полное множество потомков. descendant-or-self:: — возвращает полное множество потомков и текущий элемент. following:: — возвращает необработанное множество, ниже текущего элемента. following-sibling:: — возвращает множество элементов на том же уровне, следующих за текущим. namespace:: — возвращает множество имеющее пространство имён (то есть присутствует атрибут xmlns). parent:: — возвращает предка на один уровень назад. preceding:: — возвращает множество обработанных элементов исключая множество предков. preceding-sibling:: — возвращает множество элементов на том же уровне, предшествующих текущему. self:: — возвращает текущий элемент. Для наиболее часто используемых осей существуют сокращения: attribute:: — можно заменить на «@» child:: — часто просто опускают descendant:: — можно заменить на «.//» parent:: — можно заменить на «..» self:: — можно заменить на «.» Для приведенного выше примера
Чаще xpath-запрос начинают с «.//» или «//», это делает путь к элементу относительным. Символы ".//" в начале запроса возвращают полное множество потомков, которые являются дочерними для корня документа, т.е. все элементы на текущей странице. В данном случае точку в начале запроса можно опустить, потому что корневой элемент уже является контекстом. Первый пример можно переписать так:
Важную роль в построение запросов играют предикаты — это необязательная часть, заключаемая в квадратные скобки, в которой могут содержаться оси, условия проверки, функции и операторы. В ходе обработки предиката из полученного на шаге набора узлов исключаются узлы, не прошедшие условие проверки. Например, найдем элемент span, находящийся внутри любого элемента с id = «first»

Введение в XPath (часть 1). Поддержка XPath в Selenium и инструментальные средства.

XPath (XML Path Language) — язык запросов к элементам XML или XHTML документа, реализующий навигацию по DOM. XPath предназначен для использования другими спецификациями, такими как XSL Transformations (XSLT) и XML Pointer Language (XPointer).
WebDriver предоставляет несколько способ поиска элементов. Идентификация поиска осуществляется при помощи класса By. Одним из вариантов поиска By является xpath, принимающий в качестве параметра строку, представляющую собой xpath-запрос:

driver.findElement(By.xpath("//input[@id='login']"));
 
Будьте внимательны, используя xpath. Selenium при построении xpath-запроса использует стандартные обозначения — поиск начинается с «//», т.е. будет искать по DOM-дереву всего документа, а не только среди потомков текущего узла. Поэтому если вы выстраиваете поисковые запросы в цепочку, то используйте «.//» для того, чтобы ограничить поиск среди потомков элемента.

// найдет первый элемент a с классом "link" на странице:
driver.findElement(By.id("some-id")).findElement(By.xpath("a[@class='link']")); 

// найдет первый элемент a с классом "link" среди потомков элемента с id="some-id":
driver.findElement(By.id("some-id")).findElement(By.xpath(".//a[@class='link']"));

Если критериям поиска удовлетворяет несколько элементов, результатом выполнения findElement будет первый из них. Если же элемент не найден, будет выдано исключение NoSuchElementException.
Некоторые HTML элементы не нуждаются в явном указании атрибутов потому, что они имеют какое-то стандартное значение по умолчанию. Основное правило при использовании xpath — НЕ полагайтесь на то, что XPath-запрос обнаружит такой неявный атрибут.
Для браузеров, в которых встроенная поддержка XPath отсутствует, разработана собственная реализация поиска по xpath. Однако, в некоторых случаях, это может приводить к неожиданным результатам.
Driver Встроенная поддержка XPath
HtmlUnitDriver Yes
InternetExplorerDriver No
FirefoxDriver Yes
Скажу пару слов об инструментальных средствах XPath, которые могут пригодиться в ходе работы. Они позволяют отлаживать XPath-выражения и помогают при создании и проверке XPath. Их использование значительно облегчает написание тестов, в которых используется поиск элементов по xpath. Так как поле нашей деятельности — это тестирование сайтов и web-приложений, то и речь пойдет о поддержке XPath в браузерах:
  • Chrome xPath Viewer. Осуществляет поиск DOM элементов на текущей странице с заданными выражениями XPath и CSS селекторами. При наведении на найденный результат в списке подсвечивает элемент на странице. Щелчок правой кнопкой мыши на элементе возвращает абсолютное XPath выражение.
    Преимущества:
    — достаточно прост в обращении;
    — поддержка CSS.
    Недостатки:
    — когда xPath Viewer активен нет возможности вызвать контекстное меню для элемента правой кнопкой мыши;
    — предлагаемый xpath элемента строится только по тегам и позициям, не учитывая id;
    — нет поддержки svg-контента на странице.
     
  • Mozilla Firefox XPath Checker. Интерактивный редактор выражений XPath. Запускается из контекстного меню командой ‘View XPath’. Динамически обновляет результаты при редактировании запроса. Преимущества:
    — генерируемый xpath элементов строится оптимальным образом, используя id элементов;
    — успешно работает с svg-контентом и т.п. за счет поддержки различных namespaces.
    Недостатки:
    — необходимо закрывать и открывать XPath Checker, чтобы получить xpath нового элемента.
    — визуальное отображение найденных элементов в результатах — громоздко и бесполезно.
     
  • Mozilla FirePath. FirePath является расширением для Firebug, которое добавляет инструменты для редактирования, проверки и создания выражения XPath, CSS селекторов и селекторов JQuery.
    Преимущества:
    — генерируемый xpath элементов строится оптимальным образом, используя id элементов;
    — поддержка работы с различными namespaces;
    — отображение результатов в Firebug, в DOM-модели документа;
    — подсвечивание результатов непосредственно на странице.
Синтаксис и правила построения xpath-запросов описаны в статье Введение в XPath (часть 2). Основы построения запросов

четверг, 3 ноября 2016 г.

Selenium IDE: interactions

Simulating Keypress Events in Selenium IDE
Since version 2.3.0, Selenium IDE supports keyboard keypress events. We can simulate Selenium IDE keypress events using newly introduced sendKeys command. Keypress events can be utilized in WebDriver Playback as well. All in all, it’s a very useful addition in Selenium IDE. Therefore in this tutorial, we will discuss about different options available in Selenium IDE to handle keyboard keypress events.
Let’s see how to use sendKeys in Selenium IDE. sendKeys command takes locator and value parameters just like any other Selenium IDE commands. To define a keyboard key, you just have to prefix its value with ‘KEY_’ text and write it as variable(Eg. using ${ }). For example, below command hits Enter key on button called ‘login’.
You can combine text with keys. For example, ‘Testing Diaris${KEY_LEFT}e’. You can also perform keypress with modifier keys such as Alt, Ctrl, Shift, Command(in Mac) etc. The first occurance of a modifier key presses them and the second one releases it. All modifier keys are released at the end of the sendKeys command. It will not affect the subsequent sendKeys command. Below is an exhaustive list of supported keyboard commands in Selenium IDE.
Navigation Keys:
  • KEY_LEFT (Navigation Left)
  • KEY_UP (Navigation Up)
  • KEY_RIGHT (Navigation Right)
  • KEY_DOWN (Navigation Down)
  • KEY_PGUP / KEY_PAGE_UP (Page up)
  • KEY_PGDN / KEY_PAGE_DOWN (Page down)
  • KEY_END (End)
  • KEY_HOME (Home)
Function Keys:
  • KEY_F1 to KEY_12 (Function keys from F1 to F12)
Modifier Keys:
  • KEY_ALT (Alt)
  • KEY_CONTROL / KEY_CTRL (Ctrl)
  • KEY_META / KEY_COMMAND (Command)
  • KEY_SHIFT (Shift)
Num Pad Keys:
  • KEY_NUMPAD0 / KEY_N0 to KEY_NUMPAD9 / KEY_N9 (Number keys from 1 to 9)
  • KEY_ADD / KEY_NUM_PLUS (Plus)
  • KEY_DECIMAL/ KEY_NUM_PERIOD (Period)
  • KEY_DIVIDE/ KEY_NUM_DIVISION (Division)
  • KEY_MULTIPLY/ KEY_NUM_MULTIPLY (Multiply)
  • KEY_SEPARATOR/ KEY_SEP (Separator)
  • KEY_SUBTRACT/ KEY_NUM_MINUS (Minus)
Misc. Keys:
  • KEY_BKSP / KEY_BACKSPACE (Backspace)
  • KEY_DEL / KEY_DELETE (Delete)
  • KEY_ENTER (Enter)
  • KEY_EQUALS (Equals)
  • KEY_ESC / KEY_ESCAPE (Escape)
  • KEY_INS / KEY_INSERT (Insert)
  • KEY_PAUSE (Pause)
  • KEY_SEMICOLON (Semi-colon)
  • KEY_SPACE (Space)
  • KEY_TAB (Tab)
Tip: Do not create any other stored variable in your Selenium IDE script with KEY_ prefix.
We hope you would find the above post illustrating Selenium IDE keypress events useful. Let us know your views in comments.

Selenium IDE JavaScript and Command Parameters
The example below shows you how a JavaScript snippet can be used to perform a simple numerical calculation.
Command Target Value
store 10 Number1
store 20 Number2
storeEval parseInt(storedVars['Number1'])+parseInt(storedVars['Number2']) sumResult
echo ${sumResult}
Here is the above script execution result.
  • [info] Executing: |store | 10 | Number1 |
  • [info] Executing: |store | 20 | Number2 |
  • [info] Executing: |storeEval | parseInt(storedVars['Number1'])+parseInt(storedVars['Number2']) | sumResult |
  • [info] script is: parseInt(storedVars['Number1'])+parseInt(storedVars['Number2'])
  • [info] Executing: |echo | ${sumResult} | |
  • [info] echo: 30


JavaScript Usage with Non-Script Parameters

JavaScript can also be used to help generate values for parameters, even when the parameter is not specified to be of type script. However, in this case, special syntax is required–the JavaScript snippet must be enclosed inside curly braces and preceded by the label JavaScript.

Command Target Value
store 10 Number1
store 20 Number2
echo javascript{parseInt(storedVars['Number1'])+parseInt(storedVars['Number2'])}


четверг, 28 июля 2016 г.

Как переименовать много файлов за раз

Часто возникает такая ситуация, что нужно массово переименовать файлы. Будь это название или расширение файла. Иногда нужно убрать часть текста из названия (например, адрес сайта или фирмы). Если файлов всего несколько, то ничего страшного. А что делать когда файлов 50, 100 или тысяча?
Есть несколько решений как быстро переименовать много файлов: командной строчкой или кучей программ. Одно из самых удобных решений — это переименовать файлы в папке по шаблону тоталкомандер.

Как переименовать файлы в тотал коммандер

Чтобы переименовать много файлов нужно зайти в папку, где находяться файлы. Выделить те файлы, которые будем переименовывать.
Пакетное переименование файлов в totalcommander
Пакетное переименование файлов в totalcommander. ч.1
Потом нажимаем CTRL+M для группового переименовывания и выскочит вот такое окошко.
Пакетное переименование файлов в totalcommander
Пакетное переименование файлов в totalcommander. ч.2
В этом окне и производим все основные операции.
Как удалить часть текста во всех названиях файлов
Для удаление части текста введите то, что нужно удалить в поле Найти в блоке «Поиск и замена«. В поле Заменить на — то, на что нужно заменить. Например, нам нужно удалить адрес сайта bdseo.ru со всех файлов. Тогда в поле Найти вводим bdseo.ru, а поле Заменить на оставляем пустое.
Как заменить символы в названиях файлов через totalcommander
Для замены символов на какие-то буквы или цифры повторяем предыдущий блок. Только в поле Заменить на пишите то, на что заменяем. Например, заменяем в названиях файлов символы [, { на пробелы. В поле найти по очереди ставим эти символы, а в Заменить не забываем нажать пробел.

Справочник по групповому переименовыванию файлов через totalcommander

В программе тоталкомандер есть мощный встроенный функционал, и его частью как раз и является групповое переименовывание файлов. Вы можете задавать так называемую маску для массового редактирования.
[N] — вставьте этот код в поле имени для сохранения старого названия файла.
[f][N] — напишите вот так, если хотите чтобы все названия были с заглавной буквы.
[N1] — первый символ в названии файла. Можно использовать в маске, например, при замене символов.
[N2-4] — три символа из старого названия, с второго по четвертый.
[N3-] — все символы названия, начиная с третьей буквы.
[N-3] — третий символ с конца имени файла.
[N1,5] — пять символов после первой буквы.
[E] — расширение файла. (можно писать и в названии, если оно нужно.)
Счетчики. Хочется отдельно отметить полезную функцию счетчиков при переименовывании файлов.
Например, нам нужно проставить порядок файлов в начале названия или в конце (или в средине, использую маску).
[C:2] — простой счетчик, который нумерует файлы по очереди двухзначным числом. (01, 02…77,78)
[C:3] — тоже самое, только цифра уже трехзначная (001,002,003…)
[C1+1:2] — расширенный вариант счетчика. Первая единица — с какой цифры начинать, вторая единица — шаг счетчика, после двоеточия — двухзначное число. То есть эта конструкция будет добавлять 01,02,03… к каждому файлу по очереди. Если написать [C5+2:3], то счетчик начинает работать 005 с шагом 2 (007,009,011…)
Даты и время. Также в имя файла можно добавить [t] — время, [d] — дату, [D] — день, [M] — месяц, [Y] — год.
Если хотите конкретные примеры пакетного переименовывания файлов — не стесняйтесь, пишите!

вторник, 3 мая 2016 г.

AQA: Jmeter: Read Mails using JMeter Mail Reader Sampler

JMeter provides various options to handle email related scenarios in load testing activities. We already saw how we can send an email using JMeter in earlier post. This post now covers JMeter Mail Reader Sampler which can be used to receive emails from JMeter. This mail reading feature helps in number of scenarios like email verification, email confirmation etc.
We will use Mail Reader Sampler of JMeter to read an email. JavaMail API is needed to enable email functionality in JMeter. Download it from here and paste the JAR in JMeter’s lib folder. Now, perform below steps to configure JMeter Mail Reader Sampler.
  • Add a new Thread Group under Test Plan.
  • Right click on Thread Group and select Add–>Sampler–>Mail Reader Sampler. Once added, we need to provide IMAP/POP3 server details in sampler.
  • We will use GMail’s IMAP protocol for receiving an email in JMeter. Therefore, set Protocol value to ‘imaps’. Similarly enter ‘imap.googlemail.com’ and ‘993’ as server host and port values respectively.
  • Provide valid user name and password values.
  • We can also specify number mails we want to receive.
  • As GMail requires SSL, select ‘Use SSL’ radio button in Security Settings section.
  • After performing all above steps, your Mail Reader Sampler should be displayed as below image.JMeter Mail Reader Sampler
  • Run your test!

воскресенье, 20 марта 2016 г.

AQA: tools: bash: Переносим функциональность bash в cmd.exe

Переносим функциональность bash в cmd.exe

Мне, как и многим из вас, работать с bash и стандартными утилитами Linux гораздо удобнее и приятнее, чем с cmd.exe. Однако, к сожалению, порой обстоятельства складываются так, что операционную систему выбирать не приходится. Например, в моём случае корпоративным стандартом является Windows 7. К счастью есть способ сделать жизнь линуксоида в командной строке Windows комфортнее, о нём и пойдет речь ниже.


Прежде всего, при переходе из bash в cmd.exe доставляет неудобства ограниченность самой командной оболочки. Чтоб вставить текст из буфера обмена нужно тянуться к мышке, не хватает возможностей автодополнения, история хранится только в пределах одной сессии, к тому же не работает Ctrl+R и другие возможности работы с историей команд в bash.

Исправить ситуацию нам поможет clink. Это Open Source утилита расширяющая возможности cmd.exe. Вот некоторые ее фичи:

  • Автодополнение по нажатию Tab. Возможности автодополнения могут быть расширены за счет пользовательских скриптов на Lua
  • Вставка текста из буфера по нажатию Ctrl-V (к сожалению Shift+Insert не работает)
  • Продвинутая работа с историей команд. Поиск по истории (Ctrl-R and Ctrl-S). Поддержка таких выражений как !!, !<string> и !$
  • Сохранение предыдущих сессий


Авторы говорят, что clink протестирован только на Windows XP SP3, но я пользуюсь им уже год на Windows 7 и всё работает нормально.

Скачали. Установили. Стало лучше, теперь cmd себя ведет почти как bash. Но кое-чего по прежнему не хватает. А именно привычных unix-утилит. Таких как cat, ls, tail, diff, grep, less, sort, wget и т.д. Некоторые утилиты имеют свои Windows-аналоги, например, вместо grep можно использовать findstr, но к ним придется привыкать заново, другие же аналогов вообще не имеют.

Эту проблему нам поможет решить готовый набор программ UnxUtils. Набор включает в себя множество популярных в Unix и Linux инструментов командной строки (полный список можно посмотреть по этой ссылке) а так же несколько дополнительных программ.

В частности, к дополнительным программам относятся pclip.exe и gclip.exe предназначенные для работы с буфером обмена Windows. Например вот так: pclip | sed "s/string1/string2/g" | gclip можно заменить все вхождения string1 на string2 в тексте хранящемся в буфере обмена.

Для того чтоб получить всё это на свою Windows-машину нужно скачать архив UnxUtils.zip, распаковать его содержимое в какой-то каталог и добавить в переменную среды PATH путь к usr\local\wbin\, т.к. именно там хранятся исполняемые файлы.

Для самых ленивых есть способ еще проще: скопируйте содержимое каталога usr\local\wbin\ из архива в каталог %WINDIR%\system32\ на вашей машине.
Внимание! Если вы решили поступить именно так, то я не рекомендую заменять системные файлы на одноименные файлы из архива без четкого понимания того, что вы делаете.

Всё! Осталось только запустить cmd и эффективно работать используя свой linux-опыт. Конечно есть и другие способы добиться того же самого результата, я описал тот, который нахожу максимально простым и удовлетворяющим все мои потребности.
 Альтернативный терминал для Windows
Обновление с Bash интерпретатором 
 см. практические подходы

Bash скрипт перезагрузки оборудования через telnet 
Bash-скрипт для проверки, запущены ли apache, nginx, mysql и ssh на сервере 
SSH — передача файлов и выполнение команд

   Копирование файлов через SSH
   SSH аутентификация по открытому ключу
   Подключения по SSH без ввода пароля
   Запуск команд на удаленном Linux-сервере через SSH
   Отключение проверки ключа хоста в SSH

пятница, 18 марта 2016 г.

Bash Scripting

 Оригинал статьи

Последнее время, я очень увлекся автоматизацией процессов при помощи скриптов написанных на bash, perl и немного php для работы с MySQL и естественно, стал глубже изучать все эти языки. Так я работа не только с Linux серверами но и с Windows,  и в системе присутствует Active Directory, то в основном скрипты были написаны с использование LDAP протокола, как пример, сегодня потратил почти весь день что бы автоматизировать добавление и удаление пользователей в Mailman рассылки. В ближайшее время я постараюсь выложить все то что сделал, с подробным описанием, а сейчас хочу представить вам три книги которые стали для меня буквально настольными, это Bash Guide for Beginners, Linux Shell Scripting with Bash и Advanced Bash-Scripting Guide . Первые две достаточно подробно описывают команды и возможности bash, третья, в примерах показывает что можно сделать. Все три книги вы можете скачать
Bash Guide for Beginners
Advanced Bash-Scripting Guide
Linux Shell Scripting with Bash

воскресенье, 28 февраля 2016 г.

iMacros: команды, скрипты, примеры

iMacros: команды, скрипты, примеры

оригинал тут
Здравствуйте, уважаемые читатели блога LifeExample, хочу познакомить вас с одним удивительным инструментом веб мастера, хакера, и простого пользователя, встречайте: плагин iMacros для браузера Mozila Firefox.

iMacros позволяет записать любую последовательность действий человека на сайте в макрос.
Макроспрограммный код хранящий порядок необходимых к автоматическому выполнению.
Запустив макрос, действия выполняться автоматически, включая все переходы по вкладкам, заполнение полей, нажатием на кнопок, переходами по ссылкам и др.
Так сложилось, что последнее время часть моего времени уходит на написание ботов и поиск уязвимостей на чужих сервисах, через которые этих ботов можно протолкнуть.
Я не пишу вредоносные программы, а лишь упрощаю жизнь себе и людям, с которыми работаю, в задачи моих роботов входит автоматическое размещение объявлений на всевозможных информативных досках рунета.

Начав заниматься написанием скриптов для автоматического размещения информации на чужом сайте, я выбрал путь с использованием возможностей библиотеки CURL на php, но вскоре столкнулся с рядом проблем, обход которых не представлялся возможным, пользуясь лишь серверным языком. Малейшее использование JavaScripta в системе авторизации сайта ставило бота в тупик.
Гуляя по просторам интернета, с целью найти решение для обхода защиты использующей Javascript, я нашел инструмент, с помощью которого можно сделать бота эмулирующего любое действие человека, и этим инструментом явился плагин iMacros для браузера Mozila Firefox.

iMacros, как сделать первый макрос

Самым первым действием нужно установить плагин, для этого скачиваем последнюю версию iMacros, устанавливаем, и наблюдаем появившуюся панель в левой части окна.
плагин iMacros

В появившемся разделе находятся кнопочки и вкладочки данного инструмента, я думаю, вы без труда догадаетесь, как им пользоваться самостоятельно, но всеже немного расскажу об этом.
Для записи наших действий перейдем во вкладку запись и нажмем на одноименную кнопку. После чего откроем сайт yandex.ru и введем любой поисковый запрос, например: "Бесплатная CMS для интернет магазина Moguta", нажмем кнопку найти. Завершим запись действий, нажав на кнопку стоп в панеле iMacros.

Полученные в ходе наших действия команды iMacros сохраняет в файл #Current.iim. Чтобы воспроизвести их дважды кликнем на макрос #Current.iim, после чего iMacros должен произвести ряд записанных команд:
1
2
3
4
5
VERSION BUILD=7601105 RECORDER=FX
TAB T=1
URL GOTO=http://www.yandex.ru/
TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:http://yandex.ru/yandsearch ATTR=ID:text CONTENT= "Бесплатная CMS для интернет магазина Moguta"
TAG POS=1 TYPE=INPUT:SUBMIT FORM=ID:form ATTR=VALUE:Найти
пример макроса iMacros

Вот таки легким способом можно автоматизировать любое рутинное действие офисного сотрудника. Возможности плагина iMacros безграничны, с его помощью можно считывать данные из файла на диске и передавать их на любой сайт через макрос, как это сделать я расскажу дальше.

Команды iMacros на русском языке

Целью данной статьи стоит описать команды iMacros на русском языке, т.к. в интернете информации очень мало. Из действительно полезных источников, рассказывающих об iMacros на русском, я встретил только форум Mozila.
Прочитав данный форум, я собрал список часто задаваемых вопросов и часто используемых команд iMacros.
Я думаю каждый, кто имеет цель написать хоть чуточку полезный макрос, первым делом задаст себе следующие вопросы:

Как запустить iMacros автоматически на Windows

Ответ: Создать файл с расширением *.bat открыть в блокноте и сохранить в него строку:
1
start firefox "C:\Program Files\Mozilla Firefox\firefox.exe" http://run.imacros.net/?m=#Current.iim.
После чего макрос будет выполняться при запуске созданного файла. Для полной автоматизац

четверг, 11 февраля 2016 г.

Сравнение папок в Total Commander

Два каталога вместе со всеми под папками, можно сравнить по содержимому в Total  Синхронизировать каталоги 

Comander-ре. Для этого встаём с одной стороны на первой папке, а с другой — на второй. Вызываем команду Commands (Команды) / Synchronize Dirs (Синхронизировать каталоги). Ставим галки subdirs (с подкаталогами), by content (по содержимому), ignore date (игнорировать даты), не ставим галку asymmetric (асимметрично), Нажимаем кнопки разноцветные и отжимаем серую где «знак =». Далее, нажимаем справа «Compare»  (сравнить).
Результат: если папки одинаковые по содержимому файлов, то выдаст пустой список! Если нет, укажет расхождения.

Сравнение файлов в Total Commander

Выделяем оба файла, переходим Файл — Сравнение по содержимому.
Сравнение по содержимомуДалее видим, что строки, в которых найдены отличия подсвечиваются серым цветом, а различия в них красным. Внизу общее количество найденных различий. Переход по найденным различиям осуществлять посредством кнопок Следующее отличие и Предыдущее отличие. Можно использовать поиск по тексту.
Здесь же можно сразу и перенести выбранные отличия в другой файл. Для этого необходимо активировать режим редактирования (кнопка Редактировать).

четверг, 28 января 2016 г.

Selenium WebDriver: quit или close?

В этой статье речь пойдет о том как правильно останавливать работу драйвера или, другими словами, как закрыть браузер.
Запускается Selenium driver автоматически во время инициализации, для запуска у него нет отдельного метода.
FirefoxDriver driver = new FirefoxDriver();
 
Если по какой-либо причине запуск браузера не произойдет, то возникнет исключение и вебдрайвер не создастся.
А вот остановка его работы в определенное время ложится на разработчика тестов. WebDriver содержит два метода – quit() и close(), которые можно использовать для остановки работы браузера.
  • void close() — закрывает только одно текущее окно, и в случае, если это было последнее открытое окно — закрывает браузер.
  • void quit() — закрывает все открытые окна, завершает работу браузера и сервисов, и освобождает все ресурсы.
Поэтому для корректного завершения работы драйвера после выполнения теста используйте метод quit().

driver.quit();

Если же вам нужно закрыть отдельное открытое окно, используйте метод close(). Обратите внимание, что метод close() после закрытия одного из окон не передает управление в предыдущее открытое окно, Вы должны сделать это самостоятельно:

// переключаемся в новое окно
driver.switchTo().window(newWindowHandler);
// закрываем его
driver.close();
// возвращаемся в предыдущее окно
driver.switchTo().window(oldWindowHandler);
 
Если вы хотите просто уйти с текущей страницы, но не закрывать ее или браузер, можете просто использовать:
driver.get("");

Нагрузочное тестирование, используя облачный сервис

Нагрузочное тестирование, используя облачный сервис

Всем доброго дня!
Недавно для одного из заказчиков проводил нагрузочное тестирование веб портала. Результат оказался достаточно неожиданным, веб сайт лег раньше, чем предполагалось:) Посему в данной статье хочу поделится опытом проведения нагрузочных тестов, используя инструмент Visual Studio и облачный сервис Visual Studio Team Services (бывший Visual Studio Online).

Зачем проводить нагрузочные тесты

Но прежде, чем мы начнем погружаться в технические детали, немного теории. Зачем вообще проводить нагрузочные тесты? Вопрос достаточно важный, и в зависимости от того, как вы на него отвечаете, выбирается та или иная стратегия тестирования нагрузки.
Во многих случаях нагрузочные тесты проводят для того, чтоб определить максимальное количество пользователей, которые могут обслуживаться на выбранном сервере. Соответственно, нагрузочные тесты проводят перед запуском продукта на продуктиве. Казалось бы, вроде ничего криминального... Но подобный подход не дает вам ответа на вопрос: а можно ли на данном сервере обслужить большее количество пользователей? Возможно, нужно немного оптимизировать код, и сервер сможет корректно обслуживать большее количество запросов?
Конечно, можно перед запуском проекта покопаться в коде, найти слабые места, попробовать поправить, но все же не самый эффективный способ оптимизации, так как отсутствуют адекватные метрики. Откуда вы знаете, что улучшения, которые вы сделали, достаточны, чтобы сказать: лучше это приложение работать не будет. Что такое «лучше»? Где эталон? Насколько далеко мы от него ушли?
Задавая эти вопросы, мы плавно переходим во второй подход проведения нагрузочных тестов. Нагрузочные тесты нужно проводить регулярно во время работы над проектом (например, в конце спринта). Причем начинать нужно с момента, когда у вас готов каркас. Результат проведения нагрузочного теста на эталонном сервере, куда вы публикуете каркас вашего приложения, — это и есть эталон. Дальнейшие измерения вам покажут изменения относительно эталона. И если изменения драматические, это повод провести дополнительные работы для оптимизации кода. Проще искать проблемы с производительностью на ранних этапах, нежели пытаться перелопатить весь проект в конце.

Оборудование для генерации нагрузки

Есть еще одна проблема проведения нагрузочных тестов. Это оборудование (сервера), которое будут генерить нагрузку. Проблема в том, что для проведения адекватных нагрузочных тестов рядом с эталонным сервером, приближенным по параметрам к боевому, нужно поставить такой же или лучше для генерации нагрузки. Более того, вы рискуете получить неадекватные результаты в том случае, если ваш боевой сервер торчит наружу по порту 80, а тестируете вы его используя локальную сеть организации, где стоит ваш генерирующий нагрузку сервер.
Попробуйте обосновать для службы закупок покупку сервера, который вы собираетесь использовать раз в 2 недели один-два часа. Очень часто в этом случае задействуют сервера, которые не используются (устаревшие), либо на время тушат какие-то приложения внутри организации, дабы задействовать высвободившиеся ресурсы под нагрузочные тесты (такой сценарий большая редкость, но на своем опыте видал и такое). В обеих вариантах есть свои недостатки. Наприем, не использующееся сервера могут либо списать, либо отключить для экономии электропитания, либо снять с поддержки и т.д. А процесс согласования прерывания работы какого-то приложения внутри организации — это ад для всех.
В общем, вы, наверное, поняли, на что я намекаю: надо использовать облачные ресурсы с оплатой по часам. На серверы нужно залить и настроить необходимый софт для генерации нагрузки (иногда это не тривиальная задача).

Тестирование с помощью Visual Studio Team Services

Я предлагаю для генерации нагрузки использовать Visual Studio Team Services (бывший Visual Studio Online). Итак, что нам надо:
— Аккаунт в Visual Studio Team Services. >Бесплатно его можно взять тут.
— Visual Studio Enterprise. Триальная версия тут.
Итак, приступим:
После того, как вы создали бесплатный аккаунт в Visual Studio Team Services, вам необходимо создать новый проект, указав название и систему контроля версий, которую вы будете использовать (для этой демонстрации не принципиально, какую выбирать):

SEO: Эксперимент: как Яндекс и Google учитывают ключевые слова в URL

Эксперимент: как Яндекс и Google учитывают ключевые слова в URL Эксперимент: как Яндекс и Google учитывают ключевые слова в URL Дата пу...