2013-09-01 39 views
21

Windows üzerinde test ediyorum, yük testi için POST isteklerini (farklı form değişkenleri ile) benzeştirmeye çalışıyorum. Her türlü yük testi yazılımını denedim ancak çalışmayı başaramadım. GET istekleri içinPOST isteği nasıl simüle edilir?

, ben sadece url

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

arkasında parametrelerini koyabilirsiniz biliyorum Ama nasıl bir POST isteği taklit mi?

Bir krom REST İstemcisine sahibim ancak başlıklara ve verilere ne yazacağımı bilmiyorum.

İşte ben bugüne kadar çalıştığım buydu:

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

     } 
    } 

cevap

20

Sen API'leri test etmek kolaydır http://www.hurl.it deneyebilirsiniz.

+0

Nasıl bu bir iç sadece çalışan geliştirme sunucuya yayınlarım? – stryba

+1

Yapabileceğinden emin değilim. Bir geliştirme API'sini test etmek isterseniz, Postman chrome uygulamasını kullanmanızı öneririm veya API'nizi otomatik olarak test etmek isterseniz, bazı otomasyon araçlarını kullanmak zorunda kalırsınız (örneğin, Behat'i kullanabileceğiniz PHP için) –

+0

Tam olarak benim amacım. – stryba

15

Daha fazla bilgi vermeniz yararlı olur - ör. Örneğin

:

curl --data "post1=value1&post2=value2&etc=valetc" http://host/resource 
göründüğünü anlamak için genellikle cURL Sık sık HTML isteklerini taklit için (linux) kullanan çok güçlü bir komut satırı aracıdır anlamda, vb başarmak istediğiniz kullanılarak Ama OS

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

Sen burada->http://curl.haxx.se/


daha fazla bilgi kontrol edebilirsiniz: bir sığınakta API

YA,DÜZENLEME:

Tamam. Yani temelde REST sunucunuza stres testi yapıyorsunuz? Daha sonra kendi yük testi programınızı yazmak istemediğiniz sürece cURL gerçekten işe yaramıyor, daha sonra soketler gitmenin yolu olacaktı. Gatling'u kontrol etmeni öneririm. Gatling belgeleri, aracın nasıl kurulacağını açıklar ve buradan her türlü GET, POST, PUT ve DELETE isteklerini çalıştırabilirsiniz.

Ne yazık ki, kendi programınızı yazmaktan başka - yani, bir sürü iş parçacığını doğurmak ve REST sunucunuzu farklı türdeki isteklerle sınırlamak - gerçekten bir stres/yük testi araç setine güvenmeniz gerekiyor. Sadece istek göndermek için bir REST istemcisi kullanarak sunucunuza fazla stres atmayacak.


fazla düzenleme

Yani bir soket üzerinde bir post isteği taklit etmek amacıyla, temelde sunucu ile ilk soket bağlantısı kurmak zorunda. Ben bir C# adamı değilim, bu yüzden nasıl yapacağınızı tam olarak anlatamam; Eminim internette 1001 C# soket öğreticisi var. En RESTful API'leri ile genellikle sunucunun ne yapması gerektiğini bildiren bir URI sağlamanız gerekir. Örneğin, API'nizin bir kitaplığı yönetdiğini ve sunucunun '34' kimliğine sahip bir kitap hakkındaki bilgileri güncellemesini bildiren bir POST isteği kullanıyorsunuz. Kişisel URI Bağlantı noktası 80 üzerinde localhost bir bağlantı açmalı (veya 8080 ya da sunucu üzerinde ne olursa olsun bağlantı noktası) ve bir HTML isteği başlığı iletir nedenle

http://localhost/library/book/34 

olabilir.Yukarıdaki kütüphane örneği devam ettirecek gibi görünebilir sizin istek başlığı şöyle:

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 

Buradan sunucu API istemcisi anlatmak için programlanmış ne olursa olsun ardından yanıt başlığını, karşı ateş gerektiğini - söylemek genellikle bir şey POST başarılı veya başarısız oldu. API'nizi test etmek için, iş parçacığı bir süreç oluşturarak bunu tekrar tekrar yapmanız gerekir.

Ayrıca, JSON verilerini gönderiyorsanız, başlığınızı ve içeriğinizi buna göre değiştirmeniz gerekecektir. Açıkçası, bunu hızlı ve temiz bir şekilde yapmak istiyorsanız, POST, PUT, GET ve DELETE isteği oluşturmak için POSTing ve PUTing JSON verilerinin yanı sıra çeşitli kütüphanelere sahip python (veya perl) kullanmayı öneririm. Aksi takdirde, stres testinden daha fazla programlama yapıyor olabilirsiniz. Bu yardımcı olur umarım!

+0

Windows işletim sistemi kullanarak, ben yük testi için POSTS simüle etmek istiyorum, Ben yük testi her türlü denedim, ancak bu yerel çalışma için – user1663380

+0

işe yaramazsa işe yaramıyor gibi görünüyor – user1663380

+0

gerçekten kendi programı yazmak istiyorum soru hala benim C# kod – user1663380

6

Postacı, API'larınızı test etmek için en iyi uygulamadır!

Rotalarınızı alabilir veya dışa aktarabilir ve tüm vücut taleplerinizi hatırlatabilirsiniz! (JSON

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 

veya burada Bash kabuğu kullanılarak ham POST isteği nasıl gönderileceği örnektir: :)


https://chrome.google.com/webstore/detail/postman-rest-client-packa/fhbjgbiflinjbdggehcddcbncdddomop

4

Basit yolu, örneğin komut satırından curl kullanmaktır istek):

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

Bu, herkese açık bir ağa ihtiyaç duyduğunuzda yardımcı olur. site ama siz bir dev pc'sindesiniz. Ayrıca yanıtlamak için (Ben henüz yorum yapamam): "Bu ile dahili bir çalışan geliştirme sunucusuna nasıl gönderirim? - stryba"

NGROK, geliştirme makinenizdeki yerel bir web sunucusuna güvenli bir genel URL oluşturur (Kalıcı Bir ücret karşılığında kullanılabilen, ücretsiz geçici URL'ler).
1) Masaüstünde komut satırını()
2) bir tünel başlatmak için ngrok.exe http 80 Tip açmaya ngrok.exe çalıştırın iletmek ve yerel görüntüler görüntülenen web adresine göz atarak
3) testi dev PC'nizde varsayılan 80 sayfa

Sonra yerel kodunuzu test etmek için ngrok sitenize ('https://xxxxxx.ngrok.io') POST için önerilen araçlardan bazılarını kullanın.