1. 程式人生 > 其它 >merge into mybatis批量插入或更新,有則更新,無則插入

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測試,有興趣的小夥伴可以關注一下哦!