[雪峰磁針石部落格]軟體測試專家工具包1web測試

書籍尋找發表於2018-08-20

web測試

本章主要涉及功能測試、自動化測試(參考: 軟體自動化測試初學者忠告)
、介面測試(參考:10分鐘學會API測試)、跨瀏覽器測試、可訪問性測試和可用性測試的測試工具列表。 安全測試工具和效能測試工具在其他章節。

selenium

web ui自動化測試的霸主,在爬蟲領域也頗有市場。

官網 http://www.seleniumhq.org

例項:

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介面測試

image.png

HTTPie是HTTP 的命令列客戶端。其目標是讓 CLI 和 web 服務之間的互動儘可能的人性化。

這個工具提供了簡潔的 http 命令,允許通過自然的語法傳送任意 HTTP 請求資料,展示色彩化的輸出。HTTPie 可用於與 HTTP 伺服器做測試、除錯和常規互動。

image.png

主要特性:

  • 直觀的語法
  • 格式化和色彩化的終端輸出
  • 內建 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也各不相同新增環境,可以讓我們設定一些環境變數,使得切換環境測試的時候,不用重寫請求。

image.png

image.png

另外還支援使用js自定義測試指令碼,測試結果還可以儲存在雲端。

Firefox MeasureIt

MeasureIt是螢幕尺子,通過它可以丈量頁面元素的尺寸。

image.png

Firesizer

用於測試解析度。較新版本火狐需要The Addon Bar外掛的支援。

image.png

FireShot

截圖應用有很多,比如:Picasa、Flickr、ImageShack等。FireShot 建立完整的網頁截圖的火狐外掛。截圖可以被快速註釋以及: 上傳到 Picasa、Flickr、ImageShack…。特性有

  • 以 PNG、GIF、JPEG、PDF 、BMP格式儲存到磁碟
  • 複製到剪貼簿
  • 列印
  • 使用電子郵件傳送
  • 在外部編輯器中開啟

image.png

SPOF-O-MATC

SPOF-O-MATIC是檢測的第三方單點故障的Chrome擴充套件, 並可以模擬第三方單點故障。

image.png

iMacros

如果你喜歡FireFox網頁瀏覽器,但是厭倦了重複性的任務比如每天訪問相同的網站,填寫表單,記憶密碼,那麼iMacros(Firefox版)就是你夢想的解決方案!
iMacros用來自動執行網頁上最具重複性的任務。有了iMacros,你就可以輕鬆快速的填寫表單,記憶密碼,從其它網站下載資訊,抓取網頁(從多個網站中獲取資訊),還有更多。你可以在你的計算機上保留巨集供自己使用,或者將它們放入網頁,部落格,公司內部網或者如何社交書籤服務和其他人一起分享。使用的極限只取決與你的想象力! 任何你用FireFox做的,iMacros都可以自動執行它。

免費版本支援Firefox、Chrome、Internet Explorer。

收費版本通過螢幕和圖片識別技術支援Adobe Flash, Adobe Flex, Silverlight和Java applet。

免費版本無控制結構功能。

image.png

Powerfuzzer

Powerfuzzer是開源的、高度自動化的,完全可定製,基於其他fuzzer的python web fuzzer。主要針對HTTP協議,生成大量隨機資料,試圖crash網站。最近更新時間2009,比較久遠,慎重使用。

image.png

原始碼地址

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 後期會撤掉該文。

image.png

image.png

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整合。

image.png

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測試。

image.png

image.png

商業軟體,主頁

Sahi

http://sahipro.com/

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。

image.png

image.png

image.png

Check My Links

死連結檢查Chrome擴充套件:https://chrome.google.com/webstore/detail/check-my-links/ojkcdipcgfaekbeaelaapakgnjflfglf?hl=en-GB

Dead Link Checker

線上死連結檢測:https://www.deadlinkchecker.com/

image.png

HotJar

Hotjar是線上的可用性工具,分析使用者行為,收費服務。https://www.hotjar.com/

image.png

Webpage Spell-Check Chrome Extension

chrome拼寫檢查擴充套件:https://chrome.google.com/webstore/category/extensions

image.png

SEO Centro

線上SEO測試:https://www.seocentro.com/

image.png

Tenon

線上可訪問性測試: https://tenon.io/

image.png

RoboBrowser

簡單的,Python 風格的庫,用來瀏覽網站,而不需要一個獨立安裝的瀏覽器。連結

RoboBrowser

簡單的,Python 風格的庫,用來瀏覽網站,而不需要一個獨立安裝的瀏覽器。連結

MechanicalSoup

用於自動和網路站點互動的 Python 庫。連結

Scrapy

快速高階的螢幕爬取及網頁採集框架。連結 –強烈推薦

參考資料


相關文章