技术开发 频道

使用MCP对Ajax应用程序进行自动测试


IT168技术文档】 
    第二行引起实际的浏览器窗口关闭和打开,因为MCP使用java.awt.Robot来模拟鼠标和键盘的输入,这种模型也就意味着当运行测试用例的时候不能使用计算机。第三行创建了一个final BitSet实例,该方法可以处理浏览器的交互,该交互要求一个从浏览器到客户应用程序之间的回调。还有一个内部类,他是AjaxListener的一个实例,如4-49行所示。 

    AjaxListener有三个方法被测试覆盖,endAjax, errorAjax和startAjax。当浏览器成功完成一个Ajax事务时(Ajax Response code 4)endAjax被调用,当Ajax事务异常中止时,errorAjax被调用。当浏览器内的代码在XmlHttpRequest实例中调用send时,startAjax被调用。三个方法通过映射,该映射包括请求的信息。映射的内容根据被覆盖的方法而不同。 

    startAjax: 
    映射包括下列值 
    headers 
    所有请求的java.util.Map. 
    method 
    本事件请求的方法. 
    readyState 
    XMLHTTPRequest readyState的数字字符串 
    
    endAjax 和 errorAjax : 
    映射将包括下列值 
    method 
    本事件的请求方法 
    responseXML 
    响应XML的org.w3c.dom.Document实例 
    responseText 
    a String instance of the response Text. 
    status 
    从服务器响应的状态字符串像"200 OK". 
    headers 
    所有响应头的java.util.Map 
    method 
    本事件的请求方法 
    readyState 
    XMLHTTPRequest readyState的数字字符串 

    在Line 6,我们使用了一个特殊的enum,TestFeature在BitSet内定义了少量的任务为测试的不同断言,Line 6的flip表示Ajax的事务最终是成功的,Line8的flip表示,MCP确实为该事务提供了一个映射,Line 15表示XmlHttpRequest的responseText是按照期望出现的,Lines 24-34使用W3C DOM API来检测响应的XML和验证是否与预期的相符,Line 44 flip表示readState的值也是正确的,Line 46表示正在进行Ajax检测,这对后面是很重要的。 

    从内部类出来,在Line 50简单的增加了ajaxListener实例。 

    Line 53使MCP加载给定的URL,知道加载完成时进行阻塞,Line 55使MCP点击id或name为Germany的按钮,并等待加载完成,HTML的id属性值在一个页面内是唯一的,name属性的值并不需要唯一,因此,如果MCP没有找到给定的id,则开始找第一个与name属性相匹配的元素。Line 57选择Roadster。 

    在Line 59-65,页面从Roadster得到价格信息,使用Java的正则表达式来判断基本的价格和你的价格是否都是15700,Line 68使我们清除了点击复选框前的bitset,该复选框引起Ajax事务,在该例子中,点击复选框表明用户想增加cruise control到他们的车上。Line 69确实点击了,这次没有使用blocking click 方法。Line 71-73使用了一个无穷的循环来睡眠5秒钟。
Lines 84-90检查价格来验证价格在选择巡游控件后上升了。 

    MCP提供简单的API对于测试Ajax应用是足够的,更复杂的测试将使用Webclient API。
0
相关文章