当前位置: 首页 > article >正文

关于测试用例的写法

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

模板template.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

# 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

- 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: 提交取消按钮


http://www.kler.cn/news/359280.html

相关文章:

  • 云原生-降本增效最佳案例分享-学习笔记
  • WEB前端作业1
  • GO语言指针有那些限制
  • QT sql驱动错误QMYSQL driver not loaded
  • 离线安装bitnami-gitlab8.8.4+汉化
  • Linux第一讲:Linux基本指令
  • Vue - Element 选择器 el-select 既可以选择下拉又可以手动输入文本功能(手动输入的值只能是数字 并且支持4位小数)
  • Python单个数值字符串转化成时间戳
  • Unity水体交互
  • C++之《剑指offer》学习记录(5):数组中重复的数
  • MySQL 设计数据表
  • Android 中获取和读取短信验证码
  • es索引库操作和使用RestHignLevelClient客户端操作es
  • 家用wifi的ip地址固定吗?换wifi就是换ip地址吗
  • 【Linux】了解pthread线程库,清楚并没有线程创建接口,明白Linux并不存在真正意义的线程(附带模型图详解析)
  • 属于Navicat的时代落幕了
  • 如何使用xlnt创建多个sheet并写入内容后保存?
  • 即时通讯代码优化
  • Mybatis框架用到了哪些设计模式?
  • LeetCode --- 419周赛