[雪峰磁針石部落格]軟體測試專家工具包1web測試
web測試
本章主要涉及功能測試、自動化測試(參考: 軟體自動化測試初學者忠告)
、介面測試(參考:10分鐘學會API測試)、跨瀏覽器測試、可訪問性測試和可用性測試的測試工具列表。 安全測試工具和效能測試工具在其他章節。
selenium
web ui自動化測試的霸主,在爬蟲領域也頗有市場。
例項:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
browser = webdriver.Firefox()
browser.get(`http://www.yahoo.com`)
assert `Yahoo` in browser.title
elem = browser.find_element_by_name(`p`) # Find the search box
elem.send_keys(`seleniumhq` + Keys.RETURN)
browser.quit()
HTTPie(推薦) – 適用HTTP介面測試
HTTPie是HTTP 的命令列客戶端。其目標是讓 CLI 和 web 服務之間的互動儘可能的人性化。
這個工具提供了簡潔的 http 命令,允許通過自然的語法傳送任意 HTTP 請求資料,展示色彩化的輸出。HTTPie 可用於與 HTTP 伺服器做測試、除錯和常規互動。
主要特性:
- 直觀的語法
- 格式化和色彩化的終端輸出
- 內建 JSON 支援
- 表單和檔案上傳
- HTTPS、代理和認證
- 任意請求資料
- 自定義頭部
- 永續性會話
- 類 Wget 下載
- 支援 Python 2.6, 2.7 和 3.x
- 支援 Linux, Mac OS X 和 Windows
- 外掛
- 文件
- 測試覆蓋率
HTTPie 是用 Python 編寫,用到了 Requests 和 Pygments 這些出色的庫。
主頁:https://github.com/jakubroztocil/httpie
目前在 Github 獲得了 20k+ star。
使用 HTTP GET 方法時,就無需明確指定 HTTP 方法。
$ http https://china-testing.github.io/
$ http HEAD https://china-testing.github.io/
HTTP/1.1 200 OK
Accept-Ranges: bytes
Access-Control-Allow-Origin: *
Age: 141
Cache-Control: max-age=600
Connection: keep-alive
Content-Encoding: gzip
Content-Length: 10478
Content-Type: text/html; charset=utf-8
Date: Sun, 19 Aug 2018 08:03:11 GMT
Expires: Sun, 19 Aug 2018 07:53:03 GMT
Last-Modified: Fri, 17 Aug 2018 09:47:28 GMT
Server: GitHub.com
Strict-Transport-Security: max-age=31556952
Vary: Accept-Encoding
Via: 1.1 varnish
X-Cache: HIT
X-Cache-Hits: 1
X-Fastly-Request-ID: 1ee91d0b6ca01fa38b9db3e910548b6fb4ad4867
X-GitHub-Request-Id: 27A2:3F58:6BE9A7:95AAAA:5B791F85
X-Served-By: cache-hkg17925-HKG
X-Timer: S1534665791.152406,VS0,VE0
$ http -f POST http://httpbin.org/post key1=value1 key2=values
HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
Connection: keep-alive
Content-Length: 469
Content-Type: application/json
Date: Sun, 19 Aug 2018 08:11:06 GMT
Server: gunicorn/19.9.0
Via: 1.1 vegur
{
"args": {},
"data": "",
"files": {},
"form": {
"key1": "value1",
"key2": "values"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Connection": "close",
"Content-Length": "23",
"Content-Type": "application/x-www-form-urlencoded; charset=utf-8",
"Host": "httpbin.org",
"User-Agent": "HTTPie/0.9.9"
},
"json": null,
"origin": "183.62.236.90",
"url": "http://httpbin.org/post"
}
# 下載圖片
$ http https://china-testing.github.io/images/testing_training2.png > test.png
curl
-
背景
越來越多的應用程式遷移到Web上,為此大量需要HTTP指令碼自動地從網路中提取資訊,模擬使用者post或上傳資料到web伺服器。 Curl是用於做各種URL操作和傳輸的命令列工具。本文關注HTTP請求。並假定你已經會使用 `curl --help`或`curl --manual`獲取幫助。 Curl主要負責傳送資料和獲取返回,更復雜的功能比如迴圈請使用python之類的指令碼語言。
-
HTTP協議
HTTP是用來從Web伺服器獲取資料的協議。它是基於TCP/IP非常簡單的協議。該協議還允許資訊從客戶端傳送到伺服器。 HTTP是客戶端傳送到伺服器請求特定的動作的普通ASCII文字行以及伺服器返回實際內容前的幾行。 Curl傳送一個HTTP請求。該請求包含方法(如GET,POST,HEAD等),請求頭,有時還有請求體。 HTTP伺服器響應包含狀態行,響應頭和通常有body。 body部分是你請求的明文資料比如實際的HTML或影像等。
-
檢視協議
使用curl的選項--verbose(-v的縮寫)會顯示curl傳送到伺服器的命令及其他文字資訊。 --trace和--trace-ASCII甚至提供了更多細節。
$ curl -v china-testing.github.io/images/testing_training2.png
* Trying 185.199.108.153...
* TCP_NODELAY set
* Connected to china-testing.github.io (185.199.108.153) port 80 (#0)
> GET /images/testing_training2.png HTTP/1.1
> Host: china-testing.github.io
> User-Agent: curl/7.60.0
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Server: GitHub.com
< Content-Type: text/html
< Strict-Transport-Security: max-age=31556952
< Location: https://china-testing.github.io/images/testing_training2.png
< X-GitHub-Request-Id: EFCE:4360:8FF815:BF8995:5B79706B
< Content-Length: 178
< Accept-Ranges: bytes
< Date: Sun, 19 Aug 2018 13:28:12 GMT
< Via: 1.1 varnish
< Age: 0
< Connection: keep-alive
< X-Served-By: cache-hkg17928-HKG
< X-Cache: MISS
< X-Cache-Hits: 0
< X-Timer: S1534685292.854374,VS0,VE230
< Vary: Accept-Encoding
< X-Fastly-Request-ID: 4b3d799aa5d4b80bc504e08749e34962db119f30
<
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx</center>
</body>
</html>
$ curl --trace-ascii debug.txt china-testing.github.io/images/testing_training2.png
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx</center>
</body>
</html>
# 檢視時間
$ curl --trace-ascii debug.txt --trace-time china-testing.github.io/images/testing_training2.png
-
檢視響應
預設情況下curl傳送響應到stdout。可以使用-o或-O重定向。
-
URL
統一資源定位符的格式是網際網路上資源的地址。比如http://automationtesting.sinaapp.com/。 標準參見:RFC3986。
-
域名解析
主機名使用DNS解析或/etc/hosts解析為IP地址,也可以在URL中指定IP地址,而不是名稱來指定IP地址。 通過--resolve可以自定義域名解析: 對於開發等嘗試的情況下,你可以點出一個不同的IP地址,比如--resolve選項的主機名:
curl --resolve www.example.org:8080:127.0.0.1 http://www.example.org
- 埠和代理
curl --proxy http://proxy.example.org:4321 http://remote.example.org
- 使用者名稱和密碼
curl http://user:password@example.org
curl -u user:password http://example.org/
- GET
$ curl https://china-testing.github.io/
$ curl "http://www.hotmail.com/when/junk.cgi?birthyear=1905&press=OK"
–include (-i) 可以額外顯示響應頭。
-
HEAD
–head (-I)只請求頭部。但是有些網站未必支援。
- POST
$ curl --data "key1=value1&key2=value2" http://httpbin.org/post
{
"args": {},
"data": "",
"files": {},
"form": {
"key1": "value1",
"key2": "value2"
},
"headers": {
"Accept": "*/*",
"Connection": "close",
"Content-Length": "23",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "curl/7.60.0"
},
"json": null,
"origin": "183.62.236.90",
"url": "http://httpbin.org/post"
}
$ curl --data-urlencode "name=I am Daniel" http://www.example.com
- 檔案上傳POST
curl --form upload=@localfilename --form press=OK [URL]
POSTMAN(推薦) – 適用HTTP介面測試
Postman的主要功能
模擬各種HTTP請求:從常用的GET,POST到基於REST的PUT,DELETE …等等甚至還可以送出檔案,送出額外的頭。
收集功能:收集是請求的集合,在做完單一個測試的時候,你可以把這次的要求存到特定的收藏裡面,如此一來,下次要測試的時候,就不需要重新輸入。
養成習慣以後,網站API的每個方法都寫好存進去,以後在開發的時候,就可以迅速得看到結果。而收藏還可以匯入或是分享出來,讓團隊裡面的其他人,可以一起使用你建立起來的集合。
$ curl --data "key1=value1&key2=value2" http://httpbin.org/post
{
"args": {},
"data": "",
"files": {},
"form": {
"key1": "value1",
"key2": "value2"
},
"headers": {
"Accept": "*/*",
"Connection": "close",
"Content-Length": "23",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "curl/7.60.0"
},
"json": null,
"origin": "183.62.236.90",
"url": "http://httpbin.org/post"
}
整理過後的回傳結果:一般在用其他工具來測試的時候,回傳的東西通常都是純文字的生的,但如果是JSON,就是塞成一整行的JSON。這會造成閱讀時的障礙,而Postman可以針對回傳資料的格式自動美化,JSON,XML或是HTML都會整理成人類可以閱讀的型態。
設定環境:Postman可以自由新增環境,一般我們可能會有多種環境,發展,分期或地方,而這幾種環境的請求的URL也各不相同新增環境,可以讓我們設定一些環境變數,使得切換環境測試的時候,不用重寫請求。
另外還支援使用js自定義測試指令碼,測試結果還可以儲存在雲端。
Firefox MeasureIt
MeasureIt是螢幕尺子,通過它可以丈量頁面元素的尺寸。
Firesizer
用於測試解析度。較新版本火狐需要The Addon Bar外掛的支援。
FireShot
截圖應用有很多,比如:Picasa、Flickr、ImageShack等。FireShot 建立完整的網頁截圖的火狐外掛。截圖可以被快速註釋以及: 上傳到 Picasa、Flickr、ImageShack…。特性有
- 以 PNG、GIF、JPEG、PDF 、BMP格式儲存到磁碟
- 複製到剪貼簿
- 列印
- 使用電子郵件傳送
- 在外部編輯器中開啟
SPOF-O-MATC
SPOF-O-MATIC是檢測的第三方單點故障的Chrome擴充套件, 並可以模擬第三方單點故障。
iMacros
如果你喜歡FireFox網頁瀏覽器,但是厭倦了重複性的任務比如每天訪問相同的網站,填寫表單,記憶密碼,那麼iMacros(Firefox版)就是你夢想的解決方案!
iMacros用來自動執行網頁上最具重複性的任務。有了iMacros,你就可以輕鬆快速的填寫表單,記憶密碼,從其它網站下載資訊,抓取網頁(從多個網站中獲取資訊),還有更多。你可以在你的計算機上保留巨集供自己使用,或者將它們放入網頁,部落格,公司內部網或者如何社交書籤服務和其他人一起分享。使用的極限只取決與你的想象力! 任何你用FireFox做的,iMacros都可以自動執行它。
免費版本支援Firefox、Chrome、Internet Explorer。
收費版本通過螢幕和圖片識別技術支援Adobe Flash, Adobe Flex, Silverlight和Java applet。
免費版本無控制結構功能。
Powerfuzzer
Powerfuzzer是開源的、高度自動化的,完全可定製,基於其他fuzzer的python web fuzzer。主要針對HTTP協議,生成大量隨機資料,試圖crash網站。最近更新時間2009,比較久遠,慎重使用。
Robot Framework
Robot Framework是開源的自動化測試驗收測試框架,測試用例基於關鍵字驅動,使用表格式語法。表格可以寫在純文字,HTML,製表符分隔值(TSV),或reST格式的檔案中表示。
基於Robot Framework封裝開發了大量庫,比如appium、selenium。
下面列出部分Robot Framework,它們都可以在https://pypi.python.org
搜尋到。
robotframework-httplibrary、robotframework-imaplibrary、robotframework-ioslibrary、robotframework-sshlibrary、robotframework-tools、robotframework-pabot(並行測試)、robotframework-databaselibrary、robotframework-extendedselenium2library、plone.app.robotframework、robotframework-seleniumlibrary、robotframework-ride(編輯器)、robotframework-requests(網路請求)、robotframework-pageobjects、robotremoteserver、TestLink-API-Python-client、robotsuite
Robot Framework的長處在與漂亮的報表、不懂程式設計也可以使用。缺點是深入使用需要庫的開發工作量比較大,有很多python中能直接使用的功能不能呼叫,對於懂程式碼的人,不如直接使用pytest等框架來得直接。
參考資料:http://blog.chinaunix.net/uid-20393955-id-3072256.html 後期會撤掉該文。
Telerik
商業工具:Telerik, 基於windows,可以測試web、桌面、移動應用。它是用於功能測試,自動化測試,效能測試和移動應用測試。
特性包括:
- 無指令碼測試錄製回放。
- 跨流行的瀏覽器支援
- 支援HTML,AJAX,Silverlight、.NET應用程式測試。
- 能整合在Visual Studio Team Foundation Server中。
- 能與Nunit, MbUnit等XUnit整合單元測試。
- 與CruiseControl、MS Build Server及TeamCity整合
- Bug跟蹤工具的整合。
- Fiddler Web除錯整合。
- 與HP Quality Center整合。
twill
- 注意:最近更新時間為2014年,請謹慎使用。
twill是一門簡單的語言,允許使用者用命令列介面瀏覽網頁。還支援表格,cookies等最標準的Web功能。
twill通過簡單的Python介面支援自動化的Web測試。
twill是Python開源軟體。
下載:https://pypi.python.org/pypi/twill/
主頁:http://twill.idyll.org/
不需要太多程式設計基礎,推薦初學者使用。
例項:在google搜尋”twill Python”
setlocal query "twill Python"
go http://www.google.com/
fv 1 q $query
submit btnI # use the "I`m feeling lucky" button
show
Testingbot
Testingbot在500多種瀏覽器組執行跨瀏覽器測試,包括
Internet瀏覽器6,7,8,9,10,11和MicrosoftEdge。支援SeleniumRC和WebDriver測試。 Testingbot可在網路上輕鬆執行測試,支援流行的語言和測試框架,也支援iPhone / iPad(iOS 8的)和Android的Appium測試。
商業軟體,主頁
Sahi
SAHI是Web應用程式測試的自動化免費開源工具。 SAHI特別
適用於使用AJAX和Java的複雜Web應用程式的跨瀏覽器/多瀏覽器測試
主要特徵
- Internet Explorer,Firefox、Chrome瀏覽器,Safari,Opera等錄製回放。
- 非常簡單而強大的物件識別機制,工作acrossbrowsers。 SAHI不使用的XPath或CSS選擇器。它基於JavaScript的DOM,使用簡單,易於維護。 SAHI當元素沒有IDS也可使用。 SAHI使用關係型API,如_in,_near,_under,_leftOf,_rightOf等來唯一地標識的元件。 SAHI遍歷frame和iframe。 SAHI自動等待頁面載入和AJAX
活動。95%的情況下沒有必要新增等待語句。SAHI不需要求
瀏覽器聚焦點。 SAHI可以同時播放多個指令碼減少播放時間。 SAHI自動建立報表。 SAHI支援HTML5自定義標籤和陰影DOM。
Check My Links
死連結檢查Chrome擴充套件:https://chrome.google.com/webstore/detail/check-my-links/ojkcdipcgfaekbeaelaapakgnjflfglf?hl=en-GB
Dead Link Checker
線上死連結檢測:https://www.deadlinkchecker.com/
HotJar
Hotjar是線上的可用性工具,分析使用者行為,收費服務。https://www.hotjar.com/
Webpage Spell-Check Chrome Extension
chrome拼寫檢查擴充套件:https://chrome.google.com/webstore/category/extensions
SEO Centro
線上SEO測試:https://www.seocentro.com/
Tenon
線上可訪問性測試: https://tenon.io/
RoboBrowser
簡單的,Python 風格的庫,用來瀏覽網站,而不需要一個獨立安裝的瀏覽器。連結
RoboBrowser
簡單的,Python 風格的庫,用來瀏覽網站,而不需要一個獨立安裝的瀏覽器。連結
MechanicalSoup
用於自動和網路站點互動的 Python 庫。連結
Scrapy
快速高階的螢幕爬取及網頁採集框架。連結 –強烈推薦
參考資料
- 本文涉及的python測試開發庫 請在github上點贊,謝謝!
- 緊張整理更新中,討論 釘釘免費群21745728 qq群144081101 567351477
- 本文相關書籍下載
- python Web UI測試自動化
- python 網路爬蟲(Web Crawling)
相關文章
- [雪峰磁針石部落格]介面測試面試題面試題
- [雪峰磁針石部落格]軟體自動化測試初學者忠告
- [雪峰磁針石部落格]multi-mechanize效能測試工具
- [雪峰磁針石部落格]可愛的python測試開發庫Python
- [雪峰磁針石部落格]滲透測試簡介1滲透測試簡介
- [雪峰磁針石部落格]使用jython進行dubbo介面及ngrinder效能測試
- [雪峰磁針石部落格]flask構建自動化測試平臺1-helloFlask
- [雪峰磁針石部落格]flask構建自動化測試平臺3-模板Flask
- [雪峰磁針石部落格]selenium自動化測試工具python筆試面試專案實戰5鍵盤操作Python筆試面試
- [雪峰磁針石部落格]使用python3和flask構建RESTfulAPI(介面測試服務)PythonFlaskRESTAPI
- [雪峰磁針石部落格]flask構建自動化測試平臺7-新增google地圖FlaskGo地圖
- [雪峰磁針石部落格]tesseractOCR識別工具及pytesseract
- [雪峰磁針石部落格]2018最佳ssh免費登陸工具
- [雪峰磁針石部落格]2018最佳python編輯器和IDEPythonIDE
- [雪峰磁針石部落格]pythontkinter圖形工具樣式作業Python
- [雪峰磁針石部落格]python應用效能監控工具簡介Python
- [雪峰磁針石部落格]pythonGUI工具書籍下載-持續更新PythonNGUI
- [雪峰磁針石部落格]2019-Python最佳資料科學工具庫Python資料科學
- [雪峰磁針石部落格]python爬蟲cookbook1爬蟲入門Python爬蟲
- [雪峰磁針石部落格]資料倉儲快速入門教程1簡介
- [雪峰磁針石部落格]python包管理工具:Conda和pip比較Python
- [雪峰磁針石部落格]Bokeh資料視覺化工具1快速入門視覺化
- [雪峰磁針石部落格]python計算機視覺深度學習1簡介Python計算機視覺深度學習
- [雪峰磁針石部落格]pythonGUI作業:tkinter控制元件改變背景色PythonNGUI控制元件
- [雪峰磁針石部落格]python標準模組介紹-string:文字常量和模板Python
- [雪峰磁針石部落格]python計算機視覺深度學習2影像基礎Python計算機視覺深度學習
- [雪峰磁針石部落格]大資料Hadoop工具python教程9-Luigi工作流大資料HadoopPythonUI
- [雪峰磁針石部落格]python庫介紹-argparse:命令列選項及引數解析Python命令列
- 部落格測試
- [雪峰磁針石部落格]web開發工具flask中文英文書籍下載-持續更新WebFlask
- [雪峰磁針石部落格]資料分析工具pandas快速入門教程4-資料匯聚
- [雪峰磁針石部落格]python網路作業:使用python的socket庫實現ICMP協議的pingPython協議
- [雪峰磁針石部落格]Python經典面試題:用3種方法實現堆疊和佇列並示例實際應用場景Python面試題佇列
- 軟體安全測試有哪些測試要點?軟體安全測試報告價格是多少?測試報告
- [雪峰磁針石部落格]計算機視覺opcencv工具深度學習快速實戰1人臉識別計算機視覺深度學習
- 【軟體測試】——介面測試
- 測試部落格園皮膚
- [雪峰磁針石部落格]計算機視覺opcencv工具深度學習快速實戰2opencv快速入門計算機視覺深度學習OpenCV