如何在 jmeter post 请求中发送字节数组

How to send byte array in jmeter post request

有 WCF 服务。我必须访问的方法有 1 个参数作为输入类型为 Stream。

我不知道如何从 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;
        }

我认为最简单的方法是使用 HTTP Raw Request and Raw Data Source 插件,因为 JMeter 的 HTTP 请求采样器参数仅限于字符串,而使用这些插件,您可以随 HTTP 请求一起发送 "raw" 字节数组。

您可以使用 JMeter Plugins Manager

安装两个测试元素

我们可以在这里使用Java Request Sampler。我们可以编写自定义代码在字节流中创建我们自己的数据并执行 GET/POST。 我们可以查看 HttpSampler 的代码,在 post/get 方法中,我们可以 return 字节数组而不是字符串。

无法通过 Http Sampler 发送字节数组。即 HTTP Sampler 仅适用于 String