一些自動(dòng)化測試的自我理解

什么是自動(dòng)化測試

把人做的事情交給機(jī)器做,這就是自動(dòng)化朋鞍。而自動(dòng)化測試則是把測試工作交給了機(jī)器已添,測試環(huán)境和被測對象是不變的。下面是人工測試和自動(dòng)化測試的變化
用例 -> 自動(dòng)化用例
斷言 -> 自動(dòng)化斷言

自動(dòng)化用例和普通測試用例

自動(dòng)化測試因?yàn)樾枰o到機(jī)器去測試滥酥,所以在用例變更時(shí)酝碳,不僅要定義用例步驟,還要對應(yīng)完成用例實(shí)現(xiàn)恨狈。所以一個(gè)常常改變的系統(tǒng)不應(yīng)該為此編寫自動(dòng)化用例。

自動(dòng)化斷言和普通斷言

如上面所述呛讲,斷言也是需要我們編寫的禾怠,當(dāng)然借助現(xiàn)有的一些框架,我們可以避免很多的編寫贝搁。第二個(gè)我要說的是吗氏,如果你從事過UI、AI方面的測試工作雷逆,你會(huì)發(fā)現(xiàn)在反復(fù)執(zhí)行的過程中你會(huì)發(fā)現(xiàn)某一次會(huì)出現(xiàn)一些返回的偏差弦讽,這一偏差是由被測對象決定的。設(shè)備會(huì)在某種環(huán)境下,渲染失敗或者是異常往产,而AI本身就是一個(gè)概率的模型被碗,結(jié)果本身就是隨機(jī)的。所以我們需要編寫復(fù)雜斷言來處理這類問題嗎仿村?答案是否定的锐朴,我們應(yīng)該先人工測試保證被測對象的穩(wěn)定性。甚至我們對于這些用例回到手工測試蔼囊。

自動(dòng)化測試用例的顆粒度

在自動(dòng)化測試中焚志,被測對象和測試環(huán)境都是影響自動(dòng)化測試穩(wěn)定性的因素。所以針對這兩者畏鼓,我們可以控制用例的顆粒度來降低我們的維護(hù)成本酱酬。
假設(shè)有這樣的一個(gè)接口,支持門店名稱(name)和業(yè)務(wù)員手機(jī)號(hào)(phone)的模糊查詢云矫,接口響應(yīng)數(shù)據(jù)如下:

{
  "code":200,
  "data":[
      {"id":1,"name":"121","sale_info":{"phone":135}},
      {"id":2,"name":"12","sale_info":{"phone":1351}},
      {"id":3,"name":"2","sale_info":{"phone":0135}},
      {"id":4,"name":"002","sale_info":{"phone":01351}},
  ],
  "msg": null
}

測試用例如下,我們針對不同的元數(shù)據(jù)進(jìn)行了斷言膳沽,分別是門店和門店的相關(guān)信息。

import unittest
def get_value_by_jsonpath(value,path):
    """通過jsonpath獲取數(shù)據(jù)"""

def get_api():
    """請求接口"""

class TestStoreList(unittest.TestCase):
    def setUp(self):
        pass

    def template(self,diff_param:dict,jsonpath="$."):
        url = ''
        body = {"name":"","phone":""}
        body.update(diff_param)
        resp = get_api(url,json=body)
        assert 200 == resp.status_code
        if '$.' == jsonpath:
            return resp.json()
        return get_value_by_jsonpath(resp.json(),jsonpath)
    
    def sql_select(self,sql):
        """數(shù)據(jù)庫查詢"""
    
    def test_name_like(self):
        """斷言門店數(shù)據(jù)"""
        names = self.template({"name":"2"},'$.data.*.name')
        sql = ""
        select_names = self.sql_select(sql)
        assert names == select_names
    
    def test_phone_like(self):
        """斷言門店關(guān)聯(lián)業(yè)務(wù)員數(shù)據(jù)"""
        phones = self.template({"phone":135},'$.data.*.phone')
        sql = ""
        select_phones = self.sql_select(sql)
        assert phones == select_phones

    def teardown(self):
        pass

下一個(gè)版本中泼差,業(yè)務(wù)員和門店從一對一變?yōu)橐粚Χ嗟那闆r我們只需修改門店相關(guān)的用例即可贵少。

自動(dòng)化的環(huán)境問題

被測環(huán)境如何保證數(shù)據(jù)穩(wěn)定性,這一問題其實(shí)是測試用例的問題堆缘,只不過在手工測試中滔灶,我們主動(dòng)避障了,造不了A數(shù)據(jù)吼肥,我們?nèi)ピ霣數(shù)據(jù)了录平。在自動(dòng)化測試中,由于程序沒有我們?nèi)四敲粗悄茏褐澹赃@個(gè)問題十分明顯斗这。但是這一問題往往是運(yùn)維的問題,不過我們可以假設(shè)我們擁有一個(gè)和線上數(shù)據(jù)庫結(jié)構(gòu)一致的數(shù)據(jù)庫啤斗,里面沒有數(shù)據(jù)表箭。我們通過setUp和teardown保證不同用例間互不干擾、和可重復(fù)執(zhí)行钮莲,而setUpClass和tearDownClass則是用于我們有一個(gè)基礎(chǔ)數(shù)據(jù)來保證環(huán)境已經(jīng)滿足一定的前提條件免钻,全部用例完成后保證環(huán)境如測試前一致,它們還是保證我們的用例互不干擾崔拥,只是維度更高极舔。

