Как запускать скрипты AutoHotKey сразу на нескольких ПК, управляемых из одного места?

Для некоторых симуляций нагрузочного тестирования я рассматриваю сценарии с AHK 1.1. Проблема в том, что у нас есть установка клиент-сервер с несколькими рабочими станциями, поэтому мне бы очень хотелось иметь возможность запускать один и тот же скрипт (или даже варианты) для одновременного запуска на нескольких ПК, чтобы точно имитировать несколько пользователей, которые забивают систему.

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

Как лучше всего это сделать? Сделать это из самого AHK или использовать какой-то отдельный инструмент удаленного управления, чтобы позволить мне запускать сценарии на ПК по моему выбору?


person Mr. Boy    schedule 28.11.2014    source источник


Ответы (3)


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

Что касается TCP/IP, вы можете сделать это, вам просто нужно выяснить, есть ли у вас какие-либо пригодные для использования/открытые сообщения, которые могут использовать ваши скрипты...

На днях я помог одному австралийцу настроить большое количество серверных/клиентских скриптов.

используя Socket Class от Bentschi, который выглядит примерно так это

Сервер:

;Server

#include Socket.ahk

myTcp := new SocketTCP()
myTcp.bind("addr_any", 54321)
myTcp.listen()
myTcp.onAccept := Func("OnTCPAccept")
return

OnTCPAccept(this)
{
    newTcp := this.accept()
    newTcp.onRecv := func("OnTCPRecv")
    newTcp.sendText("Connected")
}

OnTCPRecv(this)
{
    msgbox % this.recvText()
}

Клиент:

;Client

#include Socket.ahk

myTcp := new SocketTCP()
myTcp.connect("your servers A_IPAddress1", 54321) ; lokal
myTcp.onRecv := Func("OnTcpRecv")
return

OnTcpRecv(this)
{
    ToolTip % this.RecvText()
}

Но чтобы использовать и/или настроить что-то подобное, вам может понадобиться знать, какие порты можно использовать в сети, или иметь возможность изменять настройки по мере необходимости.

Скорость сценариев TCP/IP составляет всего несколько миллисекунд (менее 20 в моей сети), поэтому о реальной терпимости говорить не приходится.

Надеюсь, поможет

person blackholyman    schedule 28.11.2014

Как писал Sidola, вы можете проверить общую папку на наличие какого-либо файла или папки. Вы можете использовать для этого команду IfExist. Вот пример:

Loop
{
        IfExist, c:\a.txt
        {
                break
        }
}
;code to execute if c:\a.txt exists comes below.
MsgBox, 1




Также вы можете добавить команду Sleep, чтобы меньше нагрузка на жесткий диск, как, например, в коде ниже:

Loop
{
        IfExist, c:\a.txt
        {
                break
        }
        Sleep, 1000
}
;code to execute if c:\a.txt exists comes below.
MsgBox, 1




Кроме того, всегда используйте AutoHotkey и его документацию с http://ahkscript.org/ (текущая обновленная версия, новый официальный сайт)! AutoHotkey и его документация с autohotkey.com устарели, и у вас могут возникнуть проблемы с их использованием!

person vasili111    schedule 28.11.2014
comment
Разве этот подход не означает, что AHK должен работать на всех машинах в первую очередь? - person Mr. Boy; 28.11.2014
comment
@Mr.Boy, этот скрипт следует запускать на всех ПК, которые вы хотите автоматизировать. Так да. вы должны запустить его на всех удаленных машинах. - person vasili111; 28.11.2014
comment
@Mr.Boy Я уверен, что есть и другие способы управления автоматизацией удаленного ПК (например, TCP / IP и т. Д.), Но я думаю, что описанный выше способ самый простой. - person vasili111; 28.11.2014

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

Если вам действительно удастся это сделать, было бы здорово, если бы вы могли поделиться этим.

person Forivin    schedule 14.12.2014