為什么要把引數進行傳遞呢?是的,要用!
這不是廢話嗎!
對測驗資料引數化,而引數是可以被其他需要使用到的,比如,c=1+2,我們可以設定a=1,b=2,公式就可以使用c=a+b代替,我們a、b就可以填寫其他資料代進去,我們軟體測驗也是一樣的不管是UI/介面測驗都是一樣的,url、查詢入參、請求方式:get、post,如果是post請求的body,登錄后獲取到的cookie、token,還有其他資料等等,一切不固定的都可以做引數化,但是不是一切都要做引數化,postman可以設定為全域變數或者環境變數,而其他需要使用的地方可以通過{{變數名}}去呼叫,而jmeter可以通過設定用戶變數然后通過${變數名}去呼叫,其他工具也同理,一法通萬法通,那么我們這里怎么做呢,我們之前使用過了組態檔base.ini傳入引數,還有把引數先寫在excel檔案,yaml檔案然后通過讀取檔案的方法讀取然后傳入需要用到的地方,那我們不是可以把獲取到的資料保存到我們的檔案中嗎?是的可以!
先來看下檔案操作的模式
|
| r(讀取) | w(寫入) | a(追加) |
|
| 存在:讀取 | 存在:洗掉-->創建-->寫入 | 存在:追加寫入 |
| 不存在:報錯 | 存在:創建-->寫入 | 不存在:創建-->寫入 | |
| +(可讀寫) | 存在:讀寫 | 存在:洗掉-->創建-->讀寫 | 存在:追加讀寫 |
| 不存在:報錯 | 存在:創建-->讀寫 | 不存在:創建-->追加讀寫 | |
| b(二進制) | 以二進制讀取檔案 | 以二進制方式寫入檔案 | 以二進制方式追加寫入檔案 |
直接上代碼
這是先從登錄介面獲取回傳值
yaml.dump(data, f)
保存到token.yaml檔案中,然后通過
result = yaml.load(f, Loader=yaml.FullLoader)
讀取yaml檔案中的值
import unittest
import requests
import os
from ddt import ddt, file_data, unpack
from common.getpath import data_path
import json
import yaml
post_data = os.path.join(data_path, 'post_data.yaml')
post_path2 = os.path.join(data_path, 'post_data2.yaml')
token_path = os.path.join(data_path, 'token.yaml')
@ddt
class parameter_association(unittest.TestCase):
@file_data(post_data)
@unpack # 二次分解元組
def test_testcase1(self, **kwargs):
url = kwargs['url']
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) \
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"}
data = {"name": kwargs['name'],
"pwd": kwargs['pwd']
}
# 發送post請求
response = requests.post(url=url, headers=headers, data=data)
# 因為回傳值是一個json字典一樣的字串:{"code": 200, "message": "登錄成功", "token": "@R_r18sQ8#"}
# 使用json.loads()就可以自動轉為最符合的資料型別,然后從轉換后的字典中取token 的值
token = json.loads(response.text)['token']
# 把需要存的資料結構定義好 我需要保存成- token: '@R_r18sQ8#'
data = [{'token': token}]
# 需要獲取一個檔案句柄,往檔案中寫入資料,然后關閉檔案句柄使用,使用with as就不用file.close()
# w 寫入模式 ,資料中有中文要加上編碼encoding='utf-8'
with open(token_path, "w", encoding="utf-8") as f:
#
yaml.dump(data, f)
print(url)
print(response.text)
@file_data(post_path2)
@unpack # 二次分解元組
def test_testcase2(self, **kwargs):
url = kwargs['url']
# r 讀取模式
with open(token_path, "r+", encoding="utf-8") as f:
# 讀取時要加上:Loader=yaml.FullLoader
result = yaml.load(f, Loader=yaml.FullLoader)
token = result[0]['token']
data = {"name": kwargs['name'],
"token": token
}
response = requests.post(url=url, data=data)
print(url)
print(data)
print(response.text)
if __name__ == '__main__':
unittest.main()
這是我們使用的一種方式,下期我們使用@classmethod操作一下
我就是那個我,不一樣的煙火,你看懂了嗎?沒有?反復敲一百遍你就懂了
另外別忘了掃碼支持一下

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/243841.html
標籤:python
上一篇:基于selenium第三方庫的爬蟲——京東定時開搶(簡單代碼、有效)
下一篇:Python突擊(一)

