Jak używać JMeter do testowania obciążenia aplikacji internetowych ASP.net implementujących stan wyświetlania
Jestem programistą .net bez wcześniejszego doświadczenia w testowaniu JMeter / Stress. Próbuję załadować test strony ASP.net, którą stworzyłem za pomocą JMeter. Powodem użycia JMeter jest to, że jest to narzędzie open source o dużej sławie i wiarygodności.
Odniosłem się doten link aby zadbać o stan witryny, który jest typową cechą ASP.net. Jednak moje wymagania nie są tak proste, jak tam wspomniano. Próbuję załadować test mojej witryny, wysyłając identyfikator użytkownika i hasło do strony logowania, a następnie przetestować inne strony, które mogą być przeglądane tylko wtedy, gdy logowanie się powiedzie.
Kroki, które podejmuję, aby to osiągnąć, są wymienione poniżej.
Utwórz serwer proxy HTTP, wybierając opcję WorkBench> Dodaj> Nie testowane elementy.Zmiana ustawień sieciowych w Firefoksie na port zdefiniowany w Http Proxy Server.TworzącThread Group
wybierając Plan testowy> Dodaj> Wątki (Użytkownicy)> Grupa wątków.TworzenieHTTP Request Defaults
wybierając opcję Grupa wątków> Dodaj> Element konfiguracji> Domyślne żądania HTTP.(a) Wprowadzanie adresu IP dla mojego zdalnego serwera wServer Name or IP:
(b) Wprowadzanie ścieżki do mojej strony logowania jako
/MyWebApplication/login.aspx
StwórzUser Defined Variables
wybierając opcję Grupa wątków> Dodaj> Element konfiguracji> Zmienne zdefiniowane przez użytkownika.Moja strona login.aspx jest bardzo prosta, pobiera identyfikator użytkownika i hasło z dwóch pól tekstowych i dopasowuje je w bazie danych, a jeśli się powiedzie, przekierowuje je na stronę LoginSuccess.aspx.
Mój login.aspx ma tylko trzy kontrolki serwera, dwaasp:TextBox
za otrzymanie loginu i hasła oraz jednegoasp:Button
za sprawdzenie ich w db.
Ich idtxtLogin
, txtPassword
, btnLogin
odpowiednio.
W zmiennych definiowanych przez użytkownika (utworzonych w kroku 6) dodałem admin i 123admin, które są prawdziwymi loginami w db, sprawdzanymi na stronie login.aspx, a po powodzeniu przekierowują na stronę LoginSuccess.aspx.
Zmienne zdefiniowane przez użytkownika:
Name: Value Description
login admin
password 123admin
Dodaję dwa narzędzia do wyrażeń regularnych, wybierając opcję Grupa wątków> Dodaj> Procesory pocztowe> Ekstraktor wyrażeń regularnych.
Zmieniłem nazwę pierwszego ekstraktora wyrażeń regularnych naView State Extractor
i dodając do nich następujące dane:
Reference Name: viewstate
Regular Expression: name="__VIEWSTATE" id="__VIEWSTATE" value="(.+?)"
Template:Odniosłem się do
Match No.(0 for Random): 1
Default Value: ERROR
Podobnie zmieniłem nazwę drugiego ekstraktora wyrażeń regularnych naEvent Validation Extractor
i dodając do nich następujące dane:
Reference Name: eventValidation
Regular Expression: name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="(.+?)"
Template:Odniosłem się do
Match No.(0 for Random): 1
Default Value: ERROR
W kroku 5 dodałem następujące dane
Send Parameters With the Request:
Name: - Value
txtLogin - $(login)
txtPassword - $(password)
__VIEWSTATE - $(viewState)
__EVENTVALIDATION - $(eventValidation)
Teraz dodałem HTTP Cookie Manager, wybierając opcję Thread Group> Add> Config Element> HTTP Cookie Manager.
Teraz dodałem Recording Controller, wybierając opcję Thread Group> Add> Logic Controller> Recording Controller.
Uruchomiłem HTTP Proxy Server, a następnie używając firefox wpisałem pełny adres URL do mojej strony login.aspx, wpisałem admin i 123admin w dwóch polach tekstowych i nacisnąłem przycisk Login i zostałem przekierowany pomyślnie na LoginSuccess.aspx. Zatrzymałem serwer HTTP Proxy i zamknąłem przeglądarkę Firefox.
Teraz zapisałem plan testów (zawierający zapisane kroki, tylko 2 kroki tutaj, 1 dla login.aspx i inny dla LoginSuccess.aspx) i uruchomiłem test i wyświetlono wynik testu w widoku drzewa wyników, który zwraca 500 błędów serwer.
Nie jestem w stanie określić, którego składnika tu brakuje, dzięki czemu nie mogę z powodzeniem używać JMeter. Zmieniłem tylko te wartości, które są tutaj wymienione, a dla wszystkiego, czego tutaj nie napisałem, wartości są domyślneNo of thread:
.