2013-10-23 149 views
2

在用Selenium编写一些Web测试之后,我现在需要测试REST API。 我想用Selenium驱动我的浏览器,并验证我的网页浏览器中显示的结果以及启动我的API网址时生成的结果。 我的API网址处于HTTP模式,答案将采用JSON格式。集成Selenium Web测试和REST API测试

我发现放心:https://code.google.com/p/rest-assured/ 但在跳跃和使用它之前,我想知道是否可以很容易地将它与我的硒测试相结合,以及是否有更好的选择。

感谢

回答

1

您可以强制硒等待结果,成为DOM可用。所以是的,Selenium是一个很好的工具来测试你的REST调用,特别是如果你的结果更新页面上显示的HTML。

WebDriver driver = new FirefoxDriver(); 
driver.get("http://somedomain/url_that_delays_loading"); 
WebElement myDynamicElement = (new WebDriverWait(driver, 10)) 
    .until(ExpectedConditions.presenceOfElementLocated(By.id("myDynamicElement"))); 

关于更多examples请参见下页。

+1

嗨凯尔, 感谢您的回答,此脚本仅检查存在的元素,但如何检查网页的内容并将其与API调用的响应进行比较? 干杯。 Zied – Ziwdigforbugs

+0

@Ziwdigforbugs API调用完成后更新您的HTML。使用Selenium检查HTML元素。如果您需要更复杂的内容来直接检查JSON响应,请使用Selenium以外的工具。 – KyleM

1

当然可以将REST API集成到WebDriver。我一直在努力工作,它像一个魅力。

服务层功能:

/** 
* This function will retrieve the child nodes under the current TG element 
* @param webDriver The WebDriver reference 
* @param element The Web Element whose child nodes are to be retrieved 
* @return List<WebElement> The list of Child Elements for element. 
* @throws Exception 
*/ 
public static List<WebElement> getChildElements(WebElement element,WebDriver webDriver) throws Exception {   
    try{ 
     List<WebElement> elementChilds = element.findElements(By.xpath(GlobalTreeGridValues.TreeGrid.TG_Shared_NextLevelXPath)); 
     System.out.println("Avaialble child nodes for the current node are "+ element.findElements(By.xpath(GlobalTreeGridValues.TreeGrid.TG_Shared_NextLevelXPath)).size()); 
     return elementChilds; 
     }catch(ElementNotFoundException ex){ 
     System.out.println("Error in getting the XPath "+ ex.getMessage()); 
     return null; 
    }  
} 

为了读取该数据到Java对象,我们只需要JSON格式化和图书馆像的HttpClient等

阅读http://code.google.com/p/json-io/更多信息!

0

我认为Selenium更适用于UI测试。 对于测试REST API,在我看来有更好的工具。 您可以使用工具REST API Testing,如RestCase,RunscopevRest。 也有许多休息客户端可用,如邮递员等。

+1

Selenium也应该能够发送AJAX或HTTP请求。这并不回答问题,而是建议替代工具/库 – prasun

+0

他确实要求替代方案 - 我同意,Selenium当然可以拨打电话;然而,有更好的工具可用于适当的功能API测试。 – mansilladev

0

正如Krishnam所讨论的,这绝对可以通过使用httpclient或类似的。我发现它非常有用利用硒和HttpClient的API代码的组合,而不是单独的API测试工具,有以下原因:

  1. 能够运行获得通过调用API,然后读取验证网站的UI测试返回的内容
  2. 能够运行数据推送到服务器API调用,并运行硒UI代码来验证网站
  3. 使用JSON串行器看对象的容易地从API返回容易
  4. 对结果
  5. 能够在验证中进行任何自定义操作。就我而言,我已经为我的硒套件写了一个数据库访问层,以便轻松地测试已在数据库中正确保存的值。
  6. 在我的情况下,运行API有时需要大量的设置(或潜在的模拟)。在我测试的系统上,在运行API命令之前,可以在网站上使用Selenium webdriver命令,而无需太多困难地完成此设置。 (例如,在我的系统上,创建用户并激活他们的帐户,目前通过我们的API无法使用这个帐户,并且在数据库中模拟或设置是一场噩梦。

很显然,每个被测试的系统都不同,但这些都是可以帮助您确定这是否适合您的正确方法的一些好处。