今年一月份的时候,我的博客出了一版自动采集数据生成excel的脚本,其实节省了测试组的很多数据处理时间
https://blog.csdn.net/FBX_fbx_FBX/article/details/104051445
我觉得时间还可以再节省更多,就在工作之余又慢慢尝试多项改进,实现了99.99%的自动化--因为有每个人每天的进度变更,所以不可能实现完全自动化
说一下本次基于上次的变更
1.不再使用excel作为中间媒介,直接写成html
2.不再手动制图,使用matplotlib绘制
3.精简数据库存储内容,使用一张表存储历史统计数据
4.实现代码与配置分离
5.自动发送报告
优先看下配置文件properties.init
[Mysql]
host=192.168.11.111
port=3306
user=root
passwd=Z121zZ
db=test_report
# host 为redmine的地址,在浏览器查看接口参数就可以看到项目的其他参数
[Redmine]
host=http://2.2.8.8:19507
username=fengbingxue
pw=123456
project_name=3d-room
fixed_version_id=986
[Plan]
#start_time和end_time 数据库中取的数据的时间段
start_time = 2020-05-01
end_time = 2020-07-01
#以下三项配置,为测试计划的信息
test_time = 2019/2/12-2020/2/22
test_plan = http://2.2.8.8:19507/issues/67563
tester = 冯冰雪,冯冰雪,冯冰雪
主体部分:
导入以下三方库
from datetime import datetime
from redminelib import Redmine
import pymysql
import matplotlib.pyplot as plt
import configparser
引用配置文件内容
config = configparser.ConfigParser()
config.read("./properties.init")
config_mysql=config['Mysql']
config_Redmine=config['Redmine']
config_Plan=config['Plan']
文件分析模块部分,这一版加入了每日变动数据的读入(写在一起便于查找维护):
# 缺陷对应人员的数量及缺陷模块数量
def current_day():
resolve_user_list,module_list,all_user_list,march = [],[],[],[]
# test_rate edition
i = 0
with open('curren.txt', 'r', encoding='UTF-8') as file_current_read:
current_lines = file_current_read.readlines()
for line in current_lines:
i += 1
if i == 2: install_time = line
if i == 4: branch = line
if i == 6: git_log = line
if int(i) > 7:
line = line.split(',')
march.append(line)
test_edition=[install_time,branch,git_log]
# user
with open('user.txt', 'r',encoding='UTF-8') as file_user_read:
user_lines = file_user_read.readlines()
for user in user_lines:
n = 0
j = 0
for issue in issues:
if issue.assigned_to.name + '\n' == user:
j +=1
if issue.status.name == "已解决":
n += 1
resolve_user_list.append([user[:-1],n]) #已解决的人员分布
all_user_list.append([user[:-1],j])
# module
with open('module.txt', 'r', encoding='UTF-8') as file_module_read:
module_lines = file_module_read.readlines()
for module in module_lines:
n = 0
for issue in issues:
if issue.custom_fields._resources[2]['value'] + '\n' == module:
n += 1
module_list.append([module[:-1],n])
return resolve_user_list,module_list,all_user_list,march,test_edition
# current_day[0] 已解决人员对应# current_day[1] 模块对应# current_day[2] 人员对应 #current_day[3] 测试进度 #current_day[4] 版本信息
redmine数据分析模块没有变动(特别说明:在我所在项目组,我们把阻塞缺陷定义为重大+紧急,如果你不一样,你可以在以下代码,stop_list部分修改)
def analysis():
# 严重 grave 致命 deadly 紧急 urgent 已解决 resolved 超时 timeout 阻塞 stop
become_list,grave_list,stop_list = [],[],[] #退化缺陷 、重大、阻塞
new_num, become,grave_num, deadly_num, timeout_num,stop_num,resolved_all = 0,0,0, 0, 0, 0, 0
for issue in issues:
update_time = str(issue.updated_on.year) + "-" + str(issue.updated_on.month) + "-" + str(issue.updated_on.day)
updatetime_date = datetime.strptime(update_time, '%Y-%m-%d')
today_date = datetime.strptime(today, '%Y-%m-%d')
delta = today_date - updatetime_date
if delta.days >= 7: timeout_num += 1
if issue.custom_fields._resources[0]['value'] == "重大" or issue.custom_fields._resources[0]['value'] == "致命": deadly_num += 1
if issue.custom_fields._resources[3]['value'] == '1':
become += 1
become_list.append([become,issue.assigned_to.name, issue.id,issue.subject])
if issue.custom_fields._resources[0]['value'] == "重大" and issue.priority['name'] == "紧急":
stop_num += 1
stop_list.append([stop_num,issue.assigned_to.name, issue.id,issue.subject])
if issue.status.name == "已解决": resolved_all += 1
create_time = str(issue.created_on.year) + "-" + str(issue.created_on.month) + "-" + str(issue.created_on.day)
if create_time == today:
new_num += 1
if issue.custom_fields._resources[0]['value'] == "重大":
grave_num +