干貨|app自動(dòng)化之如何參數(shù)化用例

> 本文節(jié)選自霍格沃茲測(cè)試學(xué)院內(nèi)部教材


參數(shù)化是自動(dòng)化測(cè)試的一種常用技巧,可以將測(cè)試代碼中的某些輸入使用參數(shù)來(lái)代替。以百度搜索功能為例,每次測(cè)試搜索場(chǎng)景,都需要測(cè)試不同的搜索內(nèi)容,在這個(gè)過(guò)程里面,除了數(shù)據(jù)在變化,測(cè)試步驟都是重復(fù)的,這時(shí)就可以使用參數(shù)化的方式來(lái)解決測(cè)試數(shù)據(jù)變化,測(cè)試步驟不變的問(wèn)題。




參數(shù)化就是把測(cè)試需要用到的參數(shù)寫到數(shù)據(jù)集合里,讓程序自動(dòng)去這個(gè)集合里面取值,每條數(shù)據(jù)都生成一條對(duì)應(yīng)的測(cè)試用例,直到集合里的值全部取完。



使用方法??






使用 Appium 測(cè)試框架編寫測(cè)試用例時(shí),通常會(huì)結(jié)合 pytest 測(cè)試框架一起使用。使用 pytest

的參數(shù)化機(jī)制,可以減少代碼重復(fù),在測(cè)試代碼前添加裝飾器 `@pytest.mark.parametrize`,來(lái)完成數(shù)據(jù)的傳輸。示例代碼如下:




? *?




? ? @pytest.mark.parametrize("argvnames",argvalues)




`@pytest.mark.parametrize()` 需要傳入兩個(gè)參數(shù) “argnamest” 與

“argvalues”,第一個(gè)參數(shù)需要一個(gè)或者多個(gè)變量來(lái)接收列表中的每組數(shù)據(jù),第二個(gè)參數(shù)傳遞存儲(chǔ)數(shù)據(jù)的列表。測(cè)試用例需要使用同名的字符串接收測(cè)試數(shù)據(jù)(與“argvnames”里面的名字一致),且列表有多少個(gè)元素就會(huì)生成并執(zhí)行多個(gè)測(cè)試用例。下面示例使用使用參數(shù)化定義三組數(shù)據(jù),每組數(shù)據(jù)都存放在一個(gè)元組中,分別將元組中的數(shù)據(jù)傳入(test_input,expected)參數(shù)中,示例代碼如下:




? *? ?*? ?*? ?*? ?*? ?*?




? ? # 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




運(yùn)行結(jié)果如下:




? *? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*?




? ? ...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




上面的運(yùn)行結(jié)果可以看出,執(zhí)行的三條測(cè)試用例分別對(duì)應(yīng)三組數(shù)據(jù),測(cè)試步驟完全相同,只是傳入的測(cè)試數(shù)據(jù)發(fā)生了變化。




案例??





###??




###??


使用“雪球”應(yīng)用,打開雪球

APP,點(diǎn)擊頁(yè)面上的搜索輸入框輸入“alibaba”,然后在搜索聯(lián)想出來(lái)的列表里面點(diǎn)擊“阿里巴巴”,選擇股票分類,獲取股票類型為“BABA”的股票價(jià)格,最后驗(yàn)證價(jià)格在預(yù)期價(jià)格的

10%范圍浮動(dòng),另一個(gè)搜索“小米”的結(jié)果數(shù)據(jù)測(cè)試步驟類似。




這個(gè)案例使用了參數(shù)化機(jī)制和 Hamcrest 斷言機(jī)制,示例代碼片斷如下:






參數(shù)化示例代碼:




? *? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*? ?*?




? ? from appium import webdriverimport pytestfrom hamcrest import *??

? ? class TestXueqiu:? ? 省略...? ? # 參數(shù)化? ? @pytest.mark.parametrize("keyword, stock_type, expect_price", [? ? ? ? ('alibaba', 'BABA', 170),? ? ? ? ('xiaomi', '01810', 8.5)? ? ])? ? def test_search(self, keyword, stock_type, expect_price):? ? ? ? # 點(diǎn)擊搜索? ? ? ? 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)??

? ? ? ? ? ? # 點(diǎn)擊搜索結(jié)果? ? ? ? self.driver.find_element_by_id("name").click()? ? ? ? # 獲取價(jià)格? ? ? ? price = float(self.driver.find_element_by_xpath(? ? ? ? ? ? "http://*[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))




上面的代碼,傳入了兩組測(cè)試數(shù)據(jù),每組有三個(gè)數(shù)據(jù)分別為搜索關(guān)鍵詞,股票類型,及股票價(jià)格。在執(zhí)行測(cè)試用例時(shí),分別將兩組數(shù)據(jù)傳入測(cè)試步驟中執(zhí)行,對(duì)應(yīng)搜索不同的關(guān)鍵詞,使用

Hamcrest 來(lái)實(shí)現(xiàn)股票價(jià)格的斷言。




app自動(dòng)化測(cè)試(Android)參數(shù)化用例就講完了,大家學(xué)會(huì)了么?我們下一期為大家講解app自動(dòng)化中Andriod

WebView測(cè)試,有興趣的小伙伴可以關(guān)注一下哦!






?** _?

來(lái)霍格沃茲測(cè)試開發(fā)學(xué)社,學(xué)習(xí)更多軟件測(cè)試與測(cè)試開發(fā)的進(jìn)階技術(shù),知識(shí)點(diǎn)涵蓋web自動(dòng)化測(cè)試 app自動(dòng)化測(cè)試、接口自動(dòng)化測(cè)試、測(cè)試框架、性能測(cè)試、安全測(cè)試、持續(xù)集成/持續(xù)交付/DevOps,測(cè)試左移、測(cè)試右移、精準(zhǔn)測(cè)試、測(cè)試平臺(tái)開發(fā)、測(cè)試管理等內(nèi)容,課程技術(shù)涵蓋bash、pytest、junit、selenium、appium、postman、requests、httprunner、jmeter、jenkins、docker、k8s、elk、sonarqube、jacoco、jvm-sandbox等相關(guān)技術(shù),全面提升測(cè)試開發(fā)工程師的技術(shù)實(shí)力

QQ交流群:484590337

公眾號(hào) TestingStudio

視頻資料領(lǐng)?。篽ttps://qrcode.testing-studio.com/f?from=jianshu&url=https://ceshiren.com/t/topic/15844

點(diǎn)擊查看更多信息

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容