1. 程式人生 > 實用技巧 >介面測試中,如何優雅的解決用例之間引數呼叫?

介面測試中,如何優雅的解決用例之間引數呼叫?

近期一個介面測試實戰小問題引發了眾多測試同學的關注,本文整理了學員疑惑之處和學院老師的解答,供大家一起學習參考。

Question by @Vantas

在介面測試過程中,我遇到一個問題:

如何將上一用例的返回值的某個 key 的 value 值,當作下一用例的入參進行使用呢?

例如第一個用例是登入,後續每一個介面都需要用到登入介面返回的 token,用什麼方式去傳這個 token 呢?如果後面介面需要多個入參呢(即需要登入的 token,也需要另一個介面的 id 值)?

Answer by @Wayyt

要看使用的是什麼工具。如果是用 Java/Python 程式碼,那返回值轉成 JSON,然後提取出來就可以了。

Question by @Vantas

我使用的是 Pytest,把返回值賦給了一個全域性變數的字典,後面用例直接呼叫字典,這樣可以嗎?

用 JSON 或字典返回,再後面用例怎麼傳入呢,一直沒弄清楚,是用fixtrue呼叫方法名,然後用例裡直接寫返回的變數名嗎?

那像第三個支付用例,裡面需要 token,還需要 URL 後面加 “orderids”,這種需要前面兩個用例得返回值,怎麼寫呢?不能方法名中傳入兩個 fixtrue 把?那如果需要多個引數呢?如果用例非常多的話,用例之間引數呼叫關聯比較多,怎麼樣維護比較好呢?

有沒有最優方式?以下是示例程式碼:

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

#登陸
def test_fxLogin(self):
    url = “http://www.xxx.com/token”
    data = {“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 ~進群可領取軟體測試資料以及群內測試大牛解惑!

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

功能測試 —— 介面測試 —— 自動化測試 —— 測試開發 —— 測試架構師

加油吧,測試人!如果你需要提升規劃,那就行動吧,在路上總比在起點觀望的要好。事必有法,然後有成。

資源不錯就給個推薦吧~