本文是根据实际项目经验,对整个过程的一个复盘与总结。文中涉及的数据,文件,图片,程序都不是真实数据,仅供参考说明~
全文3000字,大概需要5-8分钟时间阅读!
1. 提出问题
产品测试过程中会出现各种各样的问题,比如因为良品率导致机器终止或者产品本身的质量问题。一般测试都会产生测试记录,从log里面提取出需要的数据,整理成报告。log是被zip起来的csv文件,log又有很多个,每个里面又记录了不同的信息。log文件名包含时间戳,log里面包含时间机器号,单元,产品批次,以及原因,fail的分类,控制范围等信息。
需要实现的结果:生成图文报告,定期自动通过邮件将报告发送给相关人员。
2. 解决思路
使用bat脚本根据时间戳提取最近两个月的log文件到指定的文件夹。然后使用python进行解压,使用pandas进行数据提取处理。使用公司自己的数据库管理软件,对原始数据进行筛选,并使用软件集成的R,Python等工具生成图形报告,再用集成工具在服务器上进行运作,定期发送报告。
3. 具体实现过程
Bat script 提取最近两个月的文件:
@echo ON
xcopy /s /y "d:\event\log\log_201906*.zip" "C:\Users\sanmy\project\logs\"
xcopy /s /y "d:\event\log\log_201905*.zip" "C:\Users\sanmy\project\logs\"
Python 进行zip 解压
deffile_name(file_dir):
L=[]
forroot, dirs, filesinos.walk(file_dir):
forfileinfiles:
ifos.path.splitext(file)[1]=='.zip':
L.append(os.path.join(root, file))
return L
file_dirs=r'C:\Users\sanmy\project\logs\'
t=file_name(file_dirs)for i in t: x=i[:-3]+'csv'
for i in t:
myzip=ZipFile(i) #print(myzip) #print(my_file)
f=myzip.open(i[13:-3]+'csv')
ile=pd.read_csv(f) # name file link to get_data() function
get_data()
使用pandas 进行数据提取(此处代码省略……)
def get_data():
……
……
log=file[['MC','A','action','time','year','month','day','times','dates','Fail']]
log.to_csv(r'.\logs.csv',mode='a')
4. 报告整理并发送邮件
最后将提取出来的数据进行分析整理,图形话,并生成图形文件,通过软件发送邮件给相关人员。
5. 结果与报告
此图为excel制作而成,数据是杜撰出来的,仅仅作为一个示例。而实际上生成了很多个图文报告的。
如图可以看出机器MC1 的报废率是最差的,可能是机器出现了问题。
总结:
在这个项目的实现过程中遇到了很多之前没有遇到过的问,比如文件的复制方法,因为在同一个文件夹下面还有很多其他名字的文件以及不同文件类型的文件,最后使用bat脚本实现也算是基本满足了需求,但是过一段时间之后又需要去更改copy文件的时间戳。python 在公司数据库处理软件上的支持情况不太清楚,后来询问了很多人最后才得以实现。对于数据库软件上集成的R语言生成的图片报告,在排序的时候也遇到问题,始终不是以数据量的大小来排序的,而是以X坐标轴来排序,最后自己慢慢尝试才琢磨出来。
虽然这不是一个很大的项目,但是前前后后花费了差不多3个月的时间。主要是在工作之余的时间来做的,但是对我自己来说也是收获颇多。主要花费时间在使用pandas 处理csv文件的时候,虽然这个地方的代码只有两百多行,但是里面涉及到了很多的基础知识以及以前没有使用过的新知识。
还有个地方就是将所有这些需要实现的功能部署到服务器上去,因为运行的环境,配置不同,在调试的时候花费了很多时间,同时也遇到很多雷区。不过这些经过耐心的学习与请教,都一一搞定。
最曲折的是一个地方是数据源本来有一个已经整理好的JMP(不知道JMP 的可以去百度)的文件,这个文件本身可以直接制作图形,但是缺点就是公司数据库软件不直接支持,需要将JMP 转换成csv文件。后来尝试了下使用JMP 的jsl脚本在server上运行,实现转换然后再使用公司数据库软件进行分析,最后也实现了相同的功能。但是刚刚实现没几天,公司不维护这个JMP 文件了,所有又折腾回来。
最终程序每天早晨8点定时运行,并且定时将报告发送给相关人员。对有问题的机器或者其他一些指标进行监控,发现异常及时采取行动,提高产品良品率,同时降低维护成本。