数据处理---4.文件信息解析

禅道BUG信息解析处理

1. 根据列名获取列数
# 获取字段对应的行数值:可以自行添加
    def getRowNo(self):
        global projectID, Severity, bugStatus, toAssigned, Resolver, resolverMethod, createTime
        for i in range(len(self.data[0])):
            if self.data[0][i] == "所属项目":
                projectID = i
            elif self.data[0][i] == "严重程度":
                Severity = i
            elif self.data[0][i] == "Bug状态":
                bugStatus = i
            elif self.data[0][i] == "指派给":
                toAssigned = i
            elif self.data[0][i] == "解决者":
                Resolver = i
            elif self.data[0][i] == "解决方案":
                resolverMethod = i
            elif self.data[0][i] == "创建日期":
                createTime = i
        return projectID, Severity, bugStatus, toAssigned, Resolver, resolverMethod, createTime
return:返回值相当于一个list, 可以根据下标取值(self.getRowNo[i])
2. 读取配置信息
# 根据配置文件获取项目名称和开发人员名称
def getProjectInfo(self):
    projectKeyList, projectValueList = [], []
    for key, value in self.Project.items():
        projectKeyList.append(key)
        projectValueList.append(value)
    return projectKeyList, projectValueList
3.对于信息进行过滤,提取有效的bug信息
# 获取对应项目的数据信息
    def getVersionData(self):
        # 1. 根据项目名称和版本好筛选出对应bug信息    2.取出无效的bug
        projectDataList = []
        reason = ["设计如此", "重复Bug", "外部原因"]
        for projectKey in self.getProjectInfo()[0]:
            for projectData in self.data:
                # 通过判断版本号来进行删选
                if (projectKey+config_info.get_Version()) in projectData[self.getRowNo()[0]]:
                    # 剔除reason = ["设计如此", "重复Bug", "外部原因"]的bug记录
                    if projectData[self.getRowNo()[5]] not in reason:
                        projectDataList.append(projectData)
        return projectDataList
self.data:读取到的CSV文件信息
4.每个端的bug数量:可以体现对比版本迭代质量
# 获取各个项目bug总数
    def clientBugCount(self, client=None):
    """
    client:可以从projectKeyList中循环取出
    """
        List = []
        VersionData = self.getVersionData()
        for data in VersionData:
            if client in data[self.getRowNo()[0]]:
                List.append(data)
        return List
5.BUG创建时间列表:通过读取getVersionData数据逐行进行判断和添加
    def createTimeList(self):
        createTimeList = []
        versionData = self.getVersionData()
        for eveDate in versionData:
            # 判断各端BUG列表是否为空
            if eveDate is []:
                print("获取的数据为空")
            else:
                # 判断时间是否在createTimeList,是:不操作    否:执行添加
                if eveDate[self.getRowNo()[6]] not in createTimeList:
                    createTimeList.append(eveDate[self.getRowNo()[6]])
        createTimeList.sort()  # 升序排列
        return createTimeList
6.最终需要保存的文件格式
   # 存储格式:dict
    def saveDataDict(self):
        projectKeyList = config_info.get_Project().keys()
        dataDict = {}
        for createTime in self.createTimeList():
            dataDict[createTime] = {}
            for projectKey in projectKeyList:
                dataDict[createTime][projectKey] = {}
                for projectValue in config_info.get_Project()[projectKey]:
                    dataDict[createTime][projectKey][projectValue] = 0
        return dataDict
