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


python自帶的logging實在是不好用,推薦使用logbook

思路如下:

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

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

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

 

具體實現如下:

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

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

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

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

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 ~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM