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

关于测试用例的写法

最近公司有个新项目,需要写测试用例,表单项有点多,一个表单都有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 deepcopydef replaceTemplate(template_dict: dict, data_dict: dict):"""替换模板中的变量:return:"""if isinstance(template_dict, list):for i in template_dict:replaceTemplate(i, data_dict)else:for key, value in template_dict.items():if isinstance(value, str):template_dict[key] = Template(value).safe_substitute(data_dict)elif isinstance(value, dict):replaceTemplate(value, data_dict)elif isinstance(value, list):for v in value:replaceTemplate(v, data_dict)return template_dictwith 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: dictitem['index'] = index + 1item['next_index'] = index + 2item['input_data'] = ''is_required = item.get('is_required', False)all_steps: dict = template[item['type']]steps = replaceTemplate(deepcopy(all_steps['步骤']), item)cases.extend(replaceTemplate(deepcopy(all_steps['步骤']), item))if is_required:required_steps = replaceTemplate(all_steps['必填步骤'], item)cases.extend(required_steps)# for case in cases:
#     pass# with open('cases.json', 'w', encoding='utf-8') as fp:
#     json.dump(cases, fp, ensure_ascii=False, indent=4)# 生成数据
data_frame = DataFrame(cases)
data_frame.to_excel('cases.xlsx', index=False)

示例page.yaml

- field_name: 队伍名称is_required: truemax_length: '50'min_length: '1'type: 普通输入框
- field_name: 负责区域is_required: truemax_length: '50'min_length: '1'type: 普通输入框
- field_name: 应急队长is_required: truemax_length: '50'min_length: '1'type: 普通输入框
- field_name: 应急电话is_required: truetype: 手机号输入框
- field_name: 所在位置max_length: '50'min_length: '1'type: 普通输入框
- field_name: 坐标定位is_required: truetype: 地图坐标选择器
- field_name: 附件file_count: 10个file_format: .rar .zip .doc .docx .pdffile_max_size: 20Mfile_min_size: 0Mtype: 附件上传
- field_name: 确定type: 提交确定按钮
- field_name: 取消type: 提交取消按钮

http://www.mrgr.cn/news/53233.html

相关文章:

  • 汇编实现逆序复制数据
  • B2081 与 7 无关的数
  • 【开源项目】数字孪生智慧桥梁~虎门大桥——开放数据及源码
  • 【代码随想录Day45】动态规划Part13
  • 复习:如何理解 React 中的 fiber
  • 一键获取每日股票数据,自动更新,尽在掌握
  • 安全见闻笔记
  • [Gtk] 工程
  • OPENSSL-2023/11/10学习记录-C/C++对称分组加密DES
  • EPS导出DWG存在地物缺失或者没有编码属性的情况
  • float数据分别以int和float类型打印的反汇编分析
  • 【网络协议】之 HTTP 协议详解
  • 简单三步完成 Telegram 生态的 Web3 冷启动
  • 网络通信与并发编程(二)基于tcp的套接字、基于udp的套接字、粘包现象
  • Postman 接口测试
  • 去除视频水印的三种方法,有手就会
  • Vscode+Pycharm+Vue.js+WEUI+django火锅(7) 傍着Copliot战WEUI Picker
  • 1.1 C++语言基础面试问题
  • 试用cursor的简单的记录
  • 力扣困难题汇总