【发布时间】:2017-08-23 11:17:43
【问题描述】:
有一个 WCF 服务。我必须访问的方法有 1 个参数作为输入,其类型是 Stream。
我不知道如何将流对象从 JMeter 提供给 WCF 服务。
目前我已经编写了一个 C# 方法(MVC 项目),它接受来自 JMeter 的字符串,然后将其转换为流类型对象,然后由 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[]& outputs)
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& 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;
}
【问题讨论】:
-
您能否添加异常以及您的测试计划是什么样的?
标签: automation jmeter performance-testing jmeter-plugins