我想设置自动化测试,以测试API。 更确切地说,例如,我想发送HTTP请求(POSTS)并测试响应。因此,它必须是无头浏览器测试。
我已将Selenium与NUnit和Phantom JS一起设置为驱动程序。测试是用C#编写的,我使用Visual Studio作为IDE。
我一直在谷歌搜索,但我似乎找不到上述组合的问题的具体答案。
上面的组合是否允许我编写测试来测试API,或者发送和接收HTTP请求和响应?
答案 0 :(得分:3)
您可能需要考虑的一个解决方案是使用Runscope。 Runscope提供了创建发送一个或多个HTTP请求的测试的能力。您可以使用来自一个请求的信息来驱动下一个请求。您可以安排测试定期运行,也可以使用webhook触发它们 您还可以从世界各地的不同数据中心运行测试,以测试响应时间。
有一个免费套餐,每月最多允许10,000个请求。
免责声明:我是Runscope的开发者倡导者。
答案 1 :(得分:1)
嗯,我可以通过最近几个月的经验回答我的问题。我编写自动化测试来发送测试请求,如post,get,put等,并使用基本的http响应正文和状态代码测试结果。这是测试api最简单的方法。当然,如果有人想进行深度测试,例如负载测试,那么可以使用适当的工具。
答案 2 :(得分:0)
我没有使用过NUnit或Phantom JS,但是,如果您的测试是用C#编写的,我想知道相同的代码是否适用。
我在测试课上写了一个助手,所以我可以轻易地一遍又一遍地做到这一点:
/// <summary>
/// Submit post request with an arbitrary input model and an arbitrary output model (could be the same model).
/// URL's of format baseURL/controller/action a la .NET MVC web api, i.e., http://something.com/api/Product/Sales
/// </summary>
/// <typeparam name="T"></typeparam>
/// <typeparam name="U"></typeparam>
/// <param name="controller"></param>
/// <param name="action"></param>
/// <param name="inputModel"></param>
/// <returns></returns>
private U DoWebAPIPostRequest<T, U>(string controller, string action, T inputModel)
{
string baseURL = "http://localhost:1234/api"; //add your base url for your service here
using (HttpClient client = new HttpClient())
{
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
string url = baseURL + "api/" + controller + "/" + action;
var response = client.PostAsJsonAsync<T>(url, inputModel);
string error = response.Result.Content.ReadAsStringAsync().Result;
if (response.Result.IsSuccessStatusCode)
{
U result = response.Result.Content.ReadAsAsync<U>().Result;
return result;
}
else throw new Exception(error);
}
}
然后从每个测试中调用它(这段代码假设您有一些POCO来表示进出Web服务的内容 - 我确信您可以发送和接收文本,但我对它很熟悉):
Sale saleToAdd = new Sale("...");
RequestResult result= DoWebAPIPostRequest<Sale, RequestResult>("Product", "Sale", saleToAdd);
答案 3 :(得分:0)
我使用PhantomJS(实际上我通常使用CasperJS作为PhantomJS的高级包装器)来测试Web服务。它非常棒(比Selenium好得多,它只想充当浏览器,所以不要让我直接POST到URL。)
我有一些我通过PHPUnit控制的PhantomJS测试,所以我相信你可以用C#和NUnit做同样的事情。我这样做的方式是:
$command="/usr/local/bin/phantomjs --ignore-ssl-errors=true ".escapeshellarg($temp_filename);
$command
我也直接使用套接字运行相同的测试,并使用Selenium(告诉它跳过需要POST数据的测试)。我喜欢这种覆盖,因为正在测试的API将在浏览器内部和外部使用。如果您的Web服务仅在浏览器内使用,PhantomJs测试就是您所需要的;如果你的Web服务只能用于C#代码,那么使用.NET的HttpClient
对象,如另一个答案所示,是最好的。