使用C#测试REST日志记录Web服务

时间:2012-10-29 18:51:50

标签: c# rest testing

我使用C#在VS2012中创建了一个非常基本的REST Web服务。我采取的方法见下面的一个例子:

[OperationContract]
[WebInvoke(Method = "GET",
        ResponseFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.Wrapped,
        UriTemplate = "OpenSession/{key}/{source_userid}/{source_id}/{source_version}/{source_ip}")]
string OpenSession(string key, string source_userid, string source_id, string source_version, string source_ip);

代码工作正常,服务正常运行。我得到了回复,令牌被分发等等。我认为将URL中的数据包装得很好,因为服务是为日志记录而构建的,所以最后,调用将是(例如):

www.service.site/service.svc/2/5/12/HELLO

(顺便说一句,如果有一个更好的方法来做这个,同时保持它的REST服务请告诉我)

我遇到的问题是......如何正确测试?我需要为此服务模拟1,000个并发命中,并构建了一个自定义C#Windows应用程序来执行此操作,但我遇到了许多问题。

首先,我不知道如何使用HttpWebRequest和流读取器/写入器以可管理的格式正确发送/接收数据。我看到请求有GET和PUT方法等等,但老实说,我似乎无法将帖子数据与URL信息分开。 AFAIK我并没有真正发布任何数据,因为我的所有数据都嵌入在URL请求本身中;这是对的吗?

另外,我不知道设置HttpWebRequest的“内容类型”是什么,以便与我的操作合同兼容(我可以看到JSON的枚举但是“文本”应该是什么?)

最重要的是,HttpWebRequest极其缓慢。当我直接打开服务的URL(例如“http:// localhost:51849 / Scribe.svc”)时,它很快,但第二次我尝试调用一个方法(例如“”http:// localhost:51849 / Scribe.svc / GetStatus“),我得到1.5-2秒的延迟(我已经完成了所有代理修复,以确保它尽可能快)。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:0)

我不知道你是否知道这个实用程序: SoapUI

您可以使用它来引用您的服务并生成测试您的服务的请求。

安装非常简单。安装后,您必须单击文件/新的SoapUI项目。 然后,在弹出窗口中,使用服务的wsdl填写“Initial WSDL / WADL:”字段,如下所示:

http://localhost:51849/Scribe.svc?wsdl

它会生成客户端以正确地对您的服务进行调用。 使用soap ui,你甚至可以测试一堆电话来强调你的服务。 这是测试服务的好方法。

  

AFAIK我并没有真正发布任何数据,因为我的所有数据都嵌入在URL请求本身中;这是对的吗?

是。这就是GET请求的工作原理。数据在您的网址上传递。您应该只在不更改服务器上的数据状态时使用GET请求,否则您应该使用post。

要在服务器上创建/更新数据时使用的PUT方法。

我希望它有所帮助。

此致 罗德里戈

答案 1 :(得分:0)

也许你应该考虑使用一些性能工具。 有很多和他们,应该很容易找到一个适合你的pourpose。 Jmeter可能是个不错的选择。

这是一个guide,展示了如何使用Jmeter测试REST Web服务。

希望它可以提供帮助。

答案 2 :(得分:0)

感谢您的回复!我实际上现在正在使用测试系统,可以通过数千个定时器控制的会话来关闭我的服务。解决PUT请求问题的关键是使用空设置:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "PUT";
req.ContentType = "application/json";
req.ContentLength = 0;

我确实看过这些工具,但根据我的具体需求,我发现编写一个自定义计时器控制的应用程序是最好的方法。

我不确定延迟是否仍有问题,或者甚至可能与调试状态有关。一旦我将服务发布到Azure并远程测试,如果基于服务的连接存在任何延迟问题,我会更好地了解...