关于测试用例的写法

最近公司有个新项目,需要写测试用例,表单项有点多,一个表单都有40个字段左右,若写用例得400条左右,大部分都是重复的项,在此写个小程序,批量生成测试用例

需要注意的是本程序只使用于表单内容

模板template.yaml

上面几个是变量,按需求填写

yaml 复制代码
#input_data: 输入框数据
#index: 步骤序号
#field_name: 输入框名称
#max_length: 最大长度
#min_length: 最小长度
#data_source: 数据来源
#file_max_size: 附件最大大小
#file_min_size: 附件最小大小
#file_format: 附件格式
#file_count: 附件数量
普通输入框:
  必填步骤:
    - 重要级别: 高
      输入数据: ${input_data}
      执行步骤: ${index}.输入${field_name}为空值
      预期输出: 输入框${field_name}输入为空值,提示:不能为空,重新输入
      测试结果:
      测试人:
      备注:
  步骤:
    - 重要级别: 高
      输入数据: ${input_data}
      执行步骤: ${index}.输入正确的${field_name}
      预期输出: 输入框${field_name}输入正确,转到下一步(步骤${next_index})判断
      测试结果:
      测试人:
      备注:
    - 重要级别: 高
      输入数据: ${input_data}
      执行步骤: ${index}.不输入${field_name}
      预期输出: 输入框${field_name}输入为空值,提示:不能为空,重新输入
      测试结果:
      测试人:
      备注:
    - 重要级别: 中
      输入数据: ${input_data}
      执行步骤: ${index}.输入错误的${field_name}
      预期输出: 输入框${field_name}输入错误,提示:请重新输入
      测试结果:
      测试人:
      备注:
    - 重要级别: 中
      输入数据: ${input_data}
      执行步骤: ${index}.${field_name}最大长度为${max_length}
      预期输出: 输入框${field_name}输入长度超过最大值,提示:长度不能超过${max_length}
      测试结果:
      测试人:
      备注:
    - 重要级别: 中
      输入数据: ${input_data}
      执行步骤: ${index}.${field_name}最小长度为${min_length}
      预期输出: 输入框${field_name}输入长度小于最小值,提示:长度不能小于${min_length}
      测试结果:
      测试人:
      备注:
    - 重要级别: 中
      输入数据: ${input_data}
      执行步骤: ${index}.输入${field_name}超过最大长度
      预期输出: 输入框${field_name}输入长度超过最大值
      测试结果:
      测试人:
      备注:
    - 重要级别: 中
      输入数据: ${input_data}
      执行步骤: ${index}.输入${field_name}超过最小长度
      预期输出: 输入框${field_name}输入长度小于最小值
      测试结果:
      测试人:
      备注:
    - 重要级别: 低
      输入数据: ${input_data}
      执行步骤: ${index}.输入${field_name}包含数字
      预期输出: 输入框${field_name}输入包含数字
      测试结果:
      测试人:
      备注:
    - 重要级别: 低
      输入数据: ${input_data}
      执行步骤: ${index}.输入${field_name}包含字母
      预期输出: 输入框${field_name}输入包含字母
      测试结果:
      测试人:
      备注:
    - 重要级别: 低
      输入数据: ${input_data}
      执行步骤: ${index}.输入${field_name}包含特殊字符
      预期输出: 输入框${field_name}输入包含特殊字符
      测试结果:
      测试人:
      备注:
    - 重要级别: 低
      输入数据: ${input_data}
      执行步骤: ${index}.输入${field_name}包含中文字符
      预期输出: 输入框${field_name}输入包含中文字符
      测试结果:
      测试人:
      备注:
    - 重要级别: 低
      输入数据: ${input_data}
      执行步骤: ${index}.输入${field_name}包含英文字符
      预期输出: 输入框${field_name}输入包含英文字符
      测试结果:
      测试人:
      备注:
    - 重要级别: 低
      输入数据: ${input_data}
      执行步骤: ${index}.输入${field_name}包含数字和字母
      预期输出: 输入框${field_name}输入包含数字和字母
      测试结果:
      测试人:
      备注:
    - 重要级别: 低
      输入数据: ${input_data}
      执行步骤: ${index}.输入${field_name}包含数字和特殊字符
      预期输出: 输入框${field_name}输入包含数字和特殊字符
      测试结果:
      测试人:
      备注:
    - 重要级别: 低
      输入数据: ${input_data}
      执行步骤: ${index}.输入${field_name}包含字母和特殊字符
      预期输出: 输入框${field_name}输入包含字母和特殊字符
      测试结果:
      测试人:
      备注:
    - 重要级别: 低
      输入数据: ${input_data}
      执行步骤: ${index}.输入${field_name}包含数字和中文字符
      预期输出: 输入框${field_name}输入包含数字和中文字符
      测试结果:
      测试人:
      备注:
    - 重要级别: 低
      输入数据: ${input_data}
      执行步骤: ${index}.输入${field_name}包含字母和中文字符
      预期输出: 输入框${field_name}输入包含字母和中文字符
      测试结果:
      测试人:
      备注:
    - 重要级别: 低
      输入数据: ${input_data}
      执行步骤: ${index}.输入${field_name}包含特殊字符和中文字符
      预期输出: 输入框${field_name}输入包含特殊字符和中文字符
      测试结果:
      测试人:
      备注:
    - 重要级别: 低
      输入数据: ${input_data}
      执行步骤: ${index}.输入${field_name}包含数字、字母和特殊字符
      预期输出: 输入框${field_name}输入包含数字、字母和特殊字符
      测试结果:
      测试人:
      备注:
    - 重要级别: 低
      输入数据: ${input_data}
      执行步骤: ${index}.输入${field_name}包含数字、字母和中文字符
      预期输出: 输入框${field_name}输入包含数字、字母和中文字符
      测试结果:
      测试人:
      备注:
    - 重要级别: 低
      输入数据: ${input_data}
      执行步骤: ${index}.输入${field_name}包含字母、特殊字符和中文字符
      预期输出: 输入框${field_name}输入包含字母、特殊字符和中文字符
      测试结果:
      测试人:
      备注:
    - 重要级别: 低
      输入数据: ${input_data}
      执行步骤: ${index}.输入${field_name}包含数字、特殊字符和中文字符
      预期输出: 输入框${field_name}输入包含数字、特殊字符和中文字符
      测试结果:
      测试人:
      备注:
    - 重要级别: 低
      输入数据: ${input_data}
      执行步骤: ${index}.输入${field_name}包含数字、字母、特殊字符和中文字符
      预期输出: 输入框${field_name}输入包含数字、字母、特殊字符和中文字符
      测试结果:
      测试人:
      备注:
    - 重要级别: 中
      输入数据: ${input_data}
      执行步骤: ${index}.输入${field_name}包含数字、字母、特殊字符、中文字符、空格
      预期输出: 输入框${field_name}输入包含数字、字母、特殊字符、中文字符、空格
      测试结果:
      测试人:
      备注:
    - 重要级别: 高
      输入数据: ${input_data}
      执行步骤: ${index}.输入${field_name}不符合格式要求
      预期输出: 输入框${field_name}输入不符合格式要求
      测试结果:
      测试人:
      备注:
    - 重要级别: 高
      输入数据: ${input_data}
      执行步骤: ${index}.输入${field_name}符合格式要求
      预期输出: 输入框${field_name}输入符合格式要求
      测试结果:
      测试人:
      备注:
    - 重要级别: 高
      输入数据: ${input_data}
      执行步骤: ${index}.输入${field_name}符合业务规则要求
      预期输出: 输入框${field_name}输入符合业务规则要求
      测试结果:
      测试人:
      备注:
    - 重要级别: 高
      输入数据: ${input_data}
      执行步骤: ${index}.输入${field_name}不符合业务规则要求
      预期输出: 输入框${field_name}输入不符合业务规则要求
      测试结果:
      测试人:
      备注:
