2013-09-01 26 views
21

Testuję w systemie Windows, próbując symulować żądania POST (z różnymi zmiennymi formularza) do testowania obciążenia. Próbowałem wszystkich rodzajów oprogramowania do testowania obciążenia, ale nie udało mi się go uruchomić.Jak symulować żądanie POST?

Dla żądań GET, wiem, że mogę po prostu umieścić parametry za url

http://www.example.com?id=yyy&t=zzz

Ale jak mogę symulować żądania POST?

Mam klienta REST chrome, ale nie wiem, co umieścić w nagłówkach i danych.

Oto, co starałem dotąd:

class Program 
    { 
     static void Main(string[] args) 
     { 

      string viewstateid = "/wEPDwUKLTY3NjEyMzE4NWRkK4DxZpjTmZg/RGCS2s13vkEWmwWiEE6v+XrYoWVuxeg="; 
      string eventid ="/wEdAAoSjOGPZYAAeKGjkZOhQ+aKHfOfr91+YI2XVhP1c/pGR96FYSfo5JULYVvfQ61/Uw4pNGL67qcLo0vAZTfi8zd7jfuWZzOhk6V/gFA/hhJU2fx7PQKw+iST15SoB1LqJ4UpaL7786dp6laCBt9ubQNrfzeO+rrTK8MaO2KNxeFaDhrQ0hxxv9lBZnM1SHtoODXsNUYlOeO/kawcn9fX0BpWN7Brh7U3BIQTZwMNkOzIy+rv+Sj8XkEEA9HaBwlaEjg="; 

      string username = "user1"; 
      string password = "ttee"; 

      string loginbutton = "Log In"; 

      string URLAuth = "http://localhost/login.aspx"; 
      string postString = string.Format("VIEWSTATE={0}&EVENTVALIDATION={1}&LoginUser_UserName={2}&LoginUser_Password={3}&LoginUser_LoginButton={4}",viewstateid,eventid, username, password,realm,otp,loginbutton); 

      const string contentType = "application/x-www-form-urlencoded"; 
      System.Net.ServicePointManager.Expect100Continue = false; 

      CookieContainer cookies = new CookieContainer(); 
      HttpWebRequest webRequest = WebRequest.Create(URLAuth) as HttpWebRequest; 
      webRequest.Method = "POST"; 
      webRequest.ContentType = contentType; 
      webRequest.CookieContainer = cookies; 
      webRequest.ContentLength = postString.Length; 
      webRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1"; 
      webRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; 

      webRequest.Referer = "http://localhost/login.aspx"; 

      StreamWriter requestWriter = new StreamWriter(webRequest.GetRequestStream()); 
      requestWriter.Write(postString); 
      requestWriter.Close(); 

      StreamReader responseReader = new StreamReader(webRequest.GetResponse().GetResponseStream()); 
      string responseData = responseReader.ReadToEnd(); 
      Console.WriteLine(responseData); 
      responseReader.Close(); 
      webRequest.GetResponse().Close(); 

     } 
    } 

Odpowiedz

20

Można spróbować http://www.hurl.it który jest łatwy do testowania API.

+0

W jaki sposób mogę opublikować ten post na wewnętrznym działającym serwerze programistycznym? – stryba

+1

Nie jestem pewien, czy potrafisz. Jeśli chcesz przetestować programistyczny interfejs API, sugerowałbym użycie aplikacji chrome Postman lub jeśli chcesz przetestować swoje API automatycznie, będziesz musiał użyć jakiegoś narzędzia do automatyzacji (na przykład dla PHP możesz użyć Behat). –

+0

Dokładnie mój punkt. – stryba

15

Byłoby pomocne, gdybyś podał więcej informacji - np. Jaki system operacyjny używasz, co chcesz osiągnąć, itd. Ale ogólnie rzecz biorąc cURL jest bardzo potężnym narzędziem wiersza polecenia I często korzystać (w systemie Linux) dla naśladując żądania HTML:

Na przykład:

curl --data "post1=value1&post2=value2&etc=valetc" http://host/resource 

OR, dla relaksującego API:

curl -X POST -d @file http://host/resource 

Możesz sprawdzić więcej informacji tutaj->http://curl.haxx.se/


EDYTOWANIE:

OK. Więc zasadniczo chcesz przetestować serwer REST? Wtedy cURL naprawdę nie jest pomocny, chyba że chcesz napisać własny program testujący obciążenie, nawet wtedy gniazda będą do zrobienia. Proponuję wypróbować Gatling. Dokumentacja Gatling wyjaśnia, w jaki sposób skonfigurować narzędzie, a stamtąd można uruchamiać wszystkie rodzaje żądań GET, POST, PUT i DELETE.

