商讯信箱
用户名: @
密  码:   注册|忘记密码
登录
个人用户经销商
您的位置:首页 > 技术频道 > 正文

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


IT168技术文档】 
    上述代码清单摘自JUnit,包括Webclient的可执行版,清单1展示了构造器,setUp方法,测试的一个私有实例变量,MCP实例。setUp方法调用mcp.setAppData(),这个重要的方法告诉了Webclient哪里可以找到本地浏览器的二进制(该例中Xulrunner)。如果Webclient不能被合适的进行初始化,该测试用例是失败的。如在代码15行。 

    清单2:实际的testCarDemo()单元测试 
    Listing 2: The testCardDemo method
1public void testCardemo() throws Exception { 2 mcp.getRealizedVisibleBrowserWindow(); 3 final BitSet bitSet = new BitSet(); 4 AjaxListener listener = new AjaxListener() { 5 public void endAjax(Map eventMap) { 6 bitSet.flip(TestFeature.RECEIVED_END_AJAX_EVENT.ordinal()); 7 if (null != eventMap) { 8 bitSet.flip(TestFeature.HAS_MAP.ordinal()); 9 } 10 // Make some assertions about the response text 11 String responseText = (String) eventMap.get("responseText"); 12 if (null != responseText) { 13 if (-1 != responseText.indexOf("<partial-response>") && 14 -1 != responseText.indexOf("</partial-response>")) { 15 bitSet.flip(TestFeature.HAS_VALID_RESPONSE_TEXT.ordinal()); 16 } 17 } 18 Document responseXML = (Document) 19 eventMap.get("responseXML"); 20 Element rootElement = null, element = null; 21 Node node = null; 22 String tagName = null; 23 try { 24 rootElement = responseXML.getDocumentElement(); 25 tagName = rootElement.getTagName(); 26 if (tagName.equals("partial-response")) { 27 element = (Element) rootElement.getFirstChild(); 28 tagName = element.getTagName(); 29 if (tagName.equals("components")) { 30 element = (Element) rootElement.getLastChild(); 31 tagName = element.getTagName(); 32 if (tagName.equals("state")) { 33 bitSet.flip(TestFeature. 34 HAS_VALID_RESPONSE_XML.ordinal()); 35 } 36 } 37 } 38 } 39 catch (Throwable t) { 40 41 } 42 43 String readyState = (String) eventMap.get("readyState"); 44 bitSet.set(TestFeature.HAS_VALID_READYSTATE.ordinal(), 45 null != readyState && readyState.equals("4")); 46 bitSet.flip(TestFeature.STOP_WAITING.ordinal()); 47 48 } 49 }; 50 mcp.addAjaxListener(listener); 51 52 // Load the main page of the app 53 mcp.blockingLoad("http://javaserver.org/jsf-ajax-cardemo/faces/chooseLocale.jsp"); 54 // Choose the "German" language button 55 mcp.blockingClickElement("Germany"); 56 // Choose the roadster 57 mcp.blockingClickElement("roadsterButton"); 58 // Sample the Basis-Preis and Ihr Preis before the ajax transaction 59 Element pricePanel = mcp.findElement("zone1"); 60 assertNotNull(pricePanel); 61 String pricePanelText = pricePanel.getTextContent(); 62 63 assertNotNull(pricePanelText); 64 assertTrue(pricePanelText.matches("(?s).*Basis-Preis\\s*15700.*")); 65 assertTrue(pricePanelText.matches("(?s).*Ihr Preis\\s*15700.*")); 66 67 // Choose the "Tempomat" checkbox 68 bitSet.clear(); 69 mcp.clickElement("cruiseControlCheckbox"); 70 71 while (!bitSet.get(TestFeature.STOP_WAITING.ordinal())) { 72 Thread.currentThread().sleep(5000); 73 } 74 75 // assert that the ajax transaction succeeded 76 assertTrue(bitSet.get(TestFeature.RECEIVED_END_AJAX_EVENT.ordinal())); 77 assertTrue(bitSet.get(TestFeature.HAS_MAP.ordinal())); 78 assertTrue(bitSet.get(TestFeature.HAS_VALID_RESPONSE_TEXT.ordinal())); 79 assertTrue(bitSet.get(TestFeature.HAS_VALID_RESPONSE_XML.ordinal())); 80 assertTrue(bitSet.get(TestFeature.HAS_VALID_READYSTATE.ordinal())); 81 bitSet.clear(); 82 83 // Sample the Basis-Preis and Ihr-Preis after the ajax transaction 84 pricePanel = mcp.findElement("zone1"); 85 assertNotNull(pricePanel); 86 pricePanelText = pricePanel.getTextContent(); 87 88 assertNotNull(pricePanelText); 89 assertTrue(pricePanelText.matches("(?s).*Basis-Preis\\s*15700.*")); 90 assertTrue(pricePanelText.matches("(?s).*Ihr Preis\\s*16600.*")); 91 92 mcp.deleteBrowserControl(); 93}
1 2 3
【内容导航】
第1页: setUp 方法 第2页: testCardDemo方法
第3页: 分析代码
©版权所有。未经许可,不得转载。
[责任编辑:郭宗一]
[an error occurred while processing this directive]