import unittest

class TestStoreList(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        """增加一些基礎(chǔ)數(shù)據(jù)"""

    @classmethod
    def tearDownClass(cls):
        """清理新增的基礎(chǔ)數(shù)據(jù),還原環(huán)境"""

    def setUp(self):
        """不同用例去新增不同的測試數(shù)據(jù)"""
        
    def test_name_like(self):
        """斷言門店數(shù)據(jù)"""

    def test_phone_like(self):
        """斷言門店關(guān)聯(lián)業(yè)務(wù)員數(shù)據(jù)"""

    def teardown(self):
        """不同用例去清理不同的測試數(shù)據(jù),還原環(huán)境"""

上面的討論链瓦,需要一些運(yùn)維技巧拆魏,包括如何部署數(shù)據(jù)庫、中間件、服務(wù)器渤刃、等等的一些東西拥峦。如果系統(tǒng)架構(gòu)過于復(fù)雜、硬件資源緊張溪掀、運(yùn)維能力不足事镣,可能我們不能奢望我們擁有一個(gè)可控的環(huán)境。你大概只能編寫更加復(fù)雜斷言來保證你健壯揪胃,維護(hù)成本會(huì)響應(yīng)提高璃哟。

自動(dòng)化的維護(hù)成本

從上面的講述中,我們的維護(hù)成中由維護(hù)環(huán)境和維護(hù)用例組成喊递,在用例維護(hù)中随闪,用例邏輯維護(hù)和數(shù)據(jù)維護(hù),是相互影響的(請不要將測試步驟和測試數(shù)據(jù)分離當(dāng)成是測試數(shù)據(jù)和用例分離骚勘,在自動(dòng)化測試用例中測試數(shù)據(jù)和用例是一起的) 铐伴。我們應(yīng)該更加傾向于低邏輯維護(hù)、高數(shù)據(jù)維護(hù)的這樣一種模式俏讹。高邏輯會(huì)帶來一些邏輯錯(cuò)誤当宴,從而導(dǎo)致我們使用bug來測試bug。而我們可以用過execl泽疆,數(shù)據(jù)庫户矢,造數(shù)平臺(tái)來提高我們維護(hù)數(shù)據(jù)的效率。

總結(jié)

自動(dòng)化測試并沒有和手工有巨大的不同殉疼,它的優(yōu)勢在于可以多次執(zhí)行和大量執(zhí)行(批處理是計(jì)算機(jī)相對人的優(yōu)勢)梯浪,執(zhí)行次數(shù)越多,節(jié)約工時(shí)越多瓢娜。
對于接口類的自動(dòng)化測試基本上都可以替代手工測試挂洛。對于UI測試,AI測試眠砾,嵌入式程序測試等需要人為主觀判斷的測試虏劲,自動(dòng)化的覆蓋率相對有限。自動(dòng)化測試不能完全替代手工測試褒颈。
一個(gè)良好的測試環(huán)境伙单,有利于自動(dòng)化測試的開展。
合理的編寫自動(dòng)化測試用例哈肖,一份低維護(hù)成本的測試用例,是每個(gè)測試人員都需要的念秧。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末淤井,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌币狠,老刑警劉巖游两,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異漩绵,居然都是意外死亡贱案,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門止吐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宝踪,“玉大人,你說我怎么就攤上這事碍扔〈裨铮” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵不同,是天一觀的道長厉膀。 經(jīng)常有香客問我,道長二拐,這世上最難降的妖魔是什么服鹅? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮百新,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘吟孙。我一直安慰自己澜倦,他們只是感情好杰妓,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著巷挥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪倍宾。 梳的紋絲不亂的頭發(fā)上雏节,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天高职,我揣著相機(jī)與錄音,去河邊找鬼怔锌。 笑死变过,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的涝涤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼阔拳,長吁一口氣:“原來是場噩夢啊……” “哼崭孤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起糊肠,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤辨宠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后罪针,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體彭羹,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年泪酱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了派殷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡墓阀,死狀恐怖毡惜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情斯撮,我是刑警寧澤经伙,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站勿锅,受9級(jí)特大地震影響帕膜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜溢十,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一垮刹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧张弛,春花似錦荒典、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至刻剥,卻和暖如春遮咖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背造虏。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工御吞, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留踢械,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓魄藕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親撵术。 傳聞我的和親對象是個(gè)殘疾皇子背率,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容