Web 自動化測試框架 sweetest 介紹

介紹

sweetest 是一款 Web 自動化測試框架,或者說是解決方案,名字取 Selenium, Web UI, Excel, Element, Test 含義。
特色:python

  1. 簡單快速,輕鬆上手
  2. 無需編碼能力
  3. 在 Excel 中以文本編寫測試用例
  4. 維護成本低
  5. 支持千、萬級別的用例規模
  6. 擁抱變化,支持敏捷

背景

目前,Web 自動化測試基本上是以 Selenium 爲接口來編寫測試代碼,但效果每每不是很好,廣泛遇到以下問題:git

  1. 用例設計人員的編碼能力很弱,測試代碼編寫和維護成本高,效果差;
  2. 測試代碼量大,測試意圖不直觀,沒法支撐千、萬級別的用例規模;
  3. Web 頁面元素的定位很是繁瑣,且頁面結構常常變更,致使用例失效。

咱們知道,傳統的測試用例通常是在 Excel 中用文本編寫的,若是自動化測試用例也這麼寫,是否是就能夠解決問題1和2?
對於問題3,我想是時候對開發提出一些要求了,同時咱們的元素定位也要優化,讓頁面自由的去變化,而咱們的定位只作最小適用。github

實現思路

  1. Selenium 爲底層接口;
  2. 在 Excel 中用文本編寫測試用例;
  3. 元素定位表格化,且優先使用「板塊通用定位法」;
  4. 要求開發提供必要的、統一的元素屬性;
  5. 框架負責解析測試用例,執行用例,記錄日誌,輸出測試結果。

方案

  1. 開發語言:Python
  2. 底層接口:Selenium
  3. 用例工具:Excel

測試用例以下圖:
testcasechrome

安裝

環境要求

  • 系統要求:Windows
  • Python 版本:3.6+
  • Selenium
  • 瀏覽器:Chrome
  • Chrome 驅動: chromedriver

安裝 sweetest

pip install sweetest瀏覽器

快速體驗

打開 cmd 命令窗口,切換到某個目錄,如:D:Autotest框架

sweetest
cd sweetest_sample
python start.py

install

OK,若是一切順利的話,sweetest 已經跑起來了工具

目錄結構

dir

目錄 說明
element\ 頁面元素表目錄
Baidu-Elements.xlsx 頁面元素表,名稱格式:project_name + "-Elements.xlsx"
junit\ junit格式測試結果目錄
log\ 自動化測試運行日誌目錄
report\ Excel 格式測試結果目錄
snapshot\ 錯誤截圖目錄
testcase\ 測試用例目錄
Baidu-TestCase.xlsx 測試用例,名稱格式:project_name + "-TestCase.xlsx"
start.py 啓動腳本,test = Autotest(project_name, sheet_name)

備註:以上3處的 project_name 必須一致測試

頁面元素表

頁面元素表的做用主要是把元素定位獨立出來,一是方便維護定位信息,二是測試用例中用元素名稱書寫,可讀性更高。優化

elements

目錄 註釋
page element 所在的頁面,在全部頁面均可用的 element 放在「通用」下面,如 title
frame element 所在的 frame id,若是是頂層 frame,可爲空。
name element 名稱,在不一樣的 page 下面能夠同名
by Selenium 定義方式
value Selenium 定義的值
備註 註釋做用

元素定位

  1. id, link_text, partial_link_text, xpath, class_name編碼

    如:

    page name by value
    百度搜索頁面 搜索框 id kw

    則自動化運行時會以 find_element_by_id('kw') 來定位

  2. 帶變量的定位方式

    如示例中:

    page name by value
    百度搜索頁面 搜索結果# xpath //*[@id="#"]/h3/a

    寫用例時,須要在 搜索結果# 後面帶上變量,如: 搜索結果#1

    操做 頁面 元素
    點擊 百度搜索頁面 搜索結果#1

    則自動化運行時會以 find_element_by_xpath('//*[@id="1"]/h3/a') 來定位

    已定義好的經常使用變量定位方式:

    • id#
    • link#
    • *link#
    • xpath#
    • class#
    • name#
    • url#

    如:url#www.baidu.com

    固然,若是#後面的變量不夠直觀的話,不建議太多使用這幾個變量方式。

  3. 頁面標題

    頁面的 title

  4. 頁面URL

    頁面的 url

    通常來說,導航欄在全部頁面都存在,應該把導航欄放在「通用」下面,作成變量定位方式,如示例中的:

    page name by value
    通用 搜索頁導航欄# xpath //*[@class="s_tab"]//a[text()="#"]

    用例中的寫法:

    操做 頁面 元素
    點擊 通用 搜索頁導航欄#新聞

