《Python 测试开发技术栈—巴哥职场进化记》—一道作业题

python

上文《Python测试开发技术栈—巴哥职场进化记》—软件测试工程师“兵器库”我们讲到了软件测试工程师常用的一些工具,巴哥被软件测试工具的广而全所折服。今天我们来看看巴哥会经历哪些事情,故事还在继续……

01 一道作业题

早上开过站会后,华哥来到巴哥工位上,神秘的笑着说:

“巴哥,你会Python还是Java?”

“我都会一点,Python之前自学过,Java在大学里的课程里是有的”,巴哥回答道。

“那好啊,给你出一道作业题,考考你写代码的能力咋样!你用Python实现将日志写入本地文件的功能”,华哥说道。

“这不难实现啊,直接用open方法打开一个文件,写入日志内容不就行了”,巴哥心里嘀咕道。

于是巴哥按照自己的理解,实现了一个版本,发给了华哥,其实核心代码就两行,不得不感叹Python语言的简洁。

python">def write_log_file(content):

"""

将日志写入到文件中

:return:

"""

with open("log.txt", "w+") as log_file:

log_file.write(content)

if __name__ == \'__main__\':

write_log_file("test log")

华哥看了看巴哥提交的代码,只回复他了一句话:“我给你提个需求吧?!”

02 华哥的需求

“日志文件,每天都会产生,需要将他们分开存储,方便查看。”

“日志内容,需要显示打印日志的时间、调用打印日志的方法名”

“支持多人同时调用你的这个方法写日志。”

“你先实现这三个功能,将你的方法完善下”,华哥笑着说道。

巴哥被惊到了,没想到听上去一个小小的功能,里面需要考虑的情况这么多。

虽然有些东西自己也没想明白,只能硬着头皮去实现了。

“实在不行,还有搜索大法呢”,巴哥心想道。

首先日志文件如果想以天为维度来存储,可以使用时间命名,这个比较简单。

其次在日志内容中打印时间简单,不过获取调用打印日志的方法得研究下。

经过查资料,发现Python的sys._getframe()可以用来查看函数被什么函数调用,以及被调用函数的行号,正好能满足需要。

最后就是需要支持多线程同时写日志文件,需要用到Python中fcntl库,它提供了文件加锁机制,避免日志信息丢失。

想清楚上面三个问题的实现方案,巴哥又实现了一个版本。

import sys

import time

import fcntl

def write_log_file(content):

"""

将日志写入到文件中

:return:

"""

# 获取格式化时间

file_name_format = time.strftime("%Y%m%d", time.localtime())

log_time_format = time.strftime("%Y-%m-%d-%H:%M:%S", time.localtime())

# 调用的模块的名称,以py结尾,截取其中的py文件名

call_file_name = sys._getframe().f_code.co_filename

call_file_names = call_file_name.split("/")

call_file_name = call_file_names[len(call_file_names) - 1 ]

# 获取调用打印日志的方法名

call_method_name = sys._getframe().f_code.co_name

# 获取调用打印日志方法的行数

call_no = sys._getframe().f_back.f_lineno

# 格式化日志

log_content_format = "{} {}:{}():{} {} \n"

with open("{}.log".format(file_name_format), "a") as log_file:

# 加锁,注意,不需要手动解锁,在with方法之外,会自动解锁

fcntl.flock(log_file.fileno(), fcntl.LOCK_EX)

log_file.write(log_content_format.format(log_time_format, call_file_name, call_method_name, call_no, content))

if __name__ == \'__main__\':

write_log_file("测试日志")

write_log_file("我要测试日志")

巴哥将代码再次发送给华哥,并且将日志内容截了个图,让华哥直接看看效果。

03 Python日志的利器

“你这能满足咱基本的需要了,不过,短短的时间里你能写出来,也是不错的”,华哥看了看巴哥的代码说道。

“华哥,你们平时工作中都用什么来打印日志呀?我得学习学习”,巴哥期待的看着华哥。

“那就给你推荐一款Python日志的利器—loguru,它是一个开源的Python库”,华哥说道。

“那loguru主要厉害在什么地方呢?”,巴哥疑惑的看着华哥。

"可以用四个字概括:简单、强大",华哥得意的说道。

“简单是说它只需要一行代码from loguru import logger导入方法就能使用”

“功能强大是说它不仅打印日志带颜色、还可格式化日志、过滤日志、根据一定规则保存到文件等等”。

“可以到github上看更详细的介绍”,华哥补充道。

“好的,我这就试试去”,巴哥已经迫不及待的想体验一把。

04 用好开源工具

其实,在软件测试的各个方面,都已经有了成熟的开源方案,或者现成的工具可供选择。

所以,在我们平时的工作中,碰到问题或者产生了哪些方面的需求。

可以先去github上找找有没有对应的开源工具。

但是,建议在使用开源工具的同时,能够阅读源码,读懂作者的设计思路。

为了,能结合你们公司的具体情况,做定制化的一些二次开发。

巴哥在当天的工作日报中总结到。

以上是 《Python 测试开发技术栈—巴哥职场进化记》—一道作业题 的全部内容, 来源链接: utcz.com/z/388152.html

回到顶部