2017-08-23 237 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