case執(zhí)行的數(shù)據(jù)依賴

數(shù)據(jù)依賴之設(shè)計(jì)思路

一般情況下,我們在執(zhí)行測試用例時(shí)赋秀,經(jīng)常遇到當(dāng)前接口的入?yún)?huì)依賴其它接口的返回?cái)?shù)據(jù)喳钟。如:商品列表到商品詳情,商品詳情接口會(huì)用到商品列表接口生成的商品id减细,這種接口參數(shù)之間相互依賴的關(guān)系就稱之為數(shù)據(jù)依賴匆瓜。

那么在設(shè)計(jì)測試用例時(shí)數(shù)據(jù)依賴的關(guān)系將如何處理呢?

首先需要用到的三個(gè)字段:依賴id未蝌、依賴的返回?cái)?shù)據(jù)字段驮吱、依賴所屬字段。通過“依賴id”單元格內(nèi)容找到case_id行對應(yīng)內(nèi)容萧吠,然后去執(zhí)行獲取請求返回結(jié)果根據(jù)左冬,再根據(jù)我們依賴的返回?cái)?shù)據(jù)去把對應(yīng)的值提取出來更新一下作為當(dāng)前接口的請求參數(shù)執(zhí)行,以商品列表纸型、商品詳情為例:


依賴返回?cái)?shù)據(jù).png
依賴關(guān)系.png

如圖:SC004需要依賴SC002熱銷商品列表接口返回?cái)?shù)據(jù)id,將依賴返回?cái)?shù)據(jù)id更新到數(shù)據(jù)依賴所屬字段(SC004請求入?yún)⒆侄蝘d)中

數(shù)據(jù)依賴方法封裝

思路:通過“依賴id”單元格內(nèi)容找到case_id行對應(yīng)內(nèi)容拇砰。

步驟1:新創(chuàng)建一個(gè)類dependent_data.py,用于處理所有數(shù)據(jù)依賴的相關(guān)問題

# coding:utf-8
class DependentData:
     """
     通過case_id去獲取該case_id的整行數(shù)據(jù)
     """
     def get_case_line_data(self,case_id):
          pass

步驟2:操作excle狰腌,在operation_excel.py包含里面去獲取excle數(shù)據(jù)除破,首先通過數(shù)據(jù)依賴找到case_id,通過循環(huán)找到case_id對應(yīng)行號拿到對應(yīng)行的內(nèi)容。

 #根據(jù)對應(yīng)caseid 找到對應(yīng)行的內(nèi)容
    def get_row_data(self,case_id):
        row_num = self.get_row_num(case_id) #根據(jù)case_id拿到行行號
        rows_data = self.get_row_valuse(row_num) #根據(jù)行號拿到該行內(nèi)容
        return rows_data

    #根據(jù)對應(yīng)的caseid找到對應(yīng)的行號
    def get_row_num(self,case_id):
        num = 0
        #獲取case_id列的內(nèi)容
        clols_data = self.get_cols_data()
        for col_data in clols_data:
            if case_id in col_data:
                return num
            num = num + 1

    #根據(jù)行號琼腔,找到該行的內(nèi)容
    def get_row_valuse(self,row):
        tables = self.data
        #獲取行內(nèi)容
        row_data = tables.row_values(row)
        return row_data

    #獲取某一列的內(nèi)容
    def get_cols_data(self,col_id=None):
        if col_id!=None:
            cols = self.data.col_values(col_id)
        else:
            cols = self.data.col_values(0)
        return cols

數(shù)據(jù)依賴根據(jù)規(guī)則提取響應(yīng)數(shù)據(jù)

上面實(shí)現(xiàn)了如何根據(jù)case_id取到對應(yīng)行的內(nèi)容皂岔,把操作excel方法拿過來用,操作excel的方法:

# coding:utf-8
#導(dǎo)入excle操作
from util.operation_excel import OperationExcel
class DependentData:
     def __init__(self,case_id):
          self.case_id = case_id #傳case_id
          self.opera_excle =OperationExcel() #實(shí)例化    
     """
     通過case_id去獲取該case_id的整行數(shù)據(jù)
     """
     def get_case_line_data(self):
          rows_data = self.opera_excle.get_row_data(self.case_id)
          return rows_data

有了整行的內(nèi)容后,就需要去執(zhí)行里面的內(nèi)容展姐,那么怎么去執(zhí)行呢?

將需要用到的方法導(dǎo)入剖毯,并實(shí)例化

from  base.runmethod import RunMethod
from  data.get_data import GetData
class DependentData:
     def __init__(self,case_id):
          self.data = GetData()#獲取數(shù)據(jù)實(shí)例化

執(zhí)行依賴測試圾笨,獲取結(jié)果

 #執(zhí)行依賴測試,獲取結(jié)果
     def run_dependent(self):
          run_method = RunMethod()#實(shí)例化
          row_num = self.opera_excle.get_row_num(self.case_id) #獲取行號
          request_data = self.data.get_data_for_json(row_num) #傳入行號
          header = self.data.is_header(row_num)
          method = self.data.get_request_method(row_num)
          url = self.data.get_request_url(row_num)
          res = run_method.run_main(method,url,request_data,header)
          return res

執(zhí)行完成后逊谋,只需把執(zhí)行完成返回的結(jié)果根據(jù)我們的依賴數(shù)據(jù)去把對應(yīng)的值提取出來擂达,那么怎么去提取對應(yīng)的值呢?

步驟1:在get_data.py中新增獲取依賴數(shù)據(jù)key的方法

# 獲取依賴數(shù)據(jù)的key
    def get_depend_key(self,row):
        col = int(data.data_config.get_data_depend())
        depent_key = self.opera_excle.get_cell_value(row,col)
        if depent_key == "":
            return None
        else:
            return depent_key

步驟2:在dependent_data.py中依賴的key去獲取執(zhí)行依賴測試case的響應(yīng)數(shù)據(jù)胶滋,然后返回板鬓。使用jsonpath解析json參考:http://www.reibang.com/p/82e63cc8e0a1

from jsonpath_rw import jsonpath,parse

      #根據(jù)依賴的key去獲取執(zhí)行依賴測試case的響應(yīng)數(shù)據(jù),然后返回
     def get_data_for_key(self,row):
          depend_data = self.data.get_depend_key(row)
          response_data = self.run_dependent() #拿到響應(yīng)值究恤,根據(jù)層級關(guān)系去拿對應(yīng)的值
          print(depend_data)
          print(response_data)
          #用到j(luò)sonpath(就是一層一層的去拿數(shù)據(jù))
          json_exe = parse('depend_data')
          madle = json_exe.find(response_data)
          return [math.value for math in madle]#結(jié)果集里返回對應(yīng)數(shù)據(jù)

數(shù)據(jù)依賴結(jié)構(gòu)構(gòu)建

通過case返回的數(shù)據(jù)把對應(yīng)數(shù)據(jù)拿到之后俭令,接下來就需要把數(shù)據(jù)拿過來更新一下作為請求數(shù)據(jù)。

步驟一:首先判斷要不要執(zhí)行即判斷有沒有依賴(拿返回?cái)?shù)據(jù)去判斷)部宿,獲取depend數(shù)據(jù)抄腔,在get_data.py下創(chuàng)建一個(gè)方法

#判斷是否有case依賴
    def is_depend(self,row):
        col = int(data.data_config.get_case_depend())#獲取依賴所屬字段
        depend_case_id = self.opera_excle.get_cell_value(row,col)#拿到對應(yīng)數(shù)據(jù)
        if depend_case_id == "":
            return None
        else:
            return depend_case_id

步驟二:架子搭建瓢湃,在run_test.py中傳入數(shù)據(jù)依賴