Niestety, nie licząc napisania własnego programu - tj. Wydzielając całą masę wątków i zasypując serwer REST różnymi typami żądań - naprawdę trzeba polegać na zestawie narzędzi do testowania obciążenia/obciążenia. Samo użycie klienta REST do wysyłania żądań nie będzie obciążało twojego serwera.


Więcej edytuje

tak aby symulować żądania POST na gnieździe, zasadniczo trzeba budować połączenia początkowego gniazdo z serwerem. Nie jestem facetem z C#, więc nie mogę dokładnie powiedzieć, jak to zrobić; Jestem pewien, że w Internecie jest 1001 samouczków z gniazdem C#. W przypadku większości interfejsów API RESTful zwykle trzeba podać identyfikator URI, aby poinformować serwer, co należy zrobić. Na przykład załóżmy, że Twój interfejs API zarządza biblioteką i korzystasz z żądania POST, aby poinformować serwer o aktualizacji informacji o książce o identyfikatorze "34". Twój URI może być

http://localhost/library/book/34 

Dlatego należy otworzyć połączenie z localhost na porcie 80 (lub 8080, lub cokolwiek portowy serwer jest włączony) i przejść wzdłuż nagłówku żądania HTML.Idąc na przykładzie biblioteki powyżej, twój nagłówek żądania może wyglądać następująco:

POST library/book/34 HTTP/1.0\r\n 
X-Requested-With: XMLHttpRequest\r\n 
Content-Type: text/html\r\n 
Referer: localhost\r\n 
Content-length: 36\r\n\r\n 
title=Learning+REST&author=Some+Name 

Stąd serwer powinien strzelać głową w odpowiedzi, po czym następuje niezależnie od API jest zaprogramowana, aby poinformować klienta - zazwyczaj coś powiedzieć POST powiodło się lub się nie udało. Aby przetestować swój interfejs API, powinieneś zrobić to w kółko, tworząc proces gwintowania.

Ponadto, jeśli publikujesz dane JSON, będziesz musiał odpowiednio zmienić swój nagłówek i zawartość. Szczerze mówiąc, jeśli chcesz zrobić to szybko i czysto, sugerowałbym użycie pythona (lub perla), który ma kilka bibliotek do tworzenia żądań POST, PUT, GET i DELETE, a także danych POSTing i PUTing JSON. W przeciwnym razie może skończyć się więcej programowania niż testowanie warunków skrajnych. Mam nadzieję że to pomoże!

+0

przy użyciu systemu operacyjnego Windows, chcę symulować dane testu POSTS dla obciążenia, próbowałem wszystkich rodzajów testu obciążenia, ale nie udało się go uruchomić – user1663380

+0

dla localhost nie wydaje się pracować – user1663380

+0

naprawdę chciałbym napisać własny program, pytanie jest nadal nie jestem w stanie umieścić parametrów POST pomyślnie w webrequest w moim C# kod – user1663380

4

Prosty sposobem jest użycie curl z linii poleceń, na przykład:

DATA="foo=bar&baz=qux" 
curl --data "$DATA" --request POST --header "Content-Type:application/x-www-form-urlencoded" http://example.com/api/callback | python -m json.tool 

lub tutaj jest przykład, jak wysłać żądanie POST przy użyciu surowego powłoki bash (JSON żądanie):

exec 3<> /dev/tcp/example.com/80 

DATA='{"email": "[email protected]"}' 
LEN=$(printf "$DATA" | wc -c) 

cat >&3 << EOF 
POST /api/retrieveInfo HTTP/1.1 
Host: example.com 
User-Agent: Bash 
Accept: */* 
Content-Type:application/json 
Content-Length: $LEN 
Connection: close 

$DATA 
EOF 

# Read response. 
while read line <&3; do 
    echo $line 
done 
0

To powinno pomóc, jeśli potrzebujesz publicznie dostępnej sieci strona, ale jesteś na PC. Aby odpowiedzieć (nie mogę jeszcze komentować): "Jak wysłać do serwera wewnętrznego działającego tylko z tym programem? - stryba"

NGROK tworzy bezpieczny publiczny adres URL na lokalnym serwerze internetowym na maszynie programistycznej (Permanent Adresy URL dostępne za opłatą, tymczasowo za darmo).
1) Uruchom ngrok.exe otworzyć wiersz polecenia (na pulpicie)
2) RODZAJ ngrok.exe http 80, aby rozpocząć tunel,
3) badanie przeglądając do wyświetlanego adresem, który przekazuje i wyświetlać lokalny domyślnie 80 stron na twoim komputerze PC.

Następnie użyj niektórych narzędzi zalecanych powyżej do POST do swojej strony ngrok ('https://xxxxxx.ngrok.io'), aby przetestować swój lokalny kod.

https://ngrok.com/