测试工程师工作实战演练二 - 课程贴

需求分析

  • 确定测试范围
  • 细化测试点
  • 确定测试方法

测试设计

测试用例要素

用例编号、模块、测试标题、前提条件、操作步骤、期望结果、实际结果

测试用例设计步骤

  1. 划分功能模块
  2. 正向功能验证
  3. 单个功能项验证
  4. 功能之间交互验证
  5. 隐形需求

xmind 快捷键

  • tab:新建子主题
  • enter:新建兄弟主题,插入当前主题的后面
  • shift + enter:新建兄弟主题,插入当前主题的前面

xmind 转化为 csv

from xmindparser import xmind_to_dict
import csv
import logging
import logging.handlers
from logging.handlers import TimedRotatingFileHandler
from datetime import datetime


class XmindToCsv():

    def my_log(self):
        '''创建对象的类方法'''
        # 创建日志搜集器
        mylog = logging.getLogger('mylog')
        mylog.setLevel('DEBUG')
        # 创建日志输出渠道
        sh = logging.StreamHandler()
        sh.setLevel('INFO')
        # 按时间进行轮转的收集器
        file_name = datetime.now().strftime("%Y-%m-%d") + '.log'
        fh = TimedRotatingFileHandler(file_name, encoding='utf8', when='h', interval=24, backupCount=3)
        fh.setLevel('DEBUG')
        # 将日志输出渠道和日志收集器进行绑定
        mylog.addHandler(fh)
        mylog.addHandler(sh)
        # 设置日志输出格式
        fot = '%(asctime)s-[%(filename)s-->line:%(lineno)d]-%(message)s'
        formatter = logging.Formatter(fot)
        # 将日志输出格式与输出渠道进行绑定
        sh.setFormatter(formatter)
        fh.setFormatter(formatter)
        return mylog

    def topics_num(self, value):
        """获取xmind标题个数"""
        try:
            return len(value['topics'])
        except KeyError:
            return 0

    def xmind_title(self, value):
        """获取xmind标题内容"""
        return value['title']

    def write_csv(self, filename, case):
        '''写入csv文件,case为列表'''
        headers = ["模块", "测试标题", "测试步骤", "预期结果"]

        with open(filename, 'w')as f:
            f_csv = csv.writer(f)
            f_csv.writerow(headers)
            f_csv.writerows(case)
        print("success!")

    def read_xmind(self, filename):
        '''读取xmind内容,返回case列表'''

        # xmind内容
        xmind_content = xmind_to_dict(filename)[0]['topic']
        # 模块内容
        module_name = self.xmind_title(xmind_content)
        # 二级模块的数量
        module_num = self.topics_num(xmind_content)
        # 用例列表
        case_list = []

        for i in range(module_num):
            case_num = self.topics_num(xmind_content['topics'][i])
            if case_num == 0:
                print(f'第{i + 1}个功能模块下,测试的功能点数量为0,请确认用例是否编写完成')
                self.my_log().debug(f'第{i + 1}个功能模块下,测试的功能点数量为0,请确认用例是否编写完成')
            else:
                tag = self.xmind_title(xmind_content['topics'][i])
                case_point_num = self.topics_num(xmind_content['topics'][i])
                for j in range(case_point_num):
                    case = []
                    if case_point_num == 0:
                        print(f"error")
                    else:
                        case_point = self.xmind_title(xmind_content['topics'][i]['topics'][j])
                        case_step = self.xmind_title(xmind_content['topics'][i]['topics'][j]['topics'][0])
                        expected_result = self.xmind_title(xmind_content['topics'][i]['topics'][j]['topics'][0]['topics'][0])
                        case_title = "【" + tag + "】" + case_point
                        case.append(module_name)
                        case.append(case_title)
                        case.append(case_step)
                        case.append(expected_result)
                        case_list.append(case)
        return case_list

    def main(self, csv_file, xmind_file):
        case_list = self.read_xmind(xmind_file)
        self.write_csv(csv_file, case_list)

if __name__ == '__main__':
    xmind_file = "/Users/mac/Desktop/发帖.xmind"
    csv_file = "/Users/mac/Desktop/发帖.csv"
    XmindToCsv().main(csv_file, xmind_file)

测试执行

Bug 包含的内容

  • Bug 标题
  • Bug 复现步骤
  • Bug 严重程度
  • Bug 优先级
  • 预期结果
  • 实际结果
  • 测试环境
  • 截图,log 日志

测试总结

  • 测试数据统计汇总
  • 测试用例统计分析
  • 缺陷统计分析
  • 残留缺陷汇总
  • 测试结论