关于测试用例的写法

最近公司有个新项目,需要写测试用例,表单项有点多,一个表单都有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:"""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 dataif __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: dictitem['index'] = index + 1item['next_index'] = index + 2item['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: 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.mzph.cn/diannao/57705.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于ssm+vue的购物商场的设计与实现

博主介绍:专注于Java(springboot ssm 等开发框架) vue .net php phython node.js uniapp 微信小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不…

JavaScript 的 axios 实现文件下载功能

用 JavaScript 的 axios 实现文件下载功能,咱们要分几个步骤来搞定它!最主要的部分是处理 二进制数据,可以生成一个进度检测,然后把它保存为文件。 文件名的获取二进制数据获取创建下载链接 const axios require(axios);const g…

【视频生成大模型】 视频生成大模型 THUDM/CogVideoX-2b

【视频生成大模型】 视频生成大模型 THUDM/CogVideoX-2b CogVideoX-2b 模型介绍发布时间模型测试生成的demo视频生成视频限制 运行环境安装运行模型下载开源协议参考 CogVideoX-2b 模型介绍 CogVideoX是 清影 同源的开源版本视频生成模型。 基础信息: 发布时间 2…

【【自动驾驶】车辆运动学模型】

【自动驾驶】车辆运动学模型 1. 引言2. 以车辆重心为中心的单车模型2.1 模型介绍2.2 滑移角 β \beta β 的推导2.2 航向角 ψ \psi ψ推导过程:2.3 滑移角 β \beta β2.3 Python代码实现2.4 C代码实现 3. 前轮驱动的单车模型3.1 模型介绍3.3 Python代码实现3.4 …

【功能安全】 独立于环境的安全要素SEooC

目录 01 SEooC定义 02 SEooC开发步骤 03 SEooC开发示例 04 SEooC问答 01 SEooC定义 缩写: SEooC:Safety Element out of Context独立于环境的安全要素 SEooC出处:GB/T34590.10—2022,第9章节 SEooC与相关项什么关系? SEooC可以是系统、系统组合、子系统、软件组件、…

【软件设计】常用设计模式--代理模式

文章目录 代理模式(Proxy Pattern)1. 概念2. 模式结构3. UML 类图4.实现方式C# 示例步骤1:定义主题接口步骤2:实现真实主题步骤3:实现代理类步骤4:客户端使用代理模式输出结果: Java 示例步骤1&…

EXCELL中如何两条线画入一张图中,标记坐标轴标题?

1,打开excel,左击选中两列, 2,菜单栏>“插入”>”二维折线图”选中一个 3,选中出现的两条线中的一条右击>最下一行,“设置数据系列格式” 4,右测“系列选项中”>点击“次坐标轴” 5…

龙蟠科技业绩压力显著:资产负债率持续攀升,产能利用率也不乐观

《港湾商业观察》施子夫 黄懿 去年十月至今两度递表后,10月17日,江苏龙蟠科技股份有限公司(以下简称,龙蟠科技;603906.SH,02465.HK)通过港交所主板上市聆讯。 很快,龙蟠科技发布公告称,公司全…

低代码开发详解与行业应用指南

低代码开发简化软件开发,助力企业数字化转型。ZohoCreator应用于零售、制造、教育、IT、医疗、房地产等行业,提升效率、降低成本。灵活定价,支持免费试用,助力企业快速实现数字化。 一、低代码开发是什么? 低代码开发…

青少年编程能力等级测评CPA C++五级试卷(1)

青少年编程能力等级测评CPA C五级试卷(1) 一、单项选择题(共15题,每题3分,共45分) CP5_1_1.下列有关类的重用意义的叙述中,不正确的是( )。 A&#x…

栈(数据结构)——C语言

1 概念与结构 栈:⼀种特殊的线性表,其只允许在固定的⼀端进⾏插⼊和删除元素操作。进⾏数据插⼊和删除操作 的⼀端称为栈顶,另⼀端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈&#…

如何动态改变本地的ip

在当今数字化时代,网络连接已成为我们日常生活和工作中不可或缺的一部分。无论是出于隐私保护、突破地域限制,还是为了测试和优化网络应用,动态改变本地IP地址的需求日益增多。本文将详细介绍如何安全、有效地实现这一目标,旨在帮…

Linux巡检利器xsos的安装和使用

一、 一般项目基本完成的时候,后期运维工作的重点就是及时的,合理的频率巡检了,巡检的目的主要是及时发现各种各样的问题 那么,自己编写shell脚本是大部分人的第一选择,这里有个比较麻烦的地方,shell脚本…

升级phpcmsV9系统的jquery版本引起的问题处理

前言: 如果jquery文件名修改了,/phpcms/modules/admin/templates/header.tpl.php文件中的jquery名称需要对应修改 一、后台输入框的验证问题 /statics/js/formvalidator.js文件调整为:点击下载 二、后台全选失效问题 1、/phpcms/modules/…

通过 Lighthouse 和 speed-measure-webpack 插件分析优化构建速度与体积

一、Lighthouse Lighthouse是 Google Chrome 推出的一款开源自动化工具,谷歌浏览器中已经集成,它可以搜集多个现代网页性能指标,分析 Web 应用的性能并生成报告,为开发人员进行性能优化的提供了参考方向。 Lighthouse会生成一份报…

Aatrox-Bert-VITS2部署指南

一、模型介绍 【AI 剑魔 ①】在线语音合成(Bert-Vits2),将输入文字转化成暗裔剑魔亚托克斯音色的音频输出。 作者:Xz 乔希 https://space.bilibili.com/5859321 声音归属:Riot Games《英雄联盟》暗裔剑魔亚托克斯 …

分布式IO模拟量模块:多领域应用的高效能解决方案

分布式IO模拟量模块是分布式IO系统中的重要组件,用于实现现场设备或过程的模拟量信号的采集、监视和控制。该模块通常与现场总线耦合器配合使用,能够接收来自现场设备的模拟量信号(如电流、电压等),并将其转换为数字信…

谷歌地图 | 与 Android 版导航 SDK 集成的最佳实践

谷歌最近宣布了导航 SDK,它可以让您将熟悉的 Google 地图逐向导航体验无缝集成到您的 Android 和 iOS 应用程序中。 这篇博文概述了一些最佳实践,您可以使用这些实践为您的 Android 应用程序使用导航 SDK 构建流畅、一致且可靠的导航体验。 与导航地图…

Linux系统安装软件的4种方式【源码配置编译安装、yum安装、rpm包安装、二进制软件包安装(.rpm/.tar.gz/.tgz/.bz2)】

一.源码安装 linux安装软件采用源码安装灵活自由,适用于不同的平台,维护也十分方便。 (一)源码安装流程  源码的安装一般由3个步骤组成: 1.配置(configure) Configure是一个可执行脚本…

5586 直播获奖(live)

经验值:1200 时间限制:1000毫秒 内存限制:256MB 全国2020CSP-J普及组试题 不许抄袭,一旦发现,直接清空经验! 题目描述 Description NOI2130 即将举行。为了增加观赏性,CCF 决定逐一评出每个…