选择框:
  必填步骤:
    - 重要级别: 高
      输入数据: ${input_data}
      执行步骤: ${index}.不选择${field_name}
      预期输出: 选择框${field_name}未选择,提示:请选择
      测试结果:
      测试人:
      备注:
    - 重要级别: 中
      输入数据: ${input_data}
      执行步骤: ${index}.选择${field_name}为空值
      预期输出: 选择框${field_name}选择为空值,提示:请选择
      测试结果:
      测试人:
      备注:
  步骤:
    - 重要级别: 高
      输入数据: ${input_data}
      执行步骤: ${index}.选择${field_name}
      预期输出: 选择框${field_name}选择正确,转到下一步(步骤${next_index})判断
      测试结果:
      测试人:
      备注:
    - 重要级别: 高
      输入数据: ${input_data}
      执行步骤: 查看数据来源
      预期输出: 数据来源于${data_source}
      测试结果:
      测试人:
      备注:
手机号输入框:
  必填步骤:
    - 重要级别: 高
      输入数据: ${input_data}
      执行步骤: ${index}.输入${field_name}为空值
      预期输出: 手机号输入框${field_name}输入为空值,提示:不能为空,重新输入
      测试结果:
      测试人:
      备注:
  步骤:
    - 重要级别: 高
      输入数据: ${input_data}
      执行步骤: ${index}.输入正确的${field_name}
      预期输出: 手机号输入框${field_name}输入正确,转到下一步(步骤${next_index})判断
      测试结果:
      测试人:
      备注:
    - 重要级别: 中
      输入数据: ${input_data}
      执行步骤: ${index}.输入错误的${field_name}
      预期输出: 手机号输入框${field_name}输入错误,提示:手机号格式不正确
      测试结果:
      测试人:
      备注:
    - 重要级别: 中
      输入数据: ${input_data}
      执行步骤: ${index}.输入${field_name}不符合手机号格式
      预期输出: 手机号输入框${field_name}输入不符合手机号格式,提示:请输入正确的手机号
      测试结果:
      测试人:
      备注:
    - 重要级别: 中
      输入数据: ${input_data}
      执行步骤: ${index}.${field_name}最大长度为${max_length}
      预期输出: 输入框${field_name}输入长度超过最大值,提示:长度不能超过${max_length}
      测试结果:
      测试人:
      备注:
    - 重要级别: 中
      输入数据: ${input_data}
      执行步骤: ${index}.${field_name}最小长度为${min_length}
      预期输出: 输入框${field_name}输入长度小于最小值,提示:长度不能小于${min_length}
      测试结果:
      测试人:
      备注:
    - 重要级别: 中
      输入数据: ${input_data}
      执行步骤: ${index}.输入${field_name}超过最大长度
      预期输出: 手机号输入框${field_name}输入长度超过最大值
      测试结果:
      测试人:
      备注:
    - 重要级别: 中
      输入数据: ${input_data}
      执行步骤: ${index}.输入${field_name}超过最小长度
      预期输出: 手机号输入框${field_name}输入长度小于最小值
      测试结果:
      测试人:
      备注:
    - 重要级别: 低
      输入数据: ${input_data}
      执行步骤: ${index}.输入${field_name}包含数字
      预期输出: 手机号输入框${field_name}输入包含数字,输入成功
      测试结果:
      测试人:
      备注:
    - 重要级别: 低
      输入数据: ${input_data}
      执行步骤: ${index}.输入${field_name}包含字母
      预期输出: 手机号输入框${field_name}输入包含字母,字母无法数据
      测试结果:
      测试人:
      备注:
    - 重要级别: 低
      输入数据: ${input_data}
      执行步骤: ${index}.输入${field_name}包含特殊字符
      预期输出: 手机号输入框${field_name}输入包含特殊字符,特殊字符无法数据
      测试结果:
      测试人:
      备注:
    - 重要级别: 低
      输入数据: ${input_data}
      执行步骤: ${index}.输入${field_name}包含中文字符
      预期输出: 手机号输入框${field_name}输入包含中文字符,中文字符无法数据
      测试结果:
      测试人:
      备注:
邮箱输入框:
  必填步骤:
    - 重要级别: 高
      输入数据: ${input_data}
      执行步骤: ${index}.输入${field_name}为空值
      预期输出: 邮箱输入框${field_name}输入为空值,提示:不能为空,重新输入
      测试结果:
      测试人:
      备注:
  步骤:
    - 重要级别: 高
      输入数据: ${input_data}
      执行步骤: ${index}.输入正确的${field_name}
      预期输出: 邮箱输入框${field_name}输入正确,转到下一步(步骤${next_index})判断
      测试结果:
      测试人:
      备注:
    - 重要级别: 中
      输入数据: ${input_data}
      执行步骤: ${index}.输入错误的${field_name}
      预期输出: 邮箱输入框${field_name}输入错误,提示:邮箱格式不正确
      测试结果:
      测试人:
      备注:
    - 重要级别: 低
      输入数据: ${input_data}
      执行步骤: ${index}.输入${field_name}不符合邮箱格式
      预期输出: 邮箱输入框${field_name}输入不符合邮箱格式,提示:请输入正确的邮箱
      测试结果:
      测试人:
      备注:
附件上传:
  必填步骤:
    - 重要级别: 高
      输入数据: ${input_data}
      执行步骤: ${index}.上传${field_name}为空值
      预期输出: 附件上传框${field_name}上传失败,提示:请上传附件
      测试结果:
      测试人:
      备注:
  步骤:
    - 重要级别: 高
      输入数据: ${input_data}
      执行步骤: ${index}.上传${field_name}
      预期输出: 附件上传框${field_name}上传成功,转到下一步(步骤${next_index})判断
      测试结果:
      测试人:
      备注:
    - 重要级别: 低
      输入数据: ${input_data}
      执行步骤: ${index}.上传${field_name}超过最大大小
      预期输出: 附件上传框${field_name}上传失败,提示:附件大小不能超过${file_max_size}
      测试结果:
      测试人:
      备注:
    - 重要级别: 低
      输入数据: ${input_data}
      执行步骤: ${index}.上传${field_name}超过最小大小
      预期输出: 附件上传框${field_name}上传失败,提示:附件大小不能小于${file_min_size}
      测试结果:
      测试人:
      备注:
    - 重要级别: 低
      输入数据: ${input_data}
      执行步骤: ${index}.上传${field_name}不符合格式要求
      预期输出: 附件上传框${field_name}上传失败,提示:附件格式不符合要求
      测试结果:
      测试人:
      备注:
    - 重要级别: 高
      输入数据: ${input_data}
      执行步骤: ${index}.上传${field_name}不是${file_format}
      预期输出: 无法上传不是${file_format}格式的文件,提示:请上传${file_format}格式的文件
      测试结果:
      测试人:
      备注:
    - 重要级别: 中
      输入数据: ${input_data}
      执行步骤: ${index}.${field_name},附件格式限制
      预期输出: 附件上传框${field_name}只能上传${file_format}格式的文件
      测试结果:
      测试人:
      备注:
    - 重要级别: 中
      输入数据: ${input_data}
      执行步骤: ${index}.上传${field_name},附件大小限制
      预期输出: 附件上传框${field_name}只能上传${file_min_size}-${file_max_size}的文件
      测试结果:
      测试人:
      备注:
    - 重要级别: 高
      输入数据: ${input_data}
      执行步骤: ${index}.上传${field_name},附件数量限制
      预期输出: 附件上传框${field_name}只能上传${file_count}个文件,超过限制后提示:只能上传${file_count}个文件
      测试结果:
      测试人:
      备注:
