python 接口測試1 --如何建立和打印日誌文件

python自帶的logging實在是很差用,推薦使用logbookpython

思路以下:api

1.建立path.py文件,獲取工程根路徑cookie

2.建立log.py文件,在工程根路徑下建立日誌文件(文件名稱按日期命名),並設置log輸出等級session

3.執行測試用例,調用log文件函數

 

具體實現以下:post

1.  path.py文件以下:   獲取項目的根路徑    測試

os.path.abspath(path)       返回path規範化的絕對路徑ui

os.path.dirname(__file__)    獲取當前運行腳本的絕對路徑  編碼

由於os.path.dirname(__file__)返回腳本的路徑,存在的問題:url

1)必須是實際存在的.py文件,若是在命令行執行,則會引起異常NameError: name '__file__' is not defined

2)在運行的時候若是輸入完整的執行的路徑,則返回.py文件的全路徑如:

Python c:/test/test.py 則返回路徑 c:/test ,若是是python test.py 則返回空

因此 結合os.path.abspath用,效果會好

os.path.dirname(os.path.abspath(__file__)),os.path.abspath(__file__)返回的是.py文件的絕對路徑

這就是os.path.dirname(__file__)的用法,其主要總結起來有:
1)不要已命令行的形式來進行os.path.dirname(__file__)這種形式來使用這個函數

2)結合os.path.abspath()使用

 

import os def file_path(): root_path = os.path.dirname(os.path.abspath(__file__)) project_path = root_path[:root_path.rfind("requests") + len("requests")] return project_path

2.log.py文件以下:

os.path.join(path, 'log')   是指將path和 log字符串組合成文件目錄,好比最終結果爲 F:\requests\log

import logbook import os from logbook.more import ColorizedStderrHandler from tools.path import file_path path = file_path() LOG_DIR = os.path.join(path, 'log') if not os.path.exists(LOG_DIR): os.makedirs(LOG_DIR) # 若是log不存在,在當前路徑下建立一個log文件夾,


def get_logger(name='Test', file_log=True, level=''): logbook.set_datetime_format('local') ColorizedStderrHandler(bubble=False, level=level).push_thread() if file_log: logbook.TimedRotatingFileHandler(os.path.join(LOG_DIR, '%s.log' % name), date_format='%Y-%m-%d-%H', bubble=True, encoding='utf-8').push_thread() return logbook.Logger(name) LOG = get_logger(file_log=True, level='INFO') if __name__ == "__main__": LOG.error('Log-info')

3.   接口用例執行中調用log文件

此處先說一個接口調用,有兩種類庫,urllib2  和requests

urllib2 處理編碼太麻煩,比起來仍是選擇簡潔明快的requests 

 Requests 使用的是 urllib3,繼承了urllib2的全部特性。Requests支持HTTP鏈接保持和鏈接池,支持使用cookie保持會話,支持文件上傳,支持自 動肯定響應內容的編碼,支持國際化的 URL 和 POST 數據自動編碼。

 Requests的使用至關簡單,直接用requests.post(url,data),可見下面的例子

import requests def old_login(): # 登錄接口
    url = "https://*****/api/login" params = { "cc": "86", "phone": "1771019****", "password": "12345678" } res = requests.post(url, data=params) print(res.text) # 登錄後查看帳號信息
    url2 = "https://*****/api/account" r = requests.get(url2) print("帳號信息是:", r.text) old_login() # 返回結果以下:{"code":0,"msg":null,"data":{"uid":"5adf5c6a267f40448bb5b0022db94af7","name":"王元元","type":"NORMAL"}} # 帳號信息是: {"code":-4001,"msg":"登陸token無效","data":null} # 第二條由於沒有獲取到session,登錄態,致使報錯

能夠看到,當第二條請求的接口須要登陸態,可是沒法獲取,此時requests有個特別棒的功能是  能夠直接使用 

requests.session() 保存登陸態

具體可見下面:

import requests from tools import log class Msg: def __init__(self): self.Log = log.LOG self.session = requests.session() def msg_get(self,url): get_msg = self.session.get(url=url) self.Log.info("code:"+str(get_msg.status_code)) self.Log.info("time:"+str(get_msg.elapsed.microseconds/1000)+"ms") # 獲取接口響應的時間 self.Log.info(get_msg.text) def msg_post(self, url, data): post_msg = self.session.post(url=url, data=data) self.Log.info("code:"+str(post_msg.status_code)) self.Log.info("time:"+str(post_msg.elapsed.microseconds/1000)+"ms") self.Log.info(post_msg.text) msg = Msg() data = { "cc": "86", "phone": "1771019***", "password": "1q2" } msg.msg_post(url= "https://*****/api/login",data=data ) msg.msg_get(url="https://****/api/account")

 

以上,over ~

相關文章
相關標籤/搜索