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

标签 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);

代码工作正常,服务已启动并运行。我收到回复,分发 token 等。我认为将数据包装在 URL 中很好,因为该服务是为日志记录而构建的,所以最后,调用将是(例如):

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

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

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

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

此外,我不知道要将 HttpWebRequest 设置为什么“内容类型”以便与我的操作契约(Contract)兼容(我可以看到 JSON 的枚举,但“文本”应该是什么?)

除此之外,HttpWebRequest 非常慢。当我直接打开服务的 URL(例如“http://localhost:51849/Scribe.svc”)时,速度很快,但第二次我尝试调用方法(例如“”http://localhost:51849/Scribe.svc/GetStatus"),我有 1.5-2 秒的延迟(我已经完成所有代理修复以确保它尽可能快)。

如有任何帮助,我们将不胜感激。

最佳答案

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

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

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

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

它将生成客户端以正确调用您的服务。 使用 soap ui,你甚至可以测试做一堆调用来强调你的服务。 这是测试服务的好方法。

AFAIK I'm not really posting any data as all my data is embedded in the URL request itself; is this correct?

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

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

希望对你有帮助。

问候, 罗德里戈

关于c# - 使用 C# 测试 REST 日志记录 Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13127851/

相关文章:

c# - Entity Framework 6 - 多个 DefaultConnectionFactory?

c# - Assembly.GetTypes - 如果 GetExportedTypes 可用,为什么要使用它?

ruby-on-rails - Rails RSpec 吸盘冲床

testing - 如何在进行性能测试时在 jmeter 上启用 JS

android - 为测试人员推出测试版本的最佳方式

c# - PHP mcrypt_encrypt 到 .NET

c# - C# 中 new 关键字下的省略号?

azure - 使用 REST 将数据发送到 Azure IoT 中心

java - 我是否应该延迟定义 JPA ManyToOne,或者如果我确实不需要引用的数据,则只需将原始 id 映射到我的实体中?

jquery - 使用 REST API 在线获取 SharePoint 2013 中的列表数据(包括附件和其他字段数据)