2013-09-01 9 views
21

Ich teste unter Windows und versuche, POST-Anfragen (mit verschiedenen Formularvariablen) für Lasttests zu simulieren. Ich habe alle Arten von Lasttestsoftware ausprobiert, aber es hat nicht funktioniert.Wie simuliere ich eine POST-Anfrage?

Für GET-Anfragen, ich weiß, dass ich nur

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

Parameter hinter der URL setzen können Aber wie simulieren ich eine POST-Anforderung?

Ich habe eine Chrome-REST-Client, aber ich weiß nicht, was in den Headern und Daten zu setzen.

Hier ist, was ich versucht habe, so weit:

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(); 

     } 
    } 

Antwort

20

Sie können http://www.hurl.it versuchen, die APIs zu testen, einfach ist.

+0

Wie schreibe ich an einen internen nur Entwicklungsserver mit diesem ausgeführt wird? – stryba

+1

Ich bin mir nicht sicher, ob Sie das können. Wenn Sie eine Entwicklungs-API testen möchten, würde ich vorschlagen, die Postman Chrome-App zu verwenden, oder wenn Sie Ihre API automatisch testen möchten, müssten Sie ein Automatisierungstool verwenden (zB für PHP könnte Behath verwendet werden). –

+0

Genau mein Punkt. – stryba

15

Es wäre hilfreich, wenn Sie weitere Informationen - z. welches Betriebssystem Ihr mit, was Sie erreichen wollen, etc. Aber im Allgemeinen cURL ein sehr mächtiges Kommandozeilen-Tool, das ich HTML-Anforderungen häufig (in Linux) verwenden zur Nachahmung:

Zum Beispiel:

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

OR, für eine RESTful API:

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

Sie können hier-> weitere Informationen Besuche http://curl.haxx.se/


BEARBEITUNGEN:

OK. Sie möchten Ihren REST-Server einem Stresstest unterziehen? Dann ist cURL wirklich nicht hilfreich, es sei denn, Sie wollen Ihr eigenes Programm zum Testen von Lasten schreiben, selbst dann wären Sockets der richtige Weg. Ich würde vorschlagen, Sie überprüfen Gatling. Die Gatling-Dokumentation erklärt, wie Sie das Tool einrichten, und von dort aus können Sie alle Arten von GET-, POST-, PUT- und DELETE-Anfragen ausführen.

Leider ist es nicht so einfach, ein eigenes Programm zu schreiben - also eine ganze Reihe von Threads zu generieren und Ihren REST-Server mit verschiedenen Arten von Anfragen zu überschwemmen - müssen Sie sich wirklich auf ein Stress-/Lasttest-Toolkit verlassen. Wenn Sie nur einen REST-Client zum Senden von Anforderungen verwenden, wird Ihr Server nicht stark belastet.


Mehr redigiert

Also, um eine Post-Anforderung an einer Steckdose zu simulieren, müssen Sie grundsätzlich die anfängliche Socket-Verbindung mit dem Server aufzubauen. Ich bin kein C# -Typ, also kann ich dir nicht genau sagen, wie man das macht; Ich bin mir sicher, dass es im Internet 1001 C# -Socket-Tutorials gibt. Bei den meisten RESTful-APIs müssen Sie normalerweise einen URI angeben, um dem Server mitzuteilen, was zu tun ist. Angenommen, Ihre API verwaltet eine Bibliothek und Sie verwenden eine POST-Anforderung, um den Server anzuweisen, Informationen zu einem Buch mit der ID 34 zu aktualisieren. Ihre URI könnte

http://localhost/library/book/34 

sein Daher sollten Sie eine Verbindung öffnen, auf Port auf localhost 80 (oder 8080, oder was auch immer Port des Servers ist), und übergeben entlang einer HTML-Request-Header.oben, folgt Ihre Anfrage Kopf wie aussehen könnte, mit der Bibliothek Beispiel Going:

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 

Von hier aus sollte der Server eine Antwort-Header zurückzuschießen, gefolgt von was auch immer die API dem Client zu sagen programmiert werden - in der Regel etwas zu sagen der POST ist erfolgreich oder fehlgeschlagen. Um Ihre API zu testen, sollten Sie dies im Wesentlichen immer wieder tun, indem Sie einen Thread-Prozess erstellen.

Wenn Sie JSON-Daten veröffentlichen, müssen Sie auch Header und Inhalt entsprechend anpassen. Ehrlich gesagt, wenn Sie dies schnell und sauber machen möchten, würde ich vorschlagen, Python (oder Perl) zu verwenden, das mehrere Bibliotheken zum Erstellen von POST-, PUT-, GET- und DELETE-Anforderungen sowie POST- und PUT-JSON-Daten hat. Andernfalls könnten Sie mehr Programmierungen als Stresstests durchführen. Hoffe das hilft!

+0

mit Windows OS, ich möchte Daten POSTS für Lasttest zu simulieren, habe ich alle Arten von Belastungstest versucht, aber es nicht funktionierte – user1663380

+0

für localhost es scheint nicht zu arbeiten – user1663380

+0

würde wirklich gerne eigene Programm schreiben, die Frage ist, ich bin immer noch nicht in der Lage, die POST-Parameter erfolgreich in der Webrequest in meinem C# -Code – user1663380

4

einfache Art und Weise ist curl von Befehlszeile zu verwenden, zum Beispiel:

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 

oder hier ist Beispiel dafür, wie roh POST-Anfrage senden Bash-Shell (JSON Anfrage):

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

Dies sollte helfen, wenn Sie ein öffentlich zugängliches Web benötigen Seite, aber du bist auf einem dev pc. Auch um zu antworten (kann ich noch nicht kommentieren): "Wie poste ich auf einen internen nur laufenden Entwicklungsserver mit diesem? - Stryba"

NGROK erstellt eine sichere öffentliche URL zu einem lokalen Webserver auf Ihrem Entwicklungscomputer (Permanent URLs verfügbar für eine Gebühr, temporär kostenlos).
1) Führen Sie ngrok.exe Befehlszeile zu öffnen (auf dem Desktop)
2) Typ ngrok.exe 80 http einen Tunnel zu starten,
3) Test durch, um die angezeigte Web-Adresse Surfen, die die lokale wird weiterleiten und anzeigen default 80 Seite auf Ihrem dev PC

Verwenden Sie dann einige der oben empfohlenen Tools zum POST auf Ihrer NGROK Site ('https://xxxxxx.ngrok.io'), um Ihren lokalen Code zu testen.

https://ngrok.com/

Verwandte Themen