时间选择器:
  必填步骤:
    - 重要级别: 中
      输入数据:
      执行步骤: ${index}.选择${field_name}为空值
      预期输出: 时间选择器${field_name}未选择,提示:请选择
      测试结果:
      测试人:
      备注:
  步骤:
    - 重要级别: 高
      输入数据:
      执行步骤: ${index}.选择${field_name}
      预期输出: 时间选择器${field_name}选择正确,转到下一步(步骤${next_index})判断
      测试结果:
      测试人:
      备注:
    - 重要级别: 中
      输入数据:
      执行步骤: ${index}.选择${field_name}不符合格式要求
      预期输出: 时间选择器${field_name}选择不符合格式要求,提示:请选择正确的日期
      测试结果:
      测试人:
      备注:
    - 重要级别: 中
      输入数据:
      执行步骤: ${index}.选择${field_name}超过最大日期
      预期输出: 时间选择器${field_name}选择日期超过最大日期,提示:请选择正确的日期
      测试结果:
      测试人:
      备注:
    - 重要级别: 中
      输入数据:
      执行步骤: ${index}.选择${field_name}超过最小日期
      预期输出: 时间选择器${field_name}选择日期超过最小日期,提示:请选择正确的日期
      测试结果:
      测试人:
      备注:
地图坐标选择器:
  必填步骤:
    - 重要级别: 中
      输入数据:
      执行步骤: ${index}.选择${field_name}为空值
      预期输出: 地图坐标选择器${field_name}未选择,提示:请选择
      测试结果:
      测试人:
      备注:
  步骤:
    - 重要级别: 中
      输入数据:
      执行步骤: ${index}.选择正确的${field_name}
      预期输出: 地图坐标选择器${field_name}选择正确,页面显示经纬度坐标,转到下一步(步骤${next_index})判断
      测试结果:
      测试人:
      备注:
    - 重要级别: 中
      输入数据:
      执行步骤: ${index}.选择不正确的${field_name}
      预期输出: 地图坐标选择器${field_name}选择不正确,提示:请选择正确的坐标
      测试结果:
      测试人:
      备注:
提交确定按钮:
  步骤:
    - 重要级别: 高
      输入数据:
      执行步骤: ${index}.点击确定按钮
      预期输出: 点击确定按钮,提交表单,并在表单中显示
      测试结果:
      测试人:
      备注:
提交取消按钮:
  步骤:
    - 重要级别: 中
      输入数据:
      执行步骤: ${index}.点击取消按钮
      预期输出: 点击取消按钮,关闭表单,不提交表单
      测试结果:
      测试人:
      备注:

程序case.py

python 复制代码
# coding: utf-8
import yaml
from pandas import DataFrame
from string import Template
from copy import deepcopy


def replaceTemplate(template_dict: dict, data_dict: dict):
    """
    替换模板中的变量
    :return:
    """
    data = deepcopy(template_dict)
    input_data = data.get('输入数据', '')
    step = data.get('执行步骤', '')
    expected_result = data.get('预期输出', '')
    if input_data is None:
        input_data = ''
    data.update(
        {
            '输入数据': Template(input_data).safe_substitute(data_dict),
            '执行步骤': Template(step).safe_substitute(data_dict),
            '预期输出': Template(expected_result).safe_substitute(data_dict)
        }
    )
    return data


if __name__ == '__main__':
    with open('template.yaml', 'r', encoding='utf-8') as fp:
        template = yaml.load(fp, Loader=yaml.FullLoader)
    with open('page.yaml', 'r', encoding='utf-8') as fp:
        page_fields = yaml.load(fp, Loader=yaml.FullLoader)
    # 遍历页面字段,生成用例
    cases = []

    for index, item in enumerate(page_fields):
        item: dict
        item['index'] = index + 1
        item['next_index'] = index + 2
        item['input_data'] = ''
        is_required = item.get('is_required', False)

        type_steps: dict = template[item['type']]
        steps = type_steps['步骤']
        if is_required:
            steps.extend(type_steps['必填步骤'])
        for step in steps:
            data = replaceTemplate(step, item)
            cases.append(data)

    # 生成数据
    data_frame = DataFrame(cases)
    data_frame.to_excel('cases.xlsx', index=False)

示例page.yaml

yaml 复制代码
- field_name: 队伍名称
  is_required: true
  max_length: '50'
  min_length: '1'
  type: 普通输入框
- field_name: 负责区域
  is_required: true
  max_length: '50'
  min_length: '1'
  type: 普通输入框
- field_name: 应急队长
  is_required: true
  max_length: '50'
  min_length: '1'
  type: 普通输入框
- field_name: 应急电话
  is_required: true
  type: 手机号输入框
- field_name: 所在位置
  max_length: '50'
  min_length: '1'
  type: 普通输入框
- field_name: 坐标定位
  is_required: true
  type: 地图坐标选择器
- field_name: 附件
  file_count: 10个
  file_format: .rar .zip .doc .docx .pdf
  file_max_size: 20M
  file_min_size: 0M
  type: 附件上传
- field_name: 确定
  type: 提交确定按钮
- field_name: 取消
  type: 提交取消按钮
相关推荐
测试老哥7 小时前
6个步骤实现Postman接口压力测试
自动化测试·软件测试·测试工具·测试用例·接口测试·压力测试·postman
北岛三生21 小时前
ISP(图像信号处理器)
图像处理·数码相机·测试工具·计算机视觉·测试用例·模块测试
c萱4 天前
软件测试错题笔记
软件测试·数据库·笔记·测试工具·oracle·测试用例
workflower4 天前
python代码Bug排查
测试用例·软件工程·需求分析·敏捷流程·结对编程
know__ledge4 天前
Python学习3.0使用Unittest框架运行测试用例
python·学习·测试用例
程序员小远6 天前
基于jmeter+perfmon的稳定性测试记录
自动化测试·软件测试·python·测试工具·jmeter·职场和发展·测试用例
workflower6 天前
架构描述语言Architecture frameworks and architecture description languages
测试用例·软件工程·需求分析·敏捷流程·结对编程
workflower6 天前
GitHub宕机自救指南
测试用例·需求分析·uml·敏捷流程·结对编程
天才测试猿7 天前
制定测试计划和测试用例
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例