測試用例

testcase

下拉菜單配置

操做、頁面、元素這些列其實都是選項列表,利用 Excel 的下拉菜單功能,可以讓書寫用例更方便,且不易筆誤。
下圖是測試用例文件中的 ElementsMap 頁面:

maps

咱們能夠經過 Excel 的菜單欄「公式-名稱管理器」來配置這些菜單,同時在用例頁面經過「數據-數據有效性」配置好「操做」的下拉菜單,以及「頁面-元素」的二級聯動下拉菜單。

用例字段

必填字段:

  • 用例編號
  • 步驟編號
  • 操做
  • 頁面
  • 元素

前置條件:

  • BASE: 整個測試套件的基礎,必須經過纔會執行下一步,如:登陸;若是有的話應該爲第一個測試用例。
  • SETUP:每一個測試用例執行前須要執行的用例,只有 SETUP 執行成功纔會執行該用例,如:返回首頁。
  • MAIN:一組用例的第一用例,和 SUB 一塊兒使用,一個 MAIN 後面能夠帶多個連續的 SUB 用例。此用例須要先執行 SETUP 用例。
  • SUB:和 MAIN 一塊兒使用,當前一個用例(MAIN or SUB)執行結果爲經過時纔會執行,不然測試結果置爲 Blocked;且執行此用例前不會執行 SETUP 用例。
  • SNIPPET:用例片斷,運行到此用例時不會當即執行,須要在其餘用例中使用「執行」關鍵字調用此「用例片斷」,纔會執行;配合「執行」關鍵字的變量賦值功能,能夠實現用例複用。

注意事項:

  • 通常必須有 SETUP 用例。當執行 SETUP 失敗,會嘗試執行一次 BASE->SETUP 做爲 SETUP 的執行結果。
  • BASE 用例能夠有 0 到多個,但做爲 SETUP 中 BASE->SETUP 的 BASE 只有最後一個 BASE 用例。
  • SETUP 用例只能有 1 條,若是寫了多條,只有最後一條起做用。

操做(關鍵字)及對應的測試數據

  • 打開

    get 方法,打開一個連接。

    打開操做,通常要在測試數據中指定新窗口名稱,如:新窗口=百度搜索窗口。

  • 檢查

    取頁面元素的值、屬性和預期結果對比。

    測試數據中若是沒有寫「k=v」的方式,則默認是取元素的 text。

    • 檢查 text:
    操做 頁面 元素 測試數據
    檢查 百度搜索頁面 搜索按鈕 百度一下

    等價於

    操做 頁面 元素 測試數據
    檢查 百度搜索頁面 搜索按鈕 text=百度一下
    • 檢查屬性:
    操做 頁面 元素 測試數據
    檢查 百度搜索頁面 搜索框 name=wd
    • 「頁面標題」和「頁面URL」直接在測試數據中寫預期結果便可。
    操做 頁面 元素 測試數據
    檢查 百度搜索頁面 頁面標題 百度一下,你就知道

    注意:測試數據中,因爲逗號(,or ,)是多個「k=v」的分隔符,因此若是 v 中有逗號,要用反斜槓(\)轉義;但等號(=)無需轉義。

  • 輸入

    在輸入框中輸入文本。

    測試數據列爲要輸入的內容。

  • 點擊

    點擊按鈕或者連接等(一切可點擊操做的)元素。此關鍵字支持在同一個頁面上順序點擊多個元素,在元素列以豎槓(|)分割便可,如:

    操做 頁面 元素
    點擊 百度搜索頁面 搜索按鈕|搜索結果#1
  • 移動到

    有些頁面元素,當鼠標移動到上面時,會彈出下拉菜單等。此操做同關鍵字「點擊」相似。

  • 執行

    即執行測試用例片斷,支持在測試數據中給變量賦值,如咱們有用例片斷 SNIPPET_001,則測試用例 BAIDU_002 中,步驟1以下:

    操做 頁面 元素 測試數據
    執行 用例片斷 SNIPPET_001 keywords=搜狗

    把變量 keyswords 賦值爲「搜狗」,此步驟會執行用例片斷 SNIPPET_001,其搜索的關鍵字爲「搜狗」。

  • 檢查

    把檢查結果反向,此關鍵字暫時未完整實現。

