文章來源於:http://qrcode.testing-studio.com/f?from=51cto&url=https://ceshiren.com/tag/%E7%B2%BE%E5%8D%8E%E5%B8%96 轉載請註明出處
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
文章來源於:http://qrcode.testing-studio.com/f?from=51cto&url=https://ceshiren.com/tag/%E7%B2%BE%E5%8D%8E%E5%B8%96 轉載請註明出處