格式如下:
{dateTime1:{project1:{devName1:[number],{devName2:[number]},{project2:{devName1:[number],{devName2:[number]}},dateTime2:{project1:{devName1:[number],{devName2:[number]},{project2:{devName1:[number],{devName2:[number]}}}
7. 先处理每天的BUG并依据项目进行划分
   #  每天的生成的bug数量,按照每个段进行分类
    def eveDataList(self):
        projectKeyList = self.getProjectInfo()[0]
        eveData = {}
        versionData = self.getVersionData()
        for createTime in self.createTimeList():
            eveData[createTime] = {}
            for projectKey in projectKeyList:
                eveData[createTime][projectKey] = []
                for eveDate in versionData:
                    if eveDate[self.getRowNo()[6]] == createTime:
                        if (projectKey + config_info.get_Version()) in eveDate[self.getRowNo()[0]]:
                            eveData[createTime][projectKey].append(eveDate)
        return eveData
8. dataDict中添加每个开发人员对应的bug数量
       def countClientBug(self):
        """
        # eveData[createTime] : 每天的bug统计
        # eveData[createTime][projectKey] : 各个端的bug
        :return:
        """
        eveData = self.eveDataList()
        saveDataDict = self.saveDataDict()
        # 循环去数据:数据格式可能为[[]]
        for createTime in self.createTimeList():
            for projectKey in config_info.get_Project().keys():
                if not eveData[createTime][projectKey]:
                    for projectValue in config_info.get_Project()[projectKey]:
                        saveDataDict[createTime][projectKey][projectValue] = 0
                else:
                    eveClientBugList = eveData[createTime][projectKey]
                    # print(eveClientBugList)
                    for eveClientBug in eveClientBugList:
                    	# bug状态为激活:指派给谁进行判断
                        if eveClientBug[self.getRowNo()[2]] == "激活":
                        	# 如何开发人员不在dataDict[createTime][projectKey]的keys中则,添加该key对应的value=1
                            if eveClientBug[self.getRowNo()[3]] not in saveDataDict[createTime][projectKey].keys():
                                saveDataDict[createTime][projectKey][eveClientBug[self.getRowNo()[3]]] = 1
                            # 如果开发人员在dataDict[createTime][projectKey]的keys中,则需要在对应的value+1
                            else:
                                num = saveDataDict[createTime][projectKey][eveClientBug[self.getRowNo()[3]]]
                                saveDataDict[createTime][projectKey][eveClientBug[self.getRowNo()[3]]] = num + 1
                        # bug状态为激活:解决者为谁进行判断
                        elif eveClientBug[self.getRowNo()[2]] == "已解决" or eveClientBug[self.getRowNo()[2]] == "已关闭":
                            # print(createTime, projectKey, eveClientBug[self.getRowNo()[4]])
                            if eveClientBug[self.getRowNo()[4]] not in saveDataDict[createTime][projectKey].keys():
                                saveDataDict[createTime][projectKey][eveClientBug[self.getRowNo()[4]]] = 1
                            else:
                                num = saveDataDict[createTime][projectKey][eveClientBug[self.getRowNo()[4]]]
                                saveDataDict[createTime][projectKey][eveClientBug[self.getRowNo()[4]]] = num + 1
        return saveDataDict
saveDataDict与dataDict格式不变,只是在dataDict的基础上对devName的value值进行了填充
9. 拓展信息:统计激活/解决/关闭状态下的bug数量
    # 统计所有的bug状态下数据统计
    def BugSum(self):
        openListName, resolveListName, closeListName = [], [], []
        versionData = self.getVersionData()
        # 激活状态下:openList

        print("------------激活状态下Bug统计-------------")
        for openData in versionData:
            if openData[self.getRowNo()[2]] == "激活":
                openListName.append(openData[self.getRowNo()[3]])
        # print(openListName)
        opensSet = set(openListName)
        for item in opensSet:
            print(" %s :拥有bug %d" % (item, openListName.count(item)))

        # 解决状态下数据统计
        print("------------解决状态下Bug统计-------------")
        for resolveDate in versionData:
            if resolveDate[self.getRowNo()[2]] == "已解决":
                resolveListName.append(resolveDate[self.getRowNo()[4]])
        # print(resolveListName)
        opensSet = set(resolveListName)
        for item in opensSet:
            print(" %s :拥有bug %d" % (item, resolveListName.count(item)))

        # 关闭状态下数据统计
        print("------------关闭状态下Bug统计-------------")
        for closeDate in versionData:
            # 需要判断解决方案
            if closeDate[self.getRowNo()[2]] == "已关闭":
                closeListName.append(closeDate[self.getRowNo()[4]])
        # print(closeListName)
        opensSet = set(closeListName)
        for item in opensSet:
            print(" %s :拥有bug %d" % (item, closeListName.count(item)))
        count = "共计BUG: "+"激活-"+str(len(openListName))+".已解决-"+ str(len(resolveListName))+".已关闭-"+str(len(closeListName))
        return count

以上信息仅供参考,小白一枚,还在前进的道路上匍匐爬行,如果新的方法和工具,可以在下方进行留言

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值