測試數據:

測試數據支持模糊匹配,以下:

操做 頁面 元素 測試數據
檢查 通用 頁面標題 *知乎

則,頁面標題中含有「知乎」即爲經過。注意星號(*)要寫在開頭。

輸出數據:

在運行時,把元素的值或屬性賦值給變量,此變量能夠在以後的步驟中使用"<>"引用變量名。

操做 頁面 元素 測試數據 輸出數據
點擊 百度搜索頁面 搜索結果#1 title=text
檢查 通用 頁面標題 <title>

步驟編號:

除了控制語句符號外,步驟編號必須爲數字,建議在 Excel 中設置爲文本格式。

控制語句:

  • if then else

    步驟編號 操做 頁面 元素 測試數據
    ^3 檢查 通用 頁面標題 *知乎
    >4 點擊 通用 link#登陸
    <5 點擊 通用 link#註冊機構號

    ^ 表示 if 語句

    > 表示 then 語句

    < 表示 else 語句

    if(^) 語句爲真時,執行 then(>) 語句,爲否時執行 else(<) 語句。不管後面有沒有 then 或者 else 語句,不影響後續步驟執行。

    then 語句 或者 else 語句,當不被執行時,測試結果爲 '-',不影響測試用例結果和後續步驟執行。當執行時,和正常步驟同樣,成功則繼續,失敗則該用例失敗。

進階

元素管理

測試用例中元素是以 page + name 爲惟一標識,來頁面元素表中查找定位信息的。所以,不一樣 page 下的元素 name 能夠相同,但不能和「通用」下的相同。

測試用例中,若是 page 不爲「通用」,當 <page> + name 查找不到,會繼續以 「通用」 + name 爲標識符來查找。

「通用」是方便咱們寫頁面元素表的,寫用例時咱們建議仍是用 <page> 來代替「通用」,甚至有時候咱們必須這麼作。

窗口管理(頁面,frame)

在瀏覽器中,有可能會打開多個標籤頁,咱們叫它爲窗口。當你新打開一個標籤頁時,你能夠在測試數據中給它起個名字,格式爲:新窗口=<window_name>, 如:

操做 頁面 元素 測試數據
打開 通用 百度搜索連接 新窗口=百度搜索窗口
檢查 百度搜索頁面 頁面標題 百度一下,你就知道

當你給新的標籤頁起了窗口名字,它以後步驟的頁面("通用"除外)就會綁定到這個窗口。如上面第 2 步,「百度搜索頁面」會綁定到「百度搜索窗口」。那麼以後的步驟或用例中,即便打開了多個標籤頁,只要頁面是「百度搜索頁面」,就會切換到「百度搜索窗口」這個標籤頁上操做。

注意:「通用」是不綁定到任何窗口的,也不作窗口切換,它直接在「當前窗口」操做。

「當前窗口」規則爲:

  • 執行到某個步驟時,「當前窗口」是瀏覽器焦點所在的窗口,也就是上個步驟執行操做的窗口。
  • 若是此步驟的頁面已綁定到其餘窗口,則「當前窗口」會切換過去。
  • 若是此步驟的頁面還沒有捆定任何窗口,則會捆定到「當前窗口」。
  • 上個步驟若是是新打開的窗口,則「當前窗口」是新打開的窗口。

注意:

  • 若是打開了 2 個或以上窗口,沒有起名字的窗口,在執行到切換窗口的步驟時,會自動被關掉。
  • 起了名字的窗口不會被關掉。
  • 但若是起了一樣的名字,則原先的那個窗口會被關掉,綁定在其上面的頁面也會被註銷。

測試執行

python start.py

測試報告

見 report 目錄

QQ交流羣:158755338 (驗證碼:python)

項目地址:https://github.com/tonglei100...

相關文章
相關標籤/搜索