2017-08-23 5 views
0

Il existe un service WCF. La méthode à laquelle j'accède a 1 paramètre comme type de whoes d'entrée est Stream.Comment envoyer un tableau d'octets dans la demande de publication jmeter

Je ne sais pas comment fournir l'objet flux de JMeter au service WCF.

Actuellement, j'ai écrit une méthode C# (Projet MVC) qui accepte la chaîne de JMeter, puis la convertit en objet de type Stream, qui est ensuite traité par le service WCF. Mais cette approche ne donne ne donne pas pas les performances réelles du service WCF

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

Actuellement, je reçois une exception du type d'objet.

Voici l'exception:

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

Le code mon collègue utilise pour test unitaire même:

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

Pouvez-vous ajouter une exception et à quoi ressemble votre plan de test? – user7294900

Répondre

0

Nous pouvons utiliser Java demande Sampler ici. Nous pouvons écrire du code personnalisé créer nos propres données dans le flux d'octets et faire GET/POST. Grâce à Http Sampler, il n'est pas possible d'envoyer un tableau d'octets.

1

Je crois que la meilleure façon serait d'utiliser HTTP Raw Request et Raw Data Source plugins comme Les arguments de l'échantillonneur HTTP Request de JMeter sont limités aux chaînes seulement, tandis qu'avec ces plugins vous pouvez envoyer des tableaux d'octets "raw" avec vos requêtes HTTP.

Vous pouvez installer les deux éléments de test en utilisant JMeter Plugins Manager

JMeter Plugins Manager HTTP Raw Request

+0

Pourriez-vous élaborer, j'ai vu cette solution, mais comment puis-je fournir ma chaîne hexadécimale dans la demande de publication en tant que tableau d'octets. – Fazaikh