关于测试用例的写法

最近公司有个新项目,需要写测试用例,表单项有点多,一个表单都有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: 提交取消按钮
相关推荐
测试杂货铺2 小时前
UI自动化测试实战实例
自动化测试·软件测试·python·selenium·测试工具·测试用例·pytest
互联网杂货铺7 小时前
单元测试/系统测试/集成测试知识总结
自动化测试·软件测试·测试工具·职场和发展·单元测试·测试用例·集成测试
测试者家园12 小时前
ChatGPT生成接口文档实践案例(二)
软件测试·chatgpt·llm·测试用例·测试图书·质量效能·用chatgpt做测试
测试杂货铺1 天前
Jmeter压测实战:Jmeter二次开发之自定义函数
自动化测试·软件测试·测试工具·jmeter·职场和发展·测试用例·压力测试
互联网杂货铺2 天前
Postman接口测试:全局变量/接口关联/加密/解密
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·postman
字节程序员2 天前
接口自动化测试实战经验分享,测试用例也能自动生成
数据库·测试用例·压力测试
北陌宝宝2 天前
软件测试工程师撰写优质测试用例的秘籍
测试用例
测试者家园3 天前
ChatGPT生成接口文档的方法与实践
软件测试·chatgpt·测试用例·接口测试·接口文档·ai赋能·用chatgpt做软件测试
测试老哥4 天前
Python自动化测试图片比对算法
自动化测试·软件测试·python·测试工具·程序人生·职场和发展·测试用例