我有许多REST API端点,我正在通过Apache从Web客户端调用它们,我想编写一些自动化测试,以确保它们在Web浏览器之外正常工作。
我把它们写为单元测试测试,这是我到目前为止所做的:
[TestClass]
public class ApiTests
{
string local_host_address = "http://localhost:1234//";
public async Task<string> Post(string path, IEnumerable<KeyValuePair<string, string>> parameters)
{
using (var client = new HttpClient())
{
client.Timeout = new TimeSpan(0,0,5);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response_message = await client.PostAsync(local_host_address + path, new FormUrlEncodedContent(parameters));
var response = await response_message.Content.ReadAsStringAsync();
if (response_message.IsSuccessStatusCode)
{
return response;
}
else
{
throw new Exception("Request failed");
}
}
}
[TestMethod]
[TestCategory("ApiTests")]
public void TestLogon()
{
var parameters = new Dictionary<string, string>();
parameters["email"] = "[email protected]";
parameters["password"] = "rosebud";
Task.Run(() =>
{
var output = Post("Default.aspx/Logon", parameters);
Console.WriteLine(output.Result);
}).Wait();
}
}
......非常基本,它只是尝试调用特定的端点,并返回结果。问题是,这个调用返回基本的default.aspx网页主体,而不是default.aspx/logon生成的结果。我做错了一些事情,但我已经用调试器调试过了,我看不到我的错误。默认的.aspx/logon端点存在,当我通过网站访问它时,它工作得很好。我是错过了什么还是忽略了什么?
解决方案:
Bruno对我的代码片段的修改工作得很好。任何其他试图解决测试REST端点问题的人都可以将其放入单元测试并传入POCO,它将返回JSON响应。
1条答案
按热度按时间thtygnil1#
您将请求体作为FormUrlEncoded发送,尽管您将请求标记为application/json。
如果你的API是REST并且采用JSON,而不是采用 Dictionary,你可以将一个对象(例如,Newtonsoft.json):