merge into mybatis批量插入或更新,有則更新,無則插入
引數化是自動化測試的一種常用技巧,可以將測試程式碼中的某些輸入使用引數來代替。以百度搜索功能為例,每次測試搜尋場景,都需要測試不同的搜尋內容,在這個過程裡面,除了資料在變化,測試步驟都是重複的,這時就可以使用引數化的方式來解決測試資料變化,測試步驟不變的問題。
引數化就是把測試需要用到的引數寫到資料集合裡,讓程式自動去這個集合裡面取值,每條資料都生成一條對應的測試用例,直到集合裡的值全部取完。
使用方法
使用 Appium 測試框架編寫測試用例時,通常會結合 pytest 測試框架一起使用。使用 pytest 的引數化機制,可以減少程式碼重複,在測試程式碼前新增裝飾器 @pytest.mark.parametrize,來完成資料的傳輸。示例程式碼如下:
@pytest.mark.parametrize("argvnames",argvalues)
@pytest.mark.parametrize() 需要傳入兩個引數 “argnamest” 與 “argvalues”,第一個引數需要一個或者多個變數來接收列表中的每組資料,第二個引數傳遞儲存資料的列表。測試用例需要使用同名的字串接收測試資料(與“argvnames”裡面的名字一致),且列表有多少個元素就會生成並執行多個測試用例。下面示例使用使用引數化定義三組資料,每組資料都存放在一個元組中,分別將元組中的資料傳入(test_input,expected)引數中,示例程式碼如下:
# content of test_expectation.py
import 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) == expected
E AssertionError: assert 54 == 42
E + where 54 = eval('6*9')
test_expectation.py:6: AssertionError
上面的執行結果可以看出,執行的三條測試用例分別對應三組資料,測試步驟完全相同,只是傳入的測試資料發生了變化。
案例
使用“雪球”應用,開啟雪球 APP,點選頁面上的搜尋輸入框輸入“alibaba”,然後在搜尋聯想出來的列表裡面點選“阿里巴巴”,選擇股票分類,獲取股票型別為“BABA”的股票價格,最後驗證價格在預期價格的 10%範圍浮動,另一個搜尋“小米”的結果資料測試步驟類似。
這個案例使用了引數化機制和 Hamcrest 斷言機制,示例程式碼片斷如下:
引數化示例程式碼:
from appium import webdriver
import pytest
from 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測試,有興趣的小夥伴可以關注一下哦!