2017-08-23 3 views
0

Es gibt einen WCF-Dienst. Die Methode, auf die ich zugreifen muss, hat 1 Parameter als Eingabe whoes type ist Stream.So senden Sie Byte-Array in jmeter Postanforderung

Ich weiß nicht, wie Stream-Objekt von JMeter zum WCF-Dienst bereitzustellen.

Zur Zeit habe ich eine C# -Methode (MVC Project) geschrieben, die eine Zeichenfolge von JMeter akzeptiert und sie dann in ein Stream-Objekt konvertiert, das dann vom WCF-Dienst verarbeitet wird. Aber dieser Ansatz nicht geben nicht die tatsächliche Leistung des WCF-Dienst nicht geben

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

Derzeit i eine Ausnahme von Objekttyp bin immer. Hier

ist die Ausnahme:

 <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> 

Der Code meine Kollegen Unit-Test verwendet die gleiche:

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

Können Sie eine Ausnahme hinzufügen und wie sieht Ihr Testplan aus? – user7294900

Antwort

0

verwenden, können wir hier Java anfordern Sampler verwenden. Wir können benutzerdefinierten Code schreiben, unsere eigenen Daten im Bytestream erstellen und GET/POST ausführen. Über HTTP-Sampler ist es nicht möglich, Byte-Array zu senden.

1

ich die einfachste Art und Weise glauben, wäre mit HTTP Raw Request und Raw Data Source Plugins als Die HTTP-Request-Sampler-Argumente von JMeter sind auf Strings beschränkt, während Sie mit diesen Plugins "rohe" Byte-Arrays zusammen mit Ihren HTTP-Anfragen senden können.

Sie können beide Testelemente installieren JMeter Plugins Manager

JMeter Plugins Manager HTTP Raw Request

+0

Könnten Sie bitte erläutern, ich sah diese Lösung, aber wie stelle ich meine hexadezimale Zeichenfolge in Post-Anfrage als Byte-Array. – Fazaikh

Verwandte Themen