Antwortzeitenmessung mittels Autoskript

  • Hallo an alle,

    ich habe den Auftrag für unsere Firma einen Lösungsvorschlag für die Antwortzeitenmessung von Webanwendungen zu erstellen. Nun gibt es da ja viele Firmen, die einem das blaue vom Himmel versprechen, aber für 90.000€ aufsteigend sagt mir das nicht so zu. nun dachten wir an eine Lösung mittels Autoscript.

    Als Hintergundinformationen:
    In unserer Infrastruktur sind ca. 120 Niederlassungen bundesweit verteilt, die über Citrix an unser Rechenzentrum in Hannover angebunden sind. Zur zeit haben wir 90 Citrix-Server im Einsatz, auf denen die Verteilung der Zugriffe wahllos nach der Auslastung erfolgt. Die rund 4000 Mitarbeiter arbeiten mit ca. 80 Web-Anwendungen, die bisher auf 2 JBoss-Applikation-Server laufen, ab dem neuen Jahr auf 4 Websphere Server. Für die Überwachung der einzelnen Komponenten haben wir BMC Patrol mit der Anbindung an den Service Impact Manager zum Event-Handling, CA|Wily Introscope sowie Omegamon für die Datenbank auf dem Großrechner im Einsatz.

    Die Antwortzeit sollte vom Klick des Anwenders in der Niederlassung (im IE auf dem Citrix-Server) bis zum vollständigen Aufbau der Site (mit Rendering etc. pp) erfolgen. Toll wäre es, wenn manb einen kompletten Anwendungsprozess messen kann. Nehmen wir als Beispiel das Abrufen von Versichertendaten - der Mitarbeiter ruft als erstes das Mitarbeiterportal (Startseite IE) auf - klickt dann auf die Anwendung KSC (KundenServiceCockpit) mit der Eingabe eine Versichertennummer (PID) und der Funktion Daten Anzeigen (ID 0010). In dem darauf folgenden, neuem Fenster sind sämtliche Daten des Versicherten zu sehen mit den Reitern "Übersicht", "Familie", "Kampagnen", "Besonderheiten". Durch die würde sich der Mitarbeiter überall durchklicken und beispielsweise eine neue Teilnahme an einer Kampagne einfügen, dies speichern und danach das KSC schließen.


    Meine Frage nun: Kann man sich so eine Antwortzeitmessung mittels AutoIt-Scripting vorstellen? Wenn ja, wie viel Aufwand und Manpower müsste dafür investiert werden, um aussagekräftige Werte zu bekommen (die Überwachung sämtlicher Systeme und Anwendungen haben wir schon selbst als unmöglich geklärt ;o) ). Eine Messung von den "Problemstandorten" mEn 4 sowie 4 Referenzstandorten wäre sinvoll, sowie ein flexibler Eisnatz bei Störungen.

    So, das war jetzt ganz schön viel. Ich hoffe, euch jetzt mit meiner Anfrage nicht überrannt zu haben und bin sehr auf Antworten gespannt.

    Es grüßt dhacker ^^

    • Offizieller Beitrag

    Hallo,

    Ich habe alles grob gelesen, aber eben auch nur grob ;).
    Willst du messen wie "schnell" ein Mitarbeiter arbeitet, also die Interaktionsdauer mit dem "Dialog" oder nur die technische Seite?
    Letzteres ließe sich möglicherweise mit TimerInit und TimerDiff und dazwischen _IELoadWait realisieren.

    peethebee

  • Hallo,

    also wir wollen messen, wie schnell die Webanwendung ist. Wie gesagt die Komplettzeit vom Absenden des Requests bis zum vollständigen Bildaufbau.

    peethebee : ist mit deienr Idee auch das gesamte Rendering der Seite mit berücksichtig?

    Oscar : das Script sollte schon auf den Clients bzw. erst auf den Citrix-Servern laufen, da dort der IE installiert ist. Jedoch müsste dann noch die Bildübertragung an die Endclinets mit berücksichtigt werden. Achso, danke fürs Willkommen heißen :)


    Aber Ihr seht es nicht als unmöglich an? Kann mir villeicht noch jemand einen Tip für Beratungsfirmen bezüglich AutoIt geben, die uns bei der Umsetzung unterstützen könnten?

    Vielen Dank!

    • Offizieller Beitrag

    Hallo!

    _IELoadWait() wartet das Rendering ab, also bis der Browser "100% geladen" melden würde (wenn mich nicht alles täuscht). Das lässt sich mit dem Beispiel aus der Hilfe ja schnell und unkompliziert testen.

    Mal ein Test:

    [autoit]

    #include <IE.au3>
    $oIE = _IECreate("about:blank", 1, 1, 1, 1)
    $time = TimerInit()
    _IENavigate($oIE, "http://www.test.de", 1)
    $diffTime = TimerDiff($time)
    MsgBox(0, "Ladezeit", "Ladezeit: " & StringFormat("%.2f", $diffTime/1000) & " Sekunden")

    [/autoit]

    Mit bisschen mehr Komfort (mehrere Messungen und Mittelwert):

    [autoit]

    Const $runs = 20
    Const $url = "http://www.test.de"
    #include <IE.au3>
    $oIE = _IECreate("about:blank", 1, 1, 1, 1)
    $sum = 0
    For $i = 1 To $runs
    $time = TimerInit()
    _IENavigate($oIE, $url, 1)
    $sum += TimerDiff($time)
    Next
    MsgBox(0, "Durchschnittliche Ladezeit", "Durchschnittliche Ladezeit ("& $runs &" Läufe): " & StringFormat("%.2f", $sum /$runs / 1000) & " Sekunden")

    [/autoit]


    (Die Werte könnten durch Caching usw. beeinflusst sein, also evtl. das IE-Create in die Schleife mit reinziehen falls es ansonsten unrealistisch ist...

    Zitat

    Aber Ihr seht es nicht als unmöglich an? Kann mir villeicht noch jemand einen Tip für Beratungsfirmen bezüglich AutoIt geben, die uns bei der Umsetzung unterstützen könnten?


    Nein, sicher nicht unmöglich. Firmen kenne ich keine, die AutoIt-Support bieten, glaube aber, dass unserer bei weitem gut genug ist ;).

    peethebee

  • Hi,

    vielen Dank für den Test, werd ich mir gleich mal anschauen. Bin ja selber schon am testen ^^ Gleich eine Frage dazu: wie kann man nach Grafiken suchen - nicht Pixelsearch und auch nicht über ne GUI (wie ich es schon in der Suche gefunden habe). Es müsste ja das Klicken des Users simuliert werden, wenn man es robotermäßig aufsetzen will. Also er müsste eine Element suchen - Maus hinbewegen - Klick... bzw. auch Texteingabe in Felder...

    Nein, sicher nicht unmöglich. Firmen kenne ich keine, die AutoIt-Support bieten, glaube aber, dass unserer bei weitem gut genug ist ;).

    peethebee

    Das Problem ist , dass wir hier keinen hinsetzen können und sagen: Mach mal. Braucht Einarbeitungszeit, das Skripten an sich etc pp. Da wäre es gut, jemanden einzukaufen, der das für uns macht - also falls sich jemand anbieten möcht :D Obwohl ich verschiedene Angebote einholen muss (alles nicht so einfach im öD :pinch: ).

    Ich werde erst einmal selber etwas rumexperimentieren - vielleicht brauchen wir dann schon gar keinen Support mehr ^^

    Doreen

    • Offizieller Beitrag

    Hallo,

    Solche simulieren Eingaben kann man mit der IE.au3 wunderbar machen. Ich persönlich habe dafür noch keine Anwendung gehabt, aber im Forum gibt es massig Material und die Hilfe liefert zu jedem der Befehle, die mit _IE beginnen, ein lauffähiges Beispiel :).

    Theoretisch gibt es auch eine "ImageSearch"-Funktion (siehe https://autoit.de/www.autoitscript.com), die aus AutoHotkey stammt, soweit ich weiß. Damit kann man den Bildschirm nach einem Bild abscannen, die IE.au3-Lösung ist aber wesentlich (!) robuster, wenn sie einsetzbar ist.

    peethebee

  • Ah, danke! Da IE bei uns Standard ist, werde ich mich da mal ran machen!

    Oscar - Suche war jetzt mehr so lapidar daher geschrieben - Er muss halt in einer Scrollleiste das Kürzel "KSC" für KundenServiceCockpit erkennen/finden und darauf klicken - dachte jetzt, das man das als .bmb hinterlegt. Wenn es natürlich anders geht, umso besser.

    Werde mich also mal mit der IE.au3 beschäfigen - wie ich das hier so sehe.

    Vielen Dank an euch!

  • Jap funktioniert bestens - ich bin begeistert :thumbup:

    Jetzt steh ich nur vor dem Problem, dass sich die Anwendung in einem 2. Fenster öffnet und darin dann weiter gearbeitet wird. in der Schleife wird dann aber das erste Fenster geschlossen und er fängt von vorn an. Wie kann ich es jetzt machen, dass er ins 2. fenster geht und da z. B. mit einer Schleife weiter Aufgaben macht und dann alle beide Fenster schließt?

    Danke für Ideen!

    Hab doch noch ein weiteres Problem. Ich habe ein paar Eingabe-Felder zu füllen, z. B. "Name", "PLZ" - habe es erstmal mit Tabstopps bis zur entsprechenden Position gelöst, aber das ist nciht wirklich praktisch. Hatte jetzt noch folgendes probiert

    Was kann ich tun???

    Einmal editiert, zuletzt von dhacker (16. Dezember 2008 um 16:53)

    • Offizieller Beitrag

    Du brauchst den Namen des Formulars und den musst Du dann als Übergabevariable für _IEFormElementGetObjByName verwenden:

    [autoit]


    $oForm = _IEFormGetObjByName ($oIE, "f")
    $oQuery = _IEFormElementGetObjByName ($oForm, "q")
    _IEFormElementSetValue ($oQuery, "AutoIt IE.au3")
    _IEFormSubmit ($oForm)

    [/autoit]
  • Danke Oscar. Das mit dem Formular hab ich in der Hilfe nicht so richtig verstanden :huh: Aber werde es einfach noch mal ausprobieren ^^

    Mist...also es liegt daran, dass ich dass mit dem "Form" nicht verstehe, was er da tut...Kannst du mir das mal erklären? Also das mein Script

    [autoit]

    Const $runs = 2
    #include <IE.au3>

    [/autoit][autoit][/autoit][autoit]

    $sum = 0
    For $i = 1 To $runs
    $time = TimerInit()
    ;Start InternetExplorer mit Mitarbeiterportal
    $oIE = _IECreate ("http://mitarbeiterportal-np.intranet.kkh.de/",1,1,1)
    WinSetState ( $oIE, "", @SW_MAXIMIZE )
    _IELoadWait ($oIE)
    ;Auswahl KSC aus Anwendungsfavouriten
    $Su = _IENavigate ($oIE, "http://mitarbeiterportal-np.intranet.kkh.de/anwendung/switchAnwendung.do?action-suchePerson=&anwendungsKuerzel=KSC&schluessel=&schluesselTyp=&suchenButton=true",1)
    _IELoadWait ($Su)

    [/autoit][autoit][/autoit][autoit]

    $oForm = _IEFormGetObjByName ($Su, "f")
    $o_name = _IEFormElementGetObjByName ($oForm, "name")
    $o_plz = _IEFormElementGetObjByName ($oForm, "plz")

    [/autoit][autoit][/autoit][autoit]

    _IEFormElementSetValue ($o_name, "Hacker")
    _IEFormElementSetValue ($o_plz, "30")

    [/autoit][autoit][/autoit][autoit]

    _IEFormSubmit ($oForm)

    [/autoit][autoit][/autoit][autoit]

    Next

    [/autoit]

    $oIE ruft folgende Seite auf:keinVirus.png -> Auswahl der Anwendung unter "Anwendungsfavouriten"
    $Su folgendes: autoit.de/wcf/attachment/3505/ -> Eingabe der Kriterien


    @ FirePanther: ok, das klingt wirklich besser. Der Quelltext stand nicht im Zusammenhang mit dem 1. Problem. Also es ist so, dass ich zum Starten einer Anwendung erst einmal Kriterien wie eben Name, PLZ erfassen muss (siehe Bild zu $Su)und wenn ich dann auf Starten gehe, öffnet sich ein 2. Fenster, die eigentliche Anwendung, in der dann beispiele Leistungen des Mitglieds erfasst werden können. -Verständlich? :wacko:

    Einmal editiert, zuletzt von dhacker (17. Dezember 2008 um 08:39)

    • Offizieller Beitrag

    Ich habe Dein Script mal etwas korrigiert:

    Spoiler anzeigen
    [autoit]


    Const $runs = 2
    #include <IE.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $sum = 0
    For $i = 1 To $runs
    $time = TimerInit()
    ;Start InternetExplorer mit Mitarbeiterportal
    $oIE = _IECreate("http://mitarbeiterportal-np.intranet.kkh.de/", 1, 1, 1)
    WinSetState($oIE, "", @SW_MAXIMIZE)
    _IELoadWait($oIE)
    ;Auswahl KSC aus Anwendungsfavouriten
    $Su = _IENavigate($oIE, "http://mitarbeiterportal-np.intranet.kkh.de/anwendung/switchAnwendung.do?action-suchePerson=&anwendungsKuerzel=KSC&schluessel=&schluesselTyp=&suchenButton=true", 1)
    _IELoadWait($oIE)

    [/autoit] [autoit][/autoit] [autoit]

    $oForm = _IEFormGetObjByName($oIE, "f") ; hier muss statt "f" der Name des Formulars (in Anführungsstriche) rein
    $o_name = _IEFormElementGetObjByName($oForm, "name")
    $o_plz = _IEFormElementGetObjByName($oForm, "plz")

    [/autoit] [autoit][/autoit] [autoit]

    _IEFormElementSetValue($o_name, "Hacker")
    _IEFormElementSetValue($o_plz, "30")

    [/autoit] [autoit][/autoit] [autoit]

    _IEFormSubmit($oForm)
    MsgBox(0,0, 'Zeit (ms): ' & TimerDiff($time))
    Next

    [/autoit]

    So müsste das jetzt richtig sein. Du musst nur noch den Namen des Formulars eintragen (siehe Kommentar).

  • Danke.

    Ich muss jetzt so blöd Fragen: was ist denn das Formular??? Ich kann mit dem Begriff irgendwie nix anfangen... :S

  • Ok, ich habs: meine Suche war schon richtig - nur in dem Wust an Quelltext das richtige Formular zu finden (ein hoch auf sprechende Bezeichnungen...) aber nun hab ich es und es funzt *dance*

    --- edit---
    Ich doch noch mal mit Frage :rolleyes:

    Ich möchte gern in folgender Anwendung (Neu AutoIt v3 Script.rar - das ominöse 2. fenster ;) ) die Reiter anklicken. Wollte das wieder über _IEFormElementGetObjByName und _IEAction machen, nur müsste ich die Site erst als Objekt definieren. Wie kann ich das tun - über den Titel?

    [autoit]

    $oKSC =
    ; Klick auf Reiter "Vorgänge Familie"
    $oForm3 = _IEFormGetObjByName($oKSC, "naviForm")
    $o_but2 = _IEFormElementGetObjByName($oForm3, "Vorg&auml;nge Familie")
    _IEAction ($o_but2, "click")

    [/autoit]

    thx for help :)

    5 Mal editiert, zuletzt von dhacker (17. Dezember 2008 um 15:43)

  • Das dachte ich mir schon :pinch:

    Habe mal etwas HTML rauskopiert - evtl ansprechen über die ID "Infomappe" und dann die Tab-Bezeichnungen?