乾貨|app自動化之如何引數化用例
本文節選自霍格沃茲測試學院內部教材
引數化是自動化測試的一種常用技巧,可以將測試程式碼中的某些輸入使用引數來代替。以百度搜索功能為例,每次測試搜尋場景,都需要測試不同的搜尋內容,在這個過程裡面,除了資料在變化,測試步驟都是重複的,這時就可以使用引數化的方式來解決測試資料變化,測試步驟不變的問題。
引數化就是把測試需要用到的引數寫到資料集合裡,讓程式自動去這個集合裡面取值,每條資料都生成一條對應的測試用例,直到集合裡的值全部取完。
使用方法
使用 Appium 測試框架編寫測試用例時,通常會結合 pytest 測試框架一起使用。使用 pytest
的引數化機制,可以減少程式碼重複,在測試程式碼前新增裝飾器 @pytest.mark.parametrize
@pytest.mark.parametrize("argvnames",argvalues)
@pytest.mark.parametrize()
需要傳入兩個引數 “argnamest” 與
“argvalues”,第一個引數需要一個或者多個變數來接收列表中的每組資料,第二個引數傳遞儲存資料的列表。測試用例需要使用同名的字串接收測試資料(與“argvnames”裡面的名字一致),且列表有多少個元素就會生成並執行多個測試用例。下面示例使用使用引數化定義三組資料,每組資料都存放在一個元組中,分別將元組中的資料傳入(test_input,expected)引數中,示例程式碼如下:
# content of test_expectation.pyimport pytest
@pytest.mark.parametrize("test_input,expected", [("3+5", 8), ("2+4", 6), ("6*9", 42)])def test_eval(test_input, expected): assert eval(test_input) == expected
執行結果如下:
...test_expectation.py ..F test_input = '6*9', expected = 42 @pytest.mark.parametrize("test_input,expected", [("3+5", 8), ("2+4", 6), ("6*9", 42)]) def test_eval(test_input, expected):> assert eval(test_input) == expectedE AssertionError: assert 54 == 42E + where 54 = eval('6*9') test_expectation.py:6: AssertionError
上面的執行結果可以看出,執行的三條測試用例分別對應三組資料,測試步驟完全相同,只是傳入的測試資料發生了變化。
案例
使用“雪球”應用,開啟雪球
APP,點選頁面上的搜尋輸入框輸入“alibaba”,然後在搜尋聯想出來的列表裡面點選“阿里巴巴”,選擇股票分類,獲取股票型別為“BABA”的股票價格,最後驗證價格在預期價格的
10%範圍浮動,另一個搜尋“小米”的結果資料測試步驟類似。
這個案例使用了引數化機制和 Hamcrest 斷言機制,示例程式碼片斷如下:
引數化示例程式碼:
from appium import webdriverimport pytestfrom hamcrest import *
class TestXueqiu: 省略... # 引數化 @pytest.mark.parametrize("keyword, stock_type, expect_price", [ ('alibaba', 'BABA', 170), ('xiaomi', '01810', 8.5) ]) def test_search(self, keyword, stock_type, expect_price): # 點選搜尋 self.driver.find_element_by_id("home_search").click() # 向搜尋框中輸入keyword self.driver.find_element_by_id( "com.xueqiu.android:id/search_input_text" ).send_keys(keyword)
# 點選搜尋結果 self.driver.find_element_by_id("name").click() # 獲取價格 price = float(self.driver.find_element_by_xpath( "//*[contains(@resource-id, 'stockCode')\ and @text='%s']/../../..\ //*[contains(@resource-id, 'current_price')]" % stock_type ).text) # 斷言 assert_that(price, close_to(expect_price, expect_price * 0.1))
上面的程式碼,傳入了兩組測試資料,每組有三個資料分別為搜尋關鍵詞,股票型別,及股票價格。在執行測試用例時,分別將兩組資料傳入測試步驟中執行,對應搜尋不同的關鍵詞,使用
Hamcrest 來實現股票價格的斷言。
app自動化測試(Android)引數化用例就講完了,大家學會了麼?我們下一期為大家講解app自動化中Andriod
WebView測試,有興趣的小夥伴可以關注一下哦!
** 推薦學習**
內容全面升級,4 個月 20+ 專案實戰強化訓練,資深測試架構師、開源專案作者親授 BAT 大廠前沿最佳實踐,
帶你一站式掌握測試開發必備核心技能( 對標阿里P6+,年薪50W+ )! 直推 BAT 名企測試經理,普遍漲薪 50%+!
閱讀原文