seldom 實戰技巧


seldom 是我一直在維護的自動化測試框架。目前GitHub已經 500+ star。

最近在項目中使用Seldom + poium 編寫自動化測試用例。接下來,我就分享一些使用技巧。

如何參數化測試用例

網站的首頁,如上面的導航。於是,開始利用poium編寫元素定位。

from poium import Page, Element

class Homepage(Page):
    destination_hk = Element(cass='#id_2&ext', describe="探索目的地-香港")
    destination_macau = Element(css='#id_3&ext', describe="探索目的地-澳門")
    destination_singapore = Element(css='#6&ext', describe="探索目的地-新加坡")
    ...

寫着寫着,我發現這樣的用例不可維護,因為這里的導航是由后台配置出來的一個導航,熱門目的地不是固定的,隨國家、語言變化。

修改用例如下:

# page
from poium import Page, Elements

class Homepage(Page):
    destination_all = Elements(xpath='//div/div/', describe="所有熱門城市")

# case
import seldom

class TestHomeNav(seldom.TestCase):
    """導航"""

    def start(self):
        self.open("https://www.shop.com/")
        self.hp = HomePageCN(self.driver)

    def test_nva_search(self):
        # 遍歷城市列表,點擊每一個城市
        destinations = self.hp.destination_all
        for elem in destinations:
            elem.click()

那新的問題來了,這么寫就一條用例,而且,假設其中一個城市配置鏈接錯誤或失效,整個用例失敗,我們很難排查是哪個城市的問題,而且也不利於用例統計。

最后,改進之后的方案。

# page
from poium import Page, Elements

class Homepage(Page):
    destination_all = Elements(xpath='//div/div/', describe="所有熱門城市")


# common
def get_destinations_data(url):
    """
    獲得熱門目的地的 數量
    :return: [(),()]
    """
    hp = HomePage(Seldom.driver)
    hp.open(url)
    destinations = hp.destination_all
    destinations_data = []
    for i, elem in enumerate(destinations):
        destinations_data.append(
            (elem.text, i)
        )
    return destinations_data


# case
import seldom
from seldom import data

base_url = "https://www.shop.com/"


class TestHomeNav(seldom.TestCase):
    """導航"""

    def start(self):
        self.open(base_url)
        self.hp = HomePage(self.driver)

    @data(get_destinations_data(base_url))
    def test_nva_search(self, name, i):
        # 探索目的地
        print("city name-->", name)
        destinations = self.hp.destination_all
        city_name = destinations[i].text
        destinations[i].click()
        self.assertText(city_name)

這種方案有兩個好處。

  1. 城市列表變動,不會影響用例的執行。
  2. 每個城市統計一條用例。

seldom基於unittest的參數化非常簡單和強大,這也是我沒有轉投pytest的最主要原因之一。 pytest的參數化@pytest.mark.parametrize()確實不好用,這一點不接受反駁。

用例依賴

這一條用例是我要自動化點擊搜索歷史搜索歷史搜索過​才會產生的數據。

# case
import seldom
from seldom import data
from seldom import depend

class TestHomeSearch(seldom.TestCase):
    """搜索"""

    def start(self):
        self.open(base_url)
        self.hp = HomePage(self.driver)

    @data([
        ("case1", "迪士尼"),
        ("case2", "雙月灣"),
        ("case3", "上海"),
    ])
    def test_search_a_keyword(self, name, keyword):
        """
        搜索:活動、城市
        """
        print("case name-->", name)
        self.hp.search_input.send_keys(keyword)
        self.hp.search_button.click()
        self.assertText(f"以下是與“{keyword}”相關的體驗")

    @depend("test_search_a_keyword")
    def test_search_history(self):
        """
        搜索:點擊搜索歷史
        """
        history = self.hp.search_history
        keyword = history[0].text
        history[0].click()
        self.assertText(f"以下是與“{keyword}”相關的體驗")
  1. 搜索再次用到了參數化。
  2. 通過@depend() 裝飾器設置依賴上面的用例test_search_a_keyword,當被依賴的用例失敗時,該用例直接跳過。

UI + 接口自動化混搭驗證

Seldom既支持Web UI自動化,又支持接口。

例如,上面的活動卡片,如何驗證圖片是否顯示。

  • 截圖對比
    1. 提前准備一張對比的圖片,太麻煩,存在對比偏差,活動有被替換的風險。
    2. 自動截圖,人工檢查截圖,這不叫完全自動化。
    3. 跑自動化的時候,測試人員盯着看... 這就很離譜了。
<img src="https://gimg2.baidu.com/i/eg_tulip.jpg"  alt="雪山" />

先來看看一張圖片的定義。如果一張圖片無法顯示。

  1. html 代碼寫錯,例如 src 寫成 scr
  2. 圖片鏈接失效。

第一種情況概率很低,而且很容易發現,而且是必現。第二種情況就比較麻煩了,可能圖片鏈接一開始是好的,可能因為圖片服務器問題導致圖片丟失。

好了,分析完圖片不可見的情況。那么就可以通過驗證圖片請求來保證圖片是可見的。

import seldom


class TestHomeActivity(seldom.TestCase):

    def start(self):
        self.open(base_url)
        self.hp = HomePageCN(self.driver)

    def test_hot_sale_activity(self):
        """
        檢查活動活動 圖片
        """
        img = self.hp.activity_img.get_attribute("src")
        self.get(url=img)  # 調用圖片鏈接
        self.assertStatusCode(200)  # 斷言活動圖片是否可以訪問

通過get_attribute() 獲取元素的src 圖片鏈接,然后,直接self.get()調用圖片地址,如果返回200 說明圖片可訪問。

是不是web UI和 接口自動化無縫連接。

最后:

https://github.com/SeldomQA/seldom

提供一下GitHub地址,如果有GitHub帳號,歡迎+ star,最近在使用過程中也在更加積極的完善功能和修復bug。如果你正在開展自動化測試,不妨試試Seldom,他降低了你自己搭建自動化測試項目的成本,提高你編寫和維護用例的速度。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM