python脚本怎么打印日志_python 接口测试1 --如何创建和打印日志文件
python自帶的logging實在是不好用,推薦使用logbook
思路如下:
1.創(chuàng)建path.py文件,獲取工程根路徑
2.創(chuàng)建log.py文件,在工程根路徑下創(chuàng)建日志文件(文件名稱按日期命名),并設置log輸出等級
3.執(zhí)行測試用例,調(diào)用log文件
具體實現(xiàn)如下:
1. ?path.py文件如下: ? 獲取項目的根路徑
os.path.abspath(path) ? ? ??返回path規(guī)范化的絕對路徑
os.path.dirname(__file__) ? ?獲取當前運行腳本的絕對路徑
因為os.path.dirname(__file__)返回腳本的路徑,存在的問題:
1)必須是實際存在的.py文件,如果在命令行執(zhí)行,則會引發(fā)異常NameError: name '__file__' is not defined
2)在運行的時候如果輸入完整的執(zhí)行的路徑,則返回.py文件的全路徑如:
Python?c:/test/test.py 則返回路徑 c:/test ,如果是python?test.py 則返回空
所以 結(jié)合os.path.abspath用,效果會好
os.path.dirname(os.path.abspath(__file__)),os.path.abspath(__file__)返回的是.py文件的絕對路徑
這就是os.path.dirname(__file__)的用法,其主要總結(jié)起來有:
1)不要已命令行的形式來進行os.path.dirname(__file__)這種形式來使用這個函數(shù)
2)結(jié)合os.path.abspath()使用
importosdeffile_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字符串組合成文件目錄,比如最終結(jié)果為 F:\requests\log
importlogbookimportosfrom logbook.more importColorizedStderrHandlerfrom tools.path importfile_path
path=file_path()
LOG_DIR= os.path.join(path, 'log')if notos.path.exists(LOG_DIR):
os.makedirs(LOG_DIR)#如果log不存在,在當前路徑下創(chuàng)建一個log文件夾,
def get_logger(name='Test', file_log=True, level=''):
logbook.set_datetime_format('local')
ColorizedStderrHandler(bubble=False, level=level).push_thread()iffile_log:
logbook.TimedRotatingFileHandler(os.path.join(LOG_DIR,'%s.log' %name),
date_format='%Y-%m-%d-%H', bubble=True, encoding='utf-8').push_thread()returnlogbook.Logger(name)
LOG= get_logger(file_log=True, level='INFO')if __name__ == "__main__":
LOG.error('Log-info')
3. ? 接口用例執(zhí)行中調(diào)用log文件
此處先說一個接口調(diào)用,有兩種類庫,urllib2 ?和requests
urllib2 處理編碼太麻煩,比起來還是選擇簡潔明快的requests
Requests 使用的是 urllib3,繼承了urllib2的所有特性。Requests支持HTTP連接保持和連接池,支持使用cookie保持會話,支持文件上傳,支持自 動確定響應內(nèi)容的編碼,支持國際化的 URL 和 POST 數(shù)據(jù)自動編碼。
Requests的使用相當簡單,直接用requests.post(url,data),可見下面的例子
importrequestsdefold_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()#返回結(jié)果如下:{"code":0,"msg":null,"data":{"uid":"5adf5c6a267f40448bb5b0022db94af7","name":"王元元","type":"NORMAL"}}#賬號信息是: {"code":-4001,"msg":"登錄token無效","data":null}#第二條因為沒有獲取到session,登陸態(tài),導致報錯
可以看到,當?shù)诙l請求的接口需要登錄態(tài),但是無法獲取,此時requests有個特別棒的功能是 ?可以直接使用
requests.session() 保存登錄態(tài)
具體可見下面:
importrequestsfrom tools importlogclassMsg:def __init__(self):
self.Log=log.LOG
self.session=requests.session()defmsg_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)defmsg_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 ~
總結(jié)
以上是生活随笔為你收集整理的python脚本怎么打印日志_python 接口测试1 --如何创建和打印日志文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ STL 容器的一些总结
- 下一篇: websocket python爬虫_p