import sys
sys.path.append("F:/project/untitled")
from base.runmethod import RunMethod
from data.get_data import GetData
from util.common_util import CommonUtil
from data.dependent_data import DependentData
class RunTest:
    def __init__(self):
        self.run_method = RunMethod()
        self.data = GetData()
        self.com_until = CommonUtil()

    # 程序執(zhí)行主入口
    def go_on_run(self):
        res = None
        # 獲取excel行數(shù),即case個(gè)數(shù)
        rows_count = self.data.get_case_lines()
        # 循環(huán)執(zhí)行case
        for i in range(1,rows_count):
            is_run = self.data.get_is_run(i)
            if is_run:
                 url = self.data.get_request_url(i)
                 method = self.data.get_request_method(i)
                 request_data = self.data.get_data_for_json(i)  # 請求數(shù)據(jù)存放在json文件
                 expect = self.data.get_expect_data(i) # 獲取預(yù)期結(jié)果值
                 header = self.data.is_header(i)
                 depend_case = self.data.is_depend(i)

            #如果depend_case!=None就需要有依賴
            if depend_case !=None:
                self.depend_data = DependentData(depend_case)
                #獲取依賴的響應(yīng)數(shù)據(jù)
                depend_response_data = self.depend_data.get_data_for_key(i) #傳入行號
                #獲取依賴的key
                depend_key = self.data.get_depend_field(i)
                #根據(jù)獲取的依賴key把字段更新下
                request_data[depend_key] = depend_response_data
            res = self.run_method.run_main(method, url, request_data, header)
            if self.com_until.is_contain(expect,res):
                self.data.write_result(i,'pass')
            else:
                self.data.write_result(i,'fail')
if __name__ == '__main__':
    run = RunTest()
    run.go_on_run()


在get_data.py中定義獲取依賴字段的方法

 #獲取數(shù)據(jù)依賴字段
    def get_depend_field(self,row):
        col = int(data.data_config.get_filed_depend())
        depend_data = self.opera_excle.get_cell_value(row,col)
        if depend_data =="":
            return  None
        else:
            return depend_data
執(zhí)行結(jié)果.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赫蛇,一起剝皮案震驚了整個(gè)濱河市绵患,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌悟耘,老刑警劉巖落蝙,帶你破解...
    沈念sama閱讀 212,686評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異暂幼,居然都是意外死亡筏勒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,668評論 3 385
  • 文/潘曉璐 我一進(jìn)店門粟誓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來奏寨,“玉大人,你說我怎么就攤上這事鹰服〔⊥” “怎么了?”我有些...
    開封第一講書人閱讀 158,160評論 0 348
  • 文/不壞的土叔 我叫張陵悲酷,是天一觀的道長套菜。 經(jīng)常有香客問我,道長设易,這世上最難降的妖魔是什么逗柴? 我笑而不...
    開封第一講書人閱讀 56,736評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮顿肺,結(jié)果婚禮上戏溺,老公的妹妹穿的比我還像新娘。我一直安慰自己屠尊,他們只是感情好旷祸,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,847評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著讼昆,像睡著了一般托享。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上浸赫,一...
    開封第一講書人閱讀 50,043評論 1 291
  • 那天闰围,我揣著相機(jī)與錄音,去河邊找鬼既峡。 笑死羡榴,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的运敢。 我是一名探鬼主播炕矮,決...
    沈念sama閱讀 39,129評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼么夫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了肤视?” 一聲冷哼從身側(cè)響起档痪,我...
    開封第一講書人閱讀 37,872評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎邢滑,沒想到半個(gè)月后腐螟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,318評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡困后,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,645評論 2 327
  • 正文 我和宋清朗相戀三年乐纸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片摇予。...
    茶點(diǎn)故事閱讀 38,777評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡汽绢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出侧戴,到底是詐尸還是另有隱情宁昭,我是刑警寧澤,帶...
    沈念sama閱讀 34,470評論 4 333
  • 正文 年R本政府宣布酗宋,位于F島的核電站积仗,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蜕猫。R本人自食惡果不足惜寂曹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,126評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望回右。 院中可真熱鬧隆圆,春花似錦、人聲如沸翔烁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,861評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽租漂。三九已至,卻和暖如春颊糜,著一層夾襖步出監(jiān)牢的瞬間哩治,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,095評論 1 267
  • 我被黑心中介騙來泰國打工衬鱼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留业筏,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,589評論 2 362
  • 正文 我出身青樓鸟赫,卻偏偏與公主長得像蒜胖,于是被迫代替她去往敵國和親消别。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,687評論 2 351

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