python脚本怎么打印日志_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": "",

"phone": "1771019****",

"password": ""

}

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": "",

"phone": "1771019***",

"password": "1q2"

}

msg.msg_post(url= "https://*****/api/login",data=data )

msg.msg_get(url="https://****/api/account")

以上,over ~

Log4j配置的经典总结,打印日志文件,日志存库

一.介绍 Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制 日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务 器.NT的事件记录器.UNIX Sy ...

PDFBox创建并打印PDF文件, 以及缩放问题的处理.

PDFBox带了一些很方便的API, 可以直接创建 读取 编辑 打印PDF文件. 创建PDF文件 public static byte[] createHelloPDF() { ByteArrayOu ...

转载:c++打印日志文件的一个模板

转载地址:http://blog.csdn.net/huangyifei_1111/article/details/52134914 NetDataLog.h #ifndef NETDATALOG_H ...

【python】中文的输出,打印,文件编码问题解决方法

直接在python中输入中文的字符串会报编译错误SyntaxError: Non-ASCII character,因为python文件默认编码方式是ASCII.如果想要打印中文字符,有两种方式: 1. ...

java最简单实现Log打印和生成日志文件

导包 1.commons-logging.jar包 下载 2.log4j.jar包 下载 配置log4j 1.在src根目录下创建一个log4j.properties文件. 文件全部内容如下: log ...

利用log4net创建日志文件时过滤日志,这是坑还是?

前言 网上貌似没有太多关于log4net过滤日志的资料,在研究过程中发现一点小问题,这里做下记录,希望对后续有用到的童鞋起到一丢丢帮助作用. log4net日志过滤 由于是在.NET Core中使用, ...

如何在Centos 7上用Logrotate管理日志文件

何为Logrotate? Logrotate是一个实用的日志管理工具,旨在简化对系统上生成大量的日志文件进行管理. Logrotate允许自动旋转压缩,删除和邮寄日志文件,从而节省宝贵的磁盘空间. L ...

[转]Linux日志文件总管——logrotate

FROM : https://linux.cn/article-4126-1.html 日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到.对于忙碌的服务器,日志文 ...

linux之使用cron,logrotate管理日志文件

1) logrotate配置   logrotate 程序是一个日志文件管理工具.用来把旧的日志文件删除,并创建新的日志文件,我们把它叫做“转储”.   我们可以根据日志文件的大小,也可以根据其天数来 ...

随机推荐

Java Class.cast方法

1.Java api public T cast(Object obj); Casts an object to the class or interface represented 解释的比较笼统, ...

LCS(打印全路径) POJ 2264 Advanced Fruits

题目传送门 题意:两个字符串结合起来,公共的字符只输出一次 分析:LCS,记录每个字符的路径 代码: /* LCS(记录路径)模板题: 用递归打印路径:) */ #include

iOS 开发者必不可少的 75 个工具,你都会了吗

如果你去到一位熟练的木匠的工作室,你总是能发现他/她有一堆工具来完成不同的任务. 软件开发同样如此.你可以从软件开发者如何使用工具中看出他水准如何.有经验的开发者精于使用工具.对你目前所使用的工具不断 ...

bzoj1056

花了一上午大概复习了一下splay,treap 像这种裸的数据结构题在js应该会越来越少 不过练练手也好, 这就是平衡树+hash,如果这是单纯的BST应用,还是写treap吧,好调试 ;       ...

Eclipse Maven构建WebApp项目资源目录显示不全的原因与解决方式

一.问题展示 1.Eclipse在使用Maven构建WebApp项目的时候,首先Maven的安装和配置都没有问题的,但是构建项目之后,Maven项目要求的几个必须要有的资源目录显示不了: 问题如下图: ...

Django小范围傻瓜总结

1.母版: layout.html {% block x %}{% endblock %} 2.子版: {% extends 'layout' %} {% block x %}.......{% en ...

JavaScript事件循环机制

事件循环 事件循环不仅仅包含事件队列,而是具有至少两个队列,除了事件,还要保持浏览器执行的其他操作.这些操作被称为任务,并且分为两类:宏任务(或通常称为任务)和微任务. 单次循环迭代中,最多处理一个宏 ...

Spark Streaming的容错和数据无丢失机制

spark是迭代式的内存计算框架,具有很好的高可用性.sparkStreaming作为其模块之一,常被用于进行实时的流式计算.实时的流式处理系统必须是7*24运行的,同时可以从各种各样的系统错误中恢复 ...

BTM学习小记

BTM的原理跟LDA很像,下面是该模型的概率图: 由该图可以看出来,与LDA的区别在于确定主题分布和词分布后相应地取两个词(而LDA只取一个,即类比常见的骰子说法:先投掷K面的骰子得到主题z,再根据相 ...

使用Github的高级搜索功能

使用Github的高级搜索功能 1. 首先,提供Github高级搜索帮助页面 https://help.github.com/categories/search/ 2. 搜索语法 https://he ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值