接口測試中,如何優雅的解決用例之間參數調用?

在這裏插入圖片描述
近期一個接口測試實戰小問題引起了衆多測試同窗的關注,本文整理了學員疑惑之處和學院老師的解答,供你們一塊兒學習參考。
json

Question by @Vantasapi

在接口測試過程當中,我遇到一個問題:數據結構

如何將上一用例的返回值的某個 keyvalue 值,看成下一用例的入參進行使用呢?

例如第一個用例是登陸,後續每個接口都須要用到登陸接口返回的 token,用什麼方式去傳這個 token 呢?若是後面接口須要多個入參呢(即須要登陸的 token,也須要另外一個接口的 id 值)?多線程

Answer by @Wayyt架構

要看使用的是什麼工具。若是是用 Java/Python 代碼,那返回值轉成 JSON,而後提取出來就能夠了。

Question by @Vantasapp

我使用的是 Pytest,把返回值賦給了一個全局變量的字典,後面用例直接調用字典,這樣能夠嗎?

用 JSON 或字典返回,再後面用例怎麼傳入呢,一直沒弄清楚,是用fixtrue調用方法名,而後用例裏直接寫返回的變量名嗎?工具

那像第三個支付用例,裏面須要 token,還須要 URL 後面加 「orderids」,這種須要前面兩個用例得返回值,怎麼寫呢?不能方法名中傳入兩個 fixtrue 把?那若是須要多個參數呢?若是用例很是多的話,用例之間參數調用關聯比較多,怎麼樣維護比較好呢?post

有沒有最優方式?如下是示例代碼:學習

def setup():
self.t=globals()

#登錄
def test_fxLogin(self):
    url =http://www.xxx.com/tokendata = { username:hffx,password:123456,platformType:NORMAL}
    headers = { Content-Type:application/json}
    r = requests.post(url, data=json.dumps(data), headers=headers)
    result = r.text
    print(result)
jsr = json.loads(result)
fxtoken = jsr[data]
self.t[fx]=fxtoken
assert r.status_code==200

#下單
def test_buyprocedure(self):
    url =http://www.xxx.com/data = { data}]}
    headers = { Authorization:self.t[fx],Content-Type:application/json}
    r=requests.post(url,data=json.dumps(data),headers=headers)
    result = r.text
    print(result)
jsr=json.loads(result)
orderid=jsr[data][id]
self.t[orderids]=orderid
assert r.status_code == 200

#支付
def test_payprocedure(self):
    url =http://www.xxx.com/+self.t[orderids]
    data = { "data}]}
    headers = { Authorization:self.t[fx],Content-Type:application/json}
    r=requests.post(url,data,headers)
    print(r.text)
assert r.status_code==200

Answer by @Wayyt測試

其實這個邏輯很是簡單,你不要把它想複雜。無非就是作三件事:拿到 token,存儲 token,調用token

從返回值中提取便可,用一個列表、一個字典甚至一個文件,把它存儲起來。讀取你放置token的數據結構或者文件便可。

// 能夠用setup_class

@classmethod
def setup_class(cls):
    cls.pass_dic = { }

// 以後在測試用例裏用self.pass_dic來存取結果

Answer by @思寒

  • 全局變量能夠,可是不推薦
  • 類變量能夠 cls.xx,多線程容易出問題
  • 實例變量 self.xx,這種方式最好

如下是一個沒有使用 Page/API Object 模式的入門用例:

class TestWework:
    def setup_class(self):
        r = requests.get(
            'https://qyapi.weixin.qq.com/cgi-bin/gettoken',
            params={ 
                'corpid': 'xxxxx',
                'corpsecret': 'xxxxxxxx'
            }
        )
        self.token = r.json()['access_token']

    def test_tags_list(self):
        r = requests.post(
            'https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get_corp_tag_list',
            params={ 'access_token': self.token}
        )
        print(json.dumps(r.json(), indent=2, ensure_ascii=False))
        assert r.status_code == 200
        assert r.json()['errcode'] == 0

在這裏插入圖片描述

另外,歡迎加入軟件測試技術交流羣 313782132 ~進羣可領取軟件測試資料以及羣內測試大牛解惑!

測試工程師職業發展路線圖

功能測試 —— 接口測試 —— 自動化測試 —— 測試開發 —— 測試架構師

加油吧,測試人!若是你須要提高規劃,那就行動吧,在路上總比在起點觀望的要好。事必有法,而後有成。

資源不錯就給個推薦吧~

相關文章
相關標籤/搜索