2017-08-23 223 views
0

有一個WCF服務。我必須訪問的方法有1個參數作爲輸入whoes類型是Stream。如何在jmeter發佈請求中發送字節數組

我不知道如何從JMeter提供流對象到WCF服務。

目前我已經寫了一個C#方法(MVC項目),它接受來自JMeter的字符串,然後將其轉換爲Stream類型的對象,而不是由WCF服務處理。但這種做法並不給予WCF服務的實際性能

[WebInvoke(UriTemplate = "", Method = "POST")] 
    [OperationContract] 
    public Stream ReceiveChirp(Stream fileContents) 
    { 
     string response = ""; 
     long ticks = DateTime.Now.Ticks; 
     DateTime receiveTime = DateTime.Now; 

目前我收到了對象類型的異常。

這裏是個例外:

 <p class="heading1">Request Error</p> 
    <p xmlns="">The server encountered an error processing the request. Please see the <a rel="help-page" href="http://t2vnmeterservicessciexp.cloudapp.net/ReceiveChirp/help">service help page</a> for constructing valid requests to the service. The exception message is 'Object reference not set to an instance of an object.'. See server logs for more details. The exception stack trace is: </p> 
     <p> at Base.VN.Core.Generic.GenericExtensions.ChirpGenerator.ConvertStringToByteArray(String input) 
    at T2.VN.Core.MeterServices.MainEndPoint.ReceiveChirp(Stream fileContents) 
    at SyncInvokeReceiveChirp(Object , Object[] , Object[]) 
    at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]&amp; outputs) 
    at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&amp; rpc) 
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc&amp; rpc) 
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc&amp; rpc) 
    at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)</p> 

我的同事正在使用的代碼進行單元測試一樣:

public string TestServicePacket(string data) 
     { 
      var url = "http://test.net/"; 
      var requestUrl = string.Format("{0}/ReceiveChirp/", url); 
      var request = (HttpWebRequest)WebRequest.Create(requestUrl); 
      request.Timeout = Timeout.Infinite; 
      request.Method = "POST"; 
      request.ContentType = "text/plain"; 

      var dataTrailing = "&UserName=eReg&UserPassword=abc123"; 
      var dataTrailingBytes = Encoding.ASCII.GetBytes(dataTrailing); 

      var bChirp = ConvertStringToByteArray(data); 

      var ToSend = new byte[dataTrailingBytes.Length + bChirp.Length]; 
      ToSend = bChirp.Concat(dataTrailingBytes).ToArray(); 

      request.ContentLength = ToSend.Length; 

      using (var requestStream = request.GetRequestStream()) 
      { 
       // Send the file as body request. 
       requestStream.Write(ToSend, 0, ToSend.Length); 
       requestStream.Close(); 
      } 
      var response = (HttpWebResponse)request.GetResponse(); 
      var responseStream = response.GetResponseStream(); 
      var memoryStream = new MemoryStream(); 
      string resultResponse; 

      resultResponse = ConvertStream(responseStream); 
      return resultResponse; 
     } 
+1

你可以添加異常,你的測試計劃是什麼樣子? – user7294900

回答

0

這裏,我們可以使用Java請求採樣同時安裝測試元素。我們可以編寫定製的代碼,在字節流中創建我們自己的數據,並執行GET/POST。 通過Http Sampler無法發送字節數組。

1

我認爲最簡單的方法將使用HTTP Raw RequestRaw Data Source插件, JMeter的HTTP請求採樣器參數僅限於字符串,而使用這些插件時,您可以發送「原始」字節數組以及HTTP請求。

可以使用JMeter Plugins Manager

JMeter Plugins Manager HTTP Raw Request

+0

請你詳細說明一下,我看到了這個解決方案,但是如何在發佈請求中提供我的十六進制字符串作爲字節數組。 – Fazaikh