測(cè)試平臺(tái)系列(17) 用例邏輯設(shè)計(jì)

回顧

很久沒有更新文章了姐赡,此時(shí)已經(jīng)是23:23了扰肌,有些愧疚,因?yàn)樽约鹤罱唤拥氖虑?生活的事情還是比較多的氧枣,所以到了晚上就沒有力氣來更新了沐兵。這里就更加佩服WQRF這個(gè)神一樣的男人

記得上次說到便监,我們制作了一個(gè)簡(jiǎn)易的支持HTTP請(qǐng)求的頁面扎谎,實(shí)際上我們卻沒有把它用到用例之中

用例設(shè)計(jì)

我這個(gè)人有個(gè)很大的缺點(diǎn)烧董,想到啥就做啥毁靶,經(jīng)常是事先設(shè)計(jì)一個(gè)簡(jiǎn)版,然后后續(xù)進(jìn)行打磨逊移,其實(shí)這樣對(duì)一個(gè)成熟的系統(tǒng)來說太不友好了预吆,很多東西可能在設(shè)計(jì)的時(shí)候就太過于局限了。這里不扯廢話了胳泉,直接進(jìn)入主題吧拐叉。

關(guān)于用例

思考過很多次,目前在公司制作的測(cè)試平臺(tái)有個(gè)特點(diǎn)扇商,就是不需要寫代碼就可以完成接口測(cè)試用例的編寫凤瘦,只不過礙于對(duì)大家的成長(zhǎng)沒有太大的提升,所以我這次打算做到兼容案铺,如果你愿意寫代碼廷粒,那么你可以導(dǎo)入代碼或者在線編寫代碼,如果不想看到代碼红且,也可以采用無碼模式,并且還要做到隨時(shí)轉(zhuǎn)換涤姊。

用例的生命周期

從設(shè)計(jì)上來說暇番,用例以鏈路的形式執(zhí)行,一個(gè)用例會(huì)有很多個(gè)臨時(shí)變量思喊,通過它們壁酬,我們可以解決數(shù)據(jù)依賴,完成對(duì)整個(gè)流程的測(cè)試恨课。由于筆者畫圖能力有限舆乔,所以這里就不上圖了。一個(gè)用例分為幾個(gè)部分:

  • 前置setUp操作

  • 用例執(zhí)行

  • 后置tearDown操作

其中每個(gè)操作里面都擁有很多個(gè)步驟(step)剂公,每個(gè)step產(chǎn)生的數(shù)據(jù)都會(huì)在主用例的生命周期中保存希俩,達(dá)到數(shù)據(jù)互通的效果。

這里的步驟可以是http請(qǐng)求纲辽,redis操作颜武,sql語句璃搜,python代碼片段等等,每個(gè)步驟都可以擁有一個(gè)返回值鳞上,通過返回值解決數(shù)據(jù)依賴問題这吻。

舉例

如果我們需要獲取用戶的余額,那么我們的用例將這樣去編寫:

  1. 先設(shè)計(jì)一個(gè)登錄的測(cè)試用例:

用例名稱: 用戶登錄

前置條件: 無

用例執(zhí)行: 發(fā)送http請(qǐng)求篙议,獲取token

后置條件: 無

斷言語句: 校驗(yàn)http狀態(tài)碼等

  1. 編寫獲取用戶余額的測(cè)試用例(主用例):

用例名稱: 獲取用戶余額
前置條件:

  • step1: 用戶登錄

    記錄返回值為step1唾糯,通過step1.token獲取到登錄接口中的token數(shù)據(jù)

用例執(zhí)行:
把body中的${step1.token}替換為真實(shí)的token,發(fā)送http請(qǐng)求鬼贱。

后置條件:無

斷言語句: 校驗(yàn)code和msg以及data字段中的信息

初期看不懂不要緊移怯,大概方向是這個(gè)樣子。主要也沒有圖片吩愧,這是一個(gè)流程化的東西芋酌。

補(bǔ)充一下圖片

公用組件包pity_basic

主要內(nèi)容有:

  • 存儲(chǔ)用例生命周期產(chǎn)生的變量

  • 尋找請(qǐng)求字段中的變量并替換成真實(shí)數(shù)據(jù)

  • redis相關(guān)操作

  • sql相關(guān)操作

  • http相關(guān)操作

  • python代碼塊相關(guān)操作

    上述的代碼相關(guān)的操作都是為了能將數(shù)據(jù)和代碼進(jìn)行互相轉(zhuǎn)換,具體的構(gòu)思還沒有完全想好雁佳。我喜歡邊寫邊想脐帝,不然我想得肯定不全,只有寫的時(shí)候遇到問題了才能想好要怎么做下一步糖权。

    給我思考的時(shí)間有限堵腹,我只能走一步算一步了!

其實(shí)這里我也覺得自己說的云里霧里星澳,還是等后續(xù)成品出來了疚顷,回過頭來看或者修改這篇文章吧!

目錄大致結(jié)構(gòu)

編寫變量查找相關(guān)方法

這邊我們自己內(nèi)定一套規(guī)則禁偎,凡是${變量}這種數(shù)據(jù)腿堤,都是需要替換的變量,可能由其他前置或常量產(chǎn)生如暖,需要隨時(shí)替換笆檀。這個(gè)規(guī)則要求變量盡量簡(jiǎn)單,不要搞特殊符號(hào)盒至。

import re

el_exp = r"\$\{(.+)\}"
pattern = re.compile(el_exp)


def get_el_expression(string: str):
    """
    獲取el表達(dá)式
    :param string:
    :return:
    """
    return re.findall(pattern, string)


if __name__ == "__main__":
    s = "select * from xxx where name = '${mygod}'"
    print(get_el_expression(s))
驗(yàn)證輸出無誤酗洒,成功找到變量

我們用正則提取變量,這樣如果我們的sql語句里面有變量的情況下枷遂,可以做到動(dòng)態(tài)sql語句樱衷,如上圖。不過基于這酒唉,我們還需要提供一個(gè)變量池矩桂,用來存放這個(gè)用例的所有臨時(shí)變量

編寫變量池相關(guān)方法

"""
pity變量池
變量池的生命周期與用例保持一致
"""
__author__ = "xiaoke"


class VarPool(object):

    def __init__(self, case_id):
        """

        :param case_id: 用來標(biāo)識(shí)變量所處的主生命周期case
        """
        self.cache = dict()
        self.case_id = case_id

    def set(self, key, value):
        self.cache[key] = value

    def get(self, key):
        return self.cache.get(key)

    def get_default(self, key, default_value):
        return self.cache.get(key, default_value)


這里創(chuàng)建了一個(gè)變量池類痪伦,實(shí)際上維護(hù)了一個(gè)map耍鬓,當(dāng)然由于復(fù)雜場(chǎng)景下阔籽,可能會(huì)有變量沖突的情況,所以我們會(huì)在web頁面層去控制牲蜀,去保證用戶不使用重復(fù)的變量笆制。


今天的內(nèi)容就先到這里了,主要還是一個(gè)構(gòu)思的問題涣达。后面慢慢補(bǔ)全這些概念在辆,使它越來越明朗。因?yàn)槲椰F(xiàn)在也很懵逼度苔,如果疑惑的話匆篓,可以等整個(gè)用例流程打通了再來回顧一下。

后續(xù)的話pity_basic會(huì)作為一個(gè)tar包寇窑,可在pypi下載鸦概,單獨(dú)抽出這個(gè)包的主要原因還是為了支持代碼無碼模式的切換。

pity_basic代碼地址

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末甩骏,一起剝皮案震驚了整個(gè)濱河市窗市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌饮笛,老刑警劉巖咨察,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異福青,居然都是意外死亡摄狱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門无午,熙熙樓的掌柜王于貴愁眉苦臉地迎上來媒役,“玉大人,你說我怎么就攤上這事宪迟『ㄖ裕” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵踩验,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我商玫,道長(zhǎng)箕憾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任拳昌,我火速辦了婚禮袭异,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘炬藤。我一直安慰自己御铃,他們只是感情好碴里,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著上真,像睡著了一般咬腋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上睡互,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天根竿,我揣著相機(jī)與錄音,去河邊找鬼就珠。 笑死寇壳,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的妻怎。 我是一名探鬼主播壳炎,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼逼侦!你這毒婦竟也來了匿辩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤偿洁,失蹤者是張志新(化名)和其女友劉穎撒汉,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涕滋,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡睬辐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宾肺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片溯饵。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖锨用,靈堂內(nèi)的尸體忽然破棺而出丰刊,到底是詐尸還是另有隱情,我是刑警寧澤增拥,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布啄巧,位于F島的核電站,受9級(jí)特大地震影響掌栅,放射性物質(zhì)發(fā)生泄漏秩仆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一猾封、第九天 我趴在偏房一處隱蔽的房頂上張望澄耍。 院中可真熱鬧,春花似錦、人聲如沸齐莲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽选酗。三九已至阵难,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間星掰,已是汗流浹背多望。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留氢烘,地道東北人怀偷。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像播玖,于是被迫代替她去往敵國(guó)和親椎工。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

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