摘要:設想下,如果有段程序,自動把你打開瀏覽器,然后跳轉到百度首頁。分為江湖傳言今年圣誕節會發布,主要是增強對移動端瀏覽器的測試。至于百度搜出來的那坨,誒,,往事不堪回首。這是面向用戶的最終測試。
一般來說對一個網站做測試,最直接的方法就是用手點,眼睛看。用手點和眼睛看把網站的功能點都過一遍,比如在百度首頁的搜索框里輸入 “coding”,點擊“百度一下”,用眼睛看會不會彈出有關 “coding” 的搜索頁面。不過,你點了2天之后就會發現,這些點擊和“眼睛確認”是一個機械式重復的過程。
當你遇到重復操作的事情,你就要想想如何讓機器去做這些事。用人腦去從事這種低等人工智能的活動絕對是種浪費。
設想下,如果有段程序,自動把你打開瀏覽器,然后跳轉到百度首頁。再輸入框里填充 “coding”,點擊搜索,套轉到搜索結果頁面之后,自動確認這個頁面上是否有 “coding” 的字樣。若有,輸出“測試通過”。若無,輸出“測試失敗”。你只需要點開程序,然后去吃個晚飯,然后回來看測試結果就好了(我就是這么干的),一切都如此簡單和美妙。
那么,需要什么工具來實現這個美妙的過程呢?首先你需要一雙“手”來點擊和一對“眼”來獲取信息 —— Selenium。 還需要一個腦子來操縱“手和眼”判斷測試對錯 —— Junit。 其實,Selenium 支持多種語言,比如說,ruby, python, Js, C#。他們都有相應成熟的測試框架,由于我用的是用 Java,相應的測試框架就用了 Junit 。這點已被前端小哥和 Ruby 大神吐槽致死。前端小哥說,既然你要測頁面為什么不用 JS 呢?因為前端就是用 JS 寫的,同源的語言會更好。 Ruby 大神說,用 Ruby 你會少寫很多行代碼。 其實,我那時就對 Java 熟悉一點,最后用 Java 寫了。 這里,雖然本人沒有親自嘗試過,但我還是想推薦下用 JS。 現在的網站,頁面上會有著大量的 ajax 請求,頁面的測試必須等待某些頁面元素的更新。在這方面 JS 會比 Java 方便點。
UI 測試工具 Selenium 簡介selenium 是一個操縱瀏覽器來進行測試的框架。分為 Selenium 1 ( RC ), Selenium 2 ( WebDriver ), 江湖傳言今年圣誕節會發布 selenium 3,主要是增強對移動端瀏覽器的測試。還有就是 Selenium IDE 和 Selenium Grid。 這里不介紹,可以看文檔.
Selenium 1 ( RC ), Selenium 2 ( WebDriver ) 的區別就是對瀏覽器操縱的方式。 RC 的原理就是通過對原始的頁面元素中注入一段特定的 JS 代碼來實現的。 學過 JS 的人都知道, JS 可以操控 DOM 元素,點擊,刪除,獲取元素屬性和文本。你可以把這些操作看成一個個 JS 函數。 只是瀏覽器對非同源的 JS 有限制, 舉個簡單的例子, 百度首頁上的 JS 代碼不能與淘寶首頁進行交互 (不能訪問它的 cookie 等)。 因此,就需要RC(Remote Control), 將特定的 JS 代碼加到服務器放回的數據中,再發送給瀏覽器,這樣就避開了同源的問題。 然后瀏覽器運行這些 JS 函數,進行測試。
WebDriver 用的方式更為直接,它本身就是瀏覽器的 API,所以是直接對瀏覽器進行操作。無需通過 JS 代理操作。
個人建議用 WebDriver。 因為,據“路邊社”可靠消息 selenium 3 會逐步拋棄 RC。
這4個多月了,一直在用 selenium 寫自動化測試,由小白到現在稍微熟悉。填了不少坑。 也算是有些心得,接下來如果有時間,我會在 coding 開個 selenium-study 的公有項目來具體講解一些實戰心得。 關于selenium的學習, 最好的教材是 selenium 官方文檔。 如果你的英文不太好,那么百度一下“蟲師 博客園”,里面有很多不錯的學習材料。 要是開發中遇到 bug 最好用英文在 google 里搜。 至于百度搜出來的那坨*,誒,,往事不堪回首。
UI 測試用例設計上文提到的自動化測試屬于功能測試范疇。所謂功能測試,簡單的說測試網站的功能點是否正常,比如能否注冊和登錄,能否在 coding 發冒泡,push 代碼等等。這是面向用戶的最終測試。
既然是功能測試,自然是圍繞功能來進行用例設計。用例大致分為兩個部分, 操作和表現。就“登錄 coding 網站”這一功能來說, 操作有,輸入個性后綴或郵箱以及密碼,點擊“登錄”按鈕。相應的 表現 為,登錄成功則跳轉到個人中心,同時輸出提示“歡迎***!”。若失敗,則彈出相應的失敗提示。
在編寫程序的時候, 調用selenium的接口來進行操作,用斷言 (assertX) 來判斷表現是否正確,例如登錄:
loginPage.clearAndSendKeys("#email",email); loginPage.clearAndSendKeys("#password",password); loginPage.clickElement(".large.button ", "#project-list"); assertEquals("登錄不成功",baseUrl + "user", loginPage.getDriver().getCurrentUrl());
這里的 loginPage 是我寫的一個 Page 類的實例。這個類包括 selenium 部分常用接口的封裝(如清除輸入框并輸入值:clearAndSendKeys(String cssSector, String inputContent)),以及一些常用的小測試用例,如驗證頁面提示是否正確, loginPage.verifyHint("用戶名或個性后綴不能為空");
因為有很多操作其實是一系列操作的組合操作,比如,測試討論評論的通知,創建討論,評論,驗證通知。多用點面向對象設計好點(方便添加新用例),但也不必全用。如:
createTopic(zombiePage, topic); commentTopic(ciwangPage, topic, "@" + zombieUser.getUserName()); Notification atSomeoneNotification = new Notification(notificationFileReader.getEmailIconClass(), ciwangUser, ciwangUser.getUserName()+ " 在 "+ topic.getTopicTitle() + " 的評論中提到了你。", zombieUser, topicFileReader.getTopicTitleInDetailPage() ,topic.getTopicTitle() ); notificationTest.verifyForTwoLinkFormat(atSomeoneNotification, "討論@某人",notificationFileReader.getAtSomeoneItemIcon());UI 定位 -- cssSelector
如果想要對元素進行操作,必須先定位到那個元素。 selenium 有很多種定位的方法:
其中,功能最強大的是 xpath 和 cssSelector,已覆蓋其他接口的功能。 cssSelector 寫起來比 xpath 要簡潔而且易于封裝。推薦使用 cssSelector 定位。
cssSelector 教程就不寫了。有 W3Cschool 在,我就不班門弄斧。講下一些自己的“最佳實踐”吧。
1.盡量寫的短,如果元素有 id, 千萬別客氣
2.選用有含義的類名
如上圖的任務,就該用 “.project-task”。之所以說上述 2 點,是因為前端常有改動。因此,選擇短且有含義的類名, 可以規避很大一部分改動的風險。 但也不是全部, 上個月有一天,前端小哥突然心血來潮。把冒泡的類名由 “tweet” 改成了 “bubbling”,改了我兩個小時,才讓程序又跑起來。 因此,還需要第三點。
3.把選擇器寫到配置文件里,然后用一個 fileReader 類去讀。如
public void sendComment(Page zombiePage, String commentContent){ zombiePage.sendKeys(topicFileReader.getCommentInput(),commentContent); zombiePage.clickElement(topicFileReader.getCommentButton()); assertTrue("評論沒有發送成功", zombiePage.waitElementDisappear(topicFileReader.getEmptyTopicComments())); }
這個月有一天, 討論的評論框被改掉了。我只需該兩行配置文件,代碼就可以跑了。
commentInput = #comment-form textarea commentButton = #comment-form .clockwise
寫選擇器還有一個好處就是,代碼的可讀性,讓別人知道選擇器的意義。
今天寫到這里。這篇水文能看到最后的,,我想,應該是真愛吧。如果有問題和講得不實的地方歡迎登錄 coding 私信我 (ciwang)。 Anyway, 歡迎大家拍磚
Coding 官方技術博客: http://blog.coding.net/
Coding 官網 : https://coding.net
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/8699.html
摘要:面試如何防騙一份優秀的前端開發工程師簡歷是怎么樣的作為,有哪些一般人我都告訴他,但是他都不聽的忠告如何面試前端工程師 更多資源請Star:https://github.com/maidishike... 文章轉自:https://github.com/jsfront/mo... 3月份前端資源分享 1. Javascript 使用judge.js做信息判斷 javascript...
摘要:最近微信低調發布了新版本。之所以說這是一個重大更新,是因為上次微信的版本號由升級到已經是年的事情了實際的更新也是挺大的,第一感受就是風格更加扁平化了。如果你能用上微信的版,那一定不簡單。 最近微信低調發布了 iOS 新版本: 7.0 。之所以說這是一個重大更新,是因為上次微信的版本號由 5.x 升級到 6.0 已經是 2014 年 的事情了! 實際的更新也是挺大的,第一感受就是 UI ...
摘要:此外,與訓練機器學習模型的作業相比,作業具有不同的執行配置文件。此外,還制作了一個界面,以便控制機器學習的參數指定用于訓練的數據量等。 摘要: 一份機器學習過來人的經驗清單分享,主要是包含一些關于構建機器學習工作流以及Apache Spark應該注意的一些事項,希望這個清單能夠幫助那些正在學習機器學習的相關人員少走一些彎路,節約一些時間。 showImg(https://segment...
閱讀 1907·2021-09-23 11:21
閱讀 1693·2019-08-29 17:27
閱讀 1053·2019-08-29 17:03
閱讀 719·2019-08-29 15:07
閱讀 1915·2019-08-29 11:13
閱讀 2374·2019-08-26 12:14
閱讀 904·2019-08-26 11:52
閱讀 1729·2019-08-23 17:09