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()使用

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字符串组合成文件目录,比如最终结果为 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不存在,在当前路径下创建一个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.   接口用例执行中调用log文件

此处先说一个接口调用,有两种类库,urllib2  和requests

urllib2 处理编码太麻烦,比起来还是选择简洁明快的requests

Requests 使用的是 urllib3,继承了urllib2的所有特性。Requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自 动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码。

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()#返回结果如下:{"code":0,"msg":null,"data":{"uid":"5adf5c6a267f40448bb5b0022db94af7","name":"王元元","type":"NORMAL"}}#账号信息是: {"code":-4001,"msg":"登录token无效","data":null}#第二条因为没有获取到session,登陆态,导致报错

可以看到,当第二条请求的接口需要登录态,但是无法获取,此时requests有个特别棒的功能是  可以直接使用

requests.session() 保存登录态

具体可见下面:

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 ~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505774.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

吸血鬼 java_吸血鬼数

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼代码:/** * 功能:找出四位数中由二位数相乘得出的吸血鬼数 * author wiley */public class Vampire { public static void main(String[] arg){ String[] ar_str1,ar_str2; int sum0; //双重循环穷举 for(int i10;i<100;i){ //j…

vfp操作excel排序_中招计算机信息技术考试训练|Excel操作题一|排序和筛选

Excel操作题&#xff08;一&#xff09;&#xff1a;进入本题工作目录&#xff0c;请完成以下操作。1、将单元格区域A1:F1合并后居中&#xff0c;字体格式设置为黑体、16号。2、将单元格区域A2:F2填充颜色改为橙色&#xff0c;A3:A7填充颜色改为黄色。3、用函数计算5个储蓄所的…

java 反射机制 视频_【视频笔记】Java反射机制笔记

Java 语言的反射机制在Java运行时环境中&#xff0c;对于任意一个类&#xff0c;可以知道这个类有哪些属性和方法。对于任意一个对象&#xff0c;可以调用它的任意一个方法。这种动态获取类的信息以及动态调用对象的方法的功能来自于Java 语言的反射(Reflection)机制。Java 反射…

算术溢出使用4字节值上的运算符_c语言程序设计的数据类型、运算符和表达式介绍...

数据类型 为什么在用计算机运算时,要指定数据的类型呢?在数学中,数值是不分类型的,数值的运算是绝对准确的,例如:1/3的值是0.333333(循环小数)。 而在计算机中,数据是存放在存储单元中的,它是具体存在的。而且,存储单元是由有限的字节构成的,每一个存储单元中存放数据…

java windows 下载_Windows环境下JDK的下载与安装

1.首先检查一下本机是否有安装java。按winR&#xff0c;在弹出窗口中输入cmd&#xff0c;按回车打开控制台在控制台中输入 java 并按回车&#xff0c;如果显示“java 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件“&#xff0c;则说明这台电脑还没安装java可…

net应用程序中发生了未经处理的异常怎么办_介绍一些在.NET Core 3.0中引入的诊断改进工具...

编者按&#xff1a;即使.NET Core3.1.5已经发布&#xff0c;在进行.NET Core的性能诊断时&#xff0c;我们有时依然不知该从何处下手&#xff0c;那这篇介绍.NET Core3.0中引入的诊断工具&#xff0c;或许能为我们提供参考。在.NET Core 3.0中&#xff0c;我们引入了一套工具&a…

python pptp链接_pptp-client连接设置

一、安装软件包yum -y install pptpyum -y install pptp-setup二、使用pptpsetup命令直接拨号&#xff0c;可直接生成配置文件。pptpsetup --create NAME --server ADDRESS --username DOMAIN\\USER --password PWD --encrypt –start#--encrypt&#xff1a;支持加密&#xff0…

python选择框格式_PyQt组合框选择性文本格式

圣诞快乐伙计们&#xff01;在我不熟悉PyQt4编程&#xff0c;并且在大多数UI开发中使用Qt设计器。不过&#xff0c;我有一个特定的需求&#xff0c;需要通过Python代码填充QComboBox。另外&#xff0c;我想更改一些条目的文本格式(粗体&#xff0c;红色背景色)。在基本上&#…

python 整数输出 d f_pythn print格式化输出---------%s 和 % d 都是什么意思?

pythn print格式化输出。%r 用来做 debug 比较好&#xff0c;因为它会显示变量的原始数据(raw data)&#xff0c;而其它的符号则是用来向用户显示输出的。1. 打印字符串print ("His name is %s"%("Aviad"))效果&#xff1a;2.打印整数print ("He is %…

c语言memcopy_用C语言模拟实现memcpy函数,memmove函数和memset函数

模拟实现memcpy函数&#xff1a;函数原型&#xff1a;void *memcpy (void *p,void *m, size_t num);memcpy与strcpy相比&#xff0c;memcpy函数用来做内存拷贝&#xff0c;可以用它拷贝任何数据类型的对象&#xff0c;并且可以指定拷贝的数据长度。stycpy函数也是用来做内存拷贝…

python中oxf2是什么_0x02-StartingPoint-Oopsie

Help Desk经过第一篇文章&#xff0c;我思考了一下&#xff0c;已经存在太多的 walkthrough&#xff0c;不应该再去写一样的文章&#xff0c;而是应该着重写思路。接下来的文章&#xff0c;会着重写在什么情况下&#xff0c;应该做些什么&#xff0c;应该注意哪些信息&#xff…

java jlist checkbox_JCheckBox检查Java中的JList中的切换逻辑时遇到问题

如果我理解这个问题......import java.awt.*;import java.awt.event.*;import javax.swing.*;public class JListToggleLogicTest {private final ClearSelectionListener listener new ClearSelectionListener();public JComponent makeUI() {JList list new JList(makeMode…

java yaml dump方法_yamlyaml.load与yaml.dump方法

yaml.load与yaml.dump方法该模块提供了一些方法&#xff0c;不过常用的方法只有两个yaml.load和yaml.dump &#xff0c;以下是一个版本相关的yaml 格式文件[root361way yaml]# cat tree.yamltreeroot:branch1:name: Node 1branch1-1:name: Node 1-1branch2:name: Node 2branch2…

vba中有多线程吗_VBA会被Python代替吗?

先说答案&#xff1a;不会被替代这里引用轮子哥的话说&#xff1a;微软只会开发更多的增强型插件来慢慢淡化VBA&#xff0c;但是不会用其他语言取代VBA。早在17年底&#xff0c;就有风声说Python要取代VBA&#xff0c;成为Excel官方脚本语言。我认真翻看了下好多篇文章&#xf…

java 编码实现内存拷贝_java提高篇(六)-----使用序列化实现对象的拷贝

我们知道在Java中存在这个接口Cloneable&#xff0c;实现该接口的类都会具备被拷贝的能力&#xff0c;同时拷贝是在内存中进行&#xff0c;在性能方面比我们直接通过new生成对象来的快&#xff0c;特别是在大对象的生成上&#xff0c;使得性能的提升非常明显。然而我们知道拷贝…

统计一个整数的所有因子的个数_【题解循环嵌套】1095:数1的个数

1095&#xff1a;数1的个数时间限制: 1000 ms 内存限制: 65536 KB【题目描述】给定一个十进制正整数n(1≤n≤10000)&#xff0c;写下从1到n的所有整数&#xff0c;然后数一下其中出现的数字“1”的个数。例如当n2时&#xff0c;写下1,2。这样只出现了1个“1”&#xff1b;当…

运行java是提示 选择未包含 main 类型 如何解决_RuoYi 若依 代码生成器使用教程...

你好&#xff01; 若是你想学习如何使用RuoYi 若依 代码生成器, 能够仔细阅读这篇文章&#xff0c;了解一下RuoYi 若依 代码生成器的基本知识。java新建数据表(注意字段必定要写注释)USE ry;web/*Table structure for table sys_zyq */sqlDROP TABLE IF EXISTS sys_zyq;数据库C…

vb.net 功能f8键事件_憋了三年,史上最全的 F1~F12 键用法整理出来了!

F1~F12 键在Excel表格中的用法&#xff0c;小编很早就想写篇教程整理一下。可三年过去了还没整理出来&#xff0c;原因有很多&#xff0c;总结成一个字&#xff1a;懒&#xff01;这么&#xff0c;终于整理出来了&#xff01;提示&#xff1a;有的电脑启用了FN键&#xff0c;如…

java递归分苹果_递归较难题——分苹果问题

第四届程序设计大赛 苹果Time Limit:1000MS Memory Limit:65536KTotal Submit:90 Accepted:48Description把M个同样的苹果放在N个同样的盘子里&#xff0c;允许有的盘子空着不放&#xff0c;问共有多少种不同的分法&#xff1f;(用K表示)5&#xff0c;1&#xff0c;1和1&#…

usb hid 调试软件_开源USB免驱固件升级软件分享

跳兔科技开源软件分享&#xff0c;免驱的USB固件升级软件&#xff0c;给您的产品提供无限的活力。加快产品上市速度。相信做MCU开发的人都免不了要做boot升级功能&#xff0c;产品投入使用中&#xff0c;如果再使用link进行固件更新的话就比较麻烦&#xff0c;那么拥有一个优秀…