与AI对话
提示词Prompt介绍
- 对于普通人:提示词是和 AI 沟通的桥梁,提示词的好坏决定了返回的结果是否准确。
- 对于开发者:提示工程是一种相对较新的学科,专门用于开发和优化提示,以高效地使用语言模型(LM)来处理各种应用和研究主题。
提示词的原则与技巧
| 原则 |
原因 |
| 写清楚需求 |
GPT 模型无法读懂您的想法,因此在提供需求时尽可能具体是很重要的。这包括在您的查询中包含详细信息,要求模型采用角色,以及使用定界符清楚地指示输入的不同部分。 |
| 提供参考文本 |
如果可以,请提供与您希望模型生成的内容相似的参考文本。这将有助于模型了解您要查找的内容并生成更准确的结果。 |
| 将复杂的任务拆分为更简单的子任务 |
如果您试图让模型做一些复杂的事情,将任务分解为更小、更易于管理的子任务会很有帮助。这将使模型更容易理解您的要求并生成更准确的结果。 |
| 角色扮演 |
这个技巧的作用是告诉ChatGPT在对话中扮演一个特定的角色或人物。这对于创造更有吸引力和沉浸感的对话,或模拟真实世界的场景特别有用。 |
| 系统地测试变化 |
对需求或参考文本进行更改时,重要的是系统地测试结果以了解它们如何影响模型的输出。这将帮助您确定对改进结果最有效的更改。 |
写清楚需求
编写有效的ChatGPT的难点之一是表达含糊不清。为了避免这个问题,有以下几个问题需要注意:
- 定义任何专业术语或技术术语。
- 避免使用模棱两可的语言。
- 使用清晰或简明的语言
错误案例:”你是我的哈基米吗?”
哈基米属于网络用语,而且诞生在2023年,ChatGPT是无法理解这个词的语意的。

好的案例:”请帮我提供在深圳市宝安区所有的咖啡馆”
简明扼要说清楚自己的需求,无需多言,ChatGPT便很好理解了。

提供参考文本
对于文本比较短的引用,可以直接贴到提问里面即可: 如果你有一段法律条款,并希望模型使用这段条款来解释某个概念,例如,我给ChatGPT一段代码,分析代码的Bug

网页链接的引用: 也可以直接将网页链接里面的内容提供给 GPT 来作为引用文本。比如可以直接给它一个链接地址,让它总结文章内的内容。(注意这个功能需要使用web插件)
拆解复杂任务
作为一个厨师,在做饭的时候需要完成这些步骤:准备食材、清理食材、处理食材、开始烹饪、摆盘。
在这个过程中,其实厨师就是把一个复杂的任务,拆解成了多个简单的任务。其实在编程的过程中,也是同样的道理。也会把一个复杂需求,拆解为N个简单的子需求。
如果需要ChatGPT帮助我们完成一个复杂的任务,那么,我们需要预先帮它把任务拆分。这样做的优点是:
- 更好理解每一个操作步骤。
- 不被上下文限制影响。
- 方便调整。
例如,我们提出了一个如下的复杂任务:
- 提示词:作为一个测试工程师,我即将进行述职答辩,我想编写一个述职报告,述职报告需要包含我今年的成绩、我明年的目标、以及我在今年的工作过程中碰到的问题
ChatGPT 虽然给到了相应的回复,但是还有问题:
- 工作成绩没有清晰的数据也没有说服力,看着比较干瘪。报告内容没有图表。
- 内容太过简单空洞。
- 格式不够优雅。
如果我们把提问的方式做进一步优化,把这个复杂问题一步步进行拆解,并给ChatGPT一定的修改反馈,则产生的内容会更加符合我们的需求,比如我们可以把问题分解为:
借助外部工具
作为一个大语言生成模型,GPT4 并不擅长各种数学计算。比如下面的问题(来自官方 GPT 最佳指南中的示例问题):
- 提示词:查找以下多项式的所有实值根:3x^5 - 5x^4 - 3x^3 - 7x - 10
如果直接提问的话,通常没法直接给出答案,如下图所示,虽然借助Python,给出了运算过程,但是其实ChatGPT无法像人类数学家一样,给出直接的推导过程:

所以可以将提示词改为:
角色扮演
角色扮演的过程就更为简单了,我们在编写提示词的时候,只需要给它加上一些角色的设定。
ChatGPT甚至可以扮演领导,面试官,浏览器的console插件等各种各样我们可以想象到的角色:
系统的测试变化
正如人在回复信息的时候,也无法保证所有的回复都是正确的,ChatGPT 也无法保证每次给到的信息都是“靠谱的”或者是满足需求的。
所以ChatGPT的每一次回复,在确认没有问题之后,再使用。如果有问题的话,可以进一步进行提问,ChatGPT会根据提示词不停的纠正回复。以达到一个满意的效果。

比如这个示例:
通过不停的测试以及纠正 ChatGPT 的回复,即可最终获得一个满意的回复。
提示词相关概念
通过上面内容对大模型如何进行对话介绍,下面内容则是详细介绍提示词相关具体内容
什么是提示词(Prompt)?
概念说明:
- 提示词是用户与大模型交互的输入指令,用于告诉模型你希望它完成什么任务。
- 它既可以是一句话,也可以是一段上下文或示例。
举例:
请撰写一份关于用户注册功能的测试用例。
什么是 Token?
概念说明:
- 模型处理的最小单位,通常是词的一部分、一个单词,甚至一个符号*。
举例:
- “Deepseek 是厉害的。” → 分词可能为:
["Deepseek", " 是", " 厉", "害", "的", "。"]
上下文窗口(Context Window)
1
| 128K 的上下文==128000 个 token
|
概念说明:
- 指模型每次处理输入 + 输出的最大 token 数量。
- 超出后旧内容将被“遗忘”
注意点💡
- 长 prompt ≠ 好效果,要“信息密度高且结构清晰”。
- 内容越多,token 消耗越多 → 成本 ↑、速度 ↓。
常见大模型的上下文最大Token记忆数量:
- GPT4 —-> 128K
- DeepSeekV3 —->128K
Prompt 与响应的关系
基本流程:
- 用户发出 Prompt
- 模型理解并生成响应
- 模型根据上下文和历史对话生成“合理推测”
模型生成原理:
- 本质是下一个最可能的 token 预测。
- 模型没有“理解”,而是基于概率选择“合适的词”。
Prompt 与输出质量的关系:
- Prompt 不清晰 → 响应不确定甚至出现“幻觉”
- Prompt 精准 → 响应更专业、格式更一致
什么是提示词工程?
概念说明:
提示词工程是指系统性地设计、优化与测试提示词的技术和方法,以引导大语言模型产生预期、高质量、可控的输出。
作用:
- 增强模型可靠性与一致性
- 控制模型输出格式与风格
- 降低“胡编乱造”(幻觉)的风险
提示词角色设定
role 的类型及语义说明
| 角色(role) |
说明 |
示例场景 |
| system |
系统设定。用来告诉模型它的角色、行为风格、语境范围等。 |
设定模型是“测试专家”、“英语老师”、“客服机器人”等 |
| user |
用户输入。代表人类给模型提的问题或指令。 |
提问、请求、任务说明 |
| assistant |
模型回复。由大语言模型根据前文生成的回答。 |
模型生成输出,如回答问题、给建议 |
| tool(可选) |
工具调用(部分模型支持)。用于中间调用工具函数或API时的中间交互。 |
使用函数调用插件、调用代码执行器等 |
基础角色设定
给模型“扮演”某个角色,设定行为风格与语言风格
特点:
- 模拟身份让输出更真实、更符合特定语境
- 非常适合教育、技术、客服等行业场景
示例1:标准问答流程
1 2 3
| messages = [ {"role": "user", "content": "请用通俗易懂的方式讲解“时态”概念?"} ]
|
示例2:英语教学风格
1 2 3 4 5 6
| messages = [ { 'role': 'user', 'content': '你是一个专业的英语老师,请用通俗易懂的方式讲解“时态”概念。' } ]
|
示例3:测试主管角色扮演
1 2 3 4
| messages = [ {'role': 'user', 'content': '你是一个经验丰富的软件测试主管,请评审以下测试用例是否合理,并提出优化建议:\n用例:用户注册时输入无效邮箱应提示错误信息。'} ]
|
使用system设定角色
示例1:设定身份与风格(使用 system)
1 2 3 4
| messages = [ {"role": "system", "content": "你是一名严谨且有经验的软件测试工程师,回答需清晰、专业、有条理。"}, {"role": "user", "content": "请列出注册功能的边界测试用例。"} ]
|
示例2:错误场景分析
1 2 3 4
| messages = [ {"role": "system", "content": "你是一个擅长分析测试日志的QA专家,能快速定位问题根源。"}, {"role": "user", "content": "测试报告显示登录接口返回500错误,可能是什么原因?"} ]
|
示例3:技术方案咨询
1 2 3 4
| messages = [ {"role": "system", "content": "你是自动化测试工具专家,熟悉主流测试框架。"}, {"role": "user", "content": "如何用Pytest对API响应做Schema验证?"} ]
|
对比
- 角色设定的位置不同:system消息用于长期角色设定,而user消息中的角色指示是即时的
- 结构规范性:按照官方的最佳实践,角色和风格应该放在system消息中,这样更清晰和持久。
- 效率:使用system消息可以避免重复指定角色,提高对话效率。
- 清晰度:system消息明确区分角色设定和具体请求,而user中的角色指示可能混合了指令和角色设定,不够清晰
提示词优化的技巧
技巧1:明确指令
- 模型更擅长处理任务明确的请求。
- 含糊的描述容易导致输出不符合预期。
示例一:写接口测试代码
1 2
| # 模糊提示: messages = [{"role": "user", "content": "帮我写个接口测试代码"}]
|
1 2 3 4 5
| # 明确提示: messages = [{ "role": "user", "content": "请使用 Python 和 requests 编写一个 POST 接口的测试脚本,接口地址为 https://api.mstest.vip/login,参数包括 username 和 password,校验响应中 code 是否为 200。" }]
|
技巧2:控制风格与格式
- 通过提示控制模型以 Markdown、表格、列表、JSON 等格式输出。
- 用于生成日报、Bug列表、测试报告、接口说明等结构化内容。
示例一:Markdown报告
1 2 3 4
| messages = [ {"role": "user", "content": "请用Markdown生成用户中心测试报告,必须包含:\n## 模块名称\n## 测试范围\n## 通过率\n## 关键缺陷\n## 剩余风险"} ]
|
示例二:表格用例
1 2 3 4
| messages = [ {"role": "user", "content": "请用表格展示5条注册测试用例,列名包括:\n| 用例ID | 测试点 | 测试数据 | 预期结果 |"} ]
|
示例三:JSON接口用例
1 2 3
| messages = [ {"role": "user", "content": "请生成JSON格式的'修改密码'接口测试用例,字段包含:\ntest_case_id, description, request_data, expected_response"} ]
|
技巧3:加入约束,减少幻觉
- 模型在生成实时性内容时可能产生“幻觉”(虚假或伪造内容)。
- 限定“来源、时间、事实标准”等可以有效降低这种风险。
示例一:对比Selenium版本新特性
1 2 3 4 5
| # 宽泛提示 messages = [{"role": "user", "content": "请介绍 Selenium 的最新变化"}]
# 高约束提示 messages = [{"role": "user", "content": "请根据 Selenium 4.20 官方文档,总结 Python 中相较 Selenium 3 的五个主要变化,并附对应代码示例。"}]
|
示例二:生成测试用例
1 2 3 4 5 6 7
| # 宽泛提示 messages = [{"role": "user", "content": "请为用户注册功能设计5条测试用例"}] # 高约束提示 messages = [ {"role": "user", "content": "请为用户注册功能设计 5 条测试用例,要求:\n- 包含有效与无效邮箱输入\n- 密码边界值测试(6~20位)\n- 每条用例需包含:用例名称、前置条件、输入、预期输出\n- 输出为纯文本描述,不包含自动化脚本"} ]
|
示例三:生成Bug报告
1 2 3 4 5 6 7 8 9
| messages = [ {"role": "user", "content": "请撰写一份缺陷报告模版"} ]
messages = [ {"role": "user", "content": "请撰写一份缺陷报告模版,要求:\n- 模块:登录页\n- 问题描述:输入错误密码后无提示信息\n- 必须包含字段:缺陷标题、环境、重现步骤、实际结果、预期结果\n- 使用中性客观语言"} ]
|
技巧4:少量样本提示
- 通过示例“教”模型学会相应的分类或转换任务。
- 非常适合缺陷分类、日志解析、测试案例格式转换等。
示例一:测试步骤转换
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| messages = [ {"role": "user", "content": """ 将自然语言测试步骤转换为结构化步骤: --- 示例1: 输入:用户输入错误的密码点击登录 输出: 1. 在密码输入框输入错误密码 2. 点击登录按钮
示例2: 输入:选择商品加入购物车并结算 输出: 1. 在商品页点击「加入购物车」 2. 进入购物车页面 3. 点击「结算」按钮 --- 请转换以下步骤: 输入:上传JPG文件后检查预览图显示 输出: """} ]
|
示例二:自动化测试故障分析
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| instruction = """ 作为资深测试开发工程师,请分析自动化测试失败日志: 1. 失败类型分类: - 定位问题(元素/XPath失效) - 环境问题(服务/网络异常) - 脚本缺陷(逻辑/断言错误) 2. 标记可疑代码位置(文件+行号) 3. 给出修复方案(含代码示例) """
examples = """ 输入: [ERROR] ElementNotVisibleException: Failed to locate element #submit-btn at line 42 of login_test.py
输出: 失败类型:定位问题(元素ID变更) 可疑位置:login_test.py第42行 修复方案: 原代码:driver.find_element(By.ID, "submit-btn") 改为:WebDriverWait(driver,10).until( EC.presence_of_element_located((By.CSS_SELECTOR, "[data-testid=submit]")) ) """
input_text = '[FAIL] AssertionError: Expected 200, got 404 at api_healthcheck.py:17'
prompt = f""" {instruction}
{examples}
输入: {input_text}
输出: """
|
技巧5:链式思维
示例一:基础算术(分步推理)
1 2 3 4 5 6 7 8 9 10 11
| messages = [ {"role": "user", "content": """ 请逐步解决以下数学问题,并展示推理过程: 问题:如果3个人5天能挖15米水沟,6个人10天能挖多少米?
分步思考: 1. 计算单人单天效率:15米 ÷ 3人 ÷ 5天 = 1米/人天 2. 计算6人10天总效率:1米/人天 × 6人 × 10天 = ? 3. 最终结果: """} ]
|
示例二:测试点分析
1 2 3 4 5 6 7 8
| messages = [ {"role": "user", "content": """请逐步分析登录功能的测试点, 按以下逻辑展开: 1. 识别输入字段(用户名/密码) 2. 列出每个字段的合法/非法输入情况 3. 分析页面交互流程(按钮状态、错误提示等) 最终输出结构化测试点列表"""} ]
|
提示词指令模板
作用:通过结构化模板控制模型输出,实现高效可复现的任务处理
特点:
- ✅ 直接高效 - 减少模糊指令导致的无效输出
- ✅ 可复现性强 - 固定模板确保结果一致性
- ✅ 动态适配 - 支持变量插值灵活填充内容
模板结构
| 字段名 |
作用 |
示例 |
{instruction} |
定义任务目标和输出格式要求 |
“生成法语翻译,保留专业术语” |
{examples} |
提供输入-输出样本(可选) |
“输入:Hello → 输出:Bonjour” |
{input_text} |
用户实际需要处理的内容 |
“How are you?” |
{output} |
模型生成结果的占位符 |
(留空由模型填充) |
使用案例
自动化测试故障分析
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| instruction = """ 作为资深测试开发工程师,请分析自动化测试失败日志: 1. 失败类型分类: - 定位问题(元素/XPath失效) - 环境问题(服务/网络异常) - 脚本缺陷(逻辑/断言错误) 2. 标记可疑代码位置(文件+行号) 3. 给出修复方案(含代码示例) """
examples = """ 输入: [ERROR] ElementNotVisibleException: Failed to locate element #submit-btn at line 42 of login_test.py
输出: 失败类型:定位问题(元素ID变更) 可疑位置:login_test.py第42行 修复方案: 原代码:driver.find_element(By.ID, "submit-btn") 改为:WebDriverWait(driver,10).until( EC.presence_of_element_located((By.CSS_SELECTOR, "[data-testid=submit]")) ) """
input_text = '[FAIL] AssertionError: Expected 200, got 404 at api_healthcheck.py:17'
prompt = f""" {instruction}
{examples}
测试日志: {input_text}
分析报告: """
|
提示词设计案例(测试相关)
需求整理测试点(零样本)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| system_role = "你是一位有10年经验的资深软件测试工程师,精通测试需求分析"
content = """ 请根据以下需求文档生成测试点,以“功能正常+边界+异常”为主线思维指导生成测试点
📌 F1.3 用户信息修改 🧩 功能背景 用户可修改昵称、密码、头像、性别等基础信息。 🚶 主流程 1. 用户进入“个人中心” 2. 修改某字段并保存 3. 系统校验内容合法性(如昵称长度、头像格式) 4. 修改成功后刷新显示 ⚠ 异常流程 用户未登录:提示登录后操作 输入非法字符:提示不符合规范 📌 业务规则 昵称长度大于3 小于20,支持中英文 性别只能为“男 / 女 / 保密” 头像图片限制大小(2M以内),格式为 png/jpg/jpeg
"""
messages = [ {'role':'system',"content":role}, {'role':"user","content":content} ]
|
基于需求整理测试点(少量样本)一
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| # =============系统设定提示词=========================== # 系统身份设定 role = """ 你是一位有10年经验的资深软件测试工程师,精通测试需求分析 请根据以下需求文档生成测试点,以“功能正常+边界+异常”为主线思维指导生成测试点 """
# 测试点生成的样本 examples = """ 输入: 需求文档: ##### 功能背景 验证码用于绑定账号、身份验证、找回密码等关键环节。 ##### 主流程 1. 用户点击“获取验证码” 2. 系统验证发送频率与目的合法性 3. 向目标手机号/邮箱发送验证码 4. 用户输入进行验证 ##### 异常流程 - 发送过快:提示“请勿频繁操作” - 验证码已失效:提示“请重新获取” ##### 业务规则 - 同一手机号/邮箱每分钟限发1次,每小时最多5次 - 验证码为6位数字,有效期5分钟 - 验证成功后销毁验证码记录 输出: ├─ 正向验证 │ ├─ 获取验证码后成功发送到手机号/邮箱 │ ├─ 验证码输入正确,验证通过并进入后续流程 │ ├─ 验证成功后验证码记录被销毁 │ └─ 多个业务场景(绑定、找回、登录)均可正常使用验证码流程 ├─ 边界测试 │ ├─ 验证码长度校验(少1位/多1位/非数字) │ ├─ 验证码在5分钟临界点前验证仍有效 │ ├─ 验证码5分钟后自动失效提示“验证码已失效” │ └─ 每分钟第1次能发,第2次提示过快,每小时第6次提示超限 ├─ 异常处理 │ ├─ 未输入验证码直接提交,提示“请输入验证码” │ ├─ 输入错误验证码,提示“验证码错误” │ ├─ 验证码过期后输入,提示“验证码已失效” │ ├─ 非法请求验证码接口(无session或业务上下文),返回异常 │ └─ 网络异常/接口超时时的错误提示与重试策略 └─ 体验性测试(增强用) ├─ 验证码输入框是否支持自动填充(邮件/SMS自动读取) ├─ 快速点击获取验证码按钮多次是否有节流/灰显 ├─ 获取验证码后的按钮倒计时效果是否清晰 └─ 输入法切换是否影响验证码输入行为(如中文输入法拦截)
"""
system = f""" {role}
{examples} """
|
基于需求整理测试点(少量样本)二
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| # =============系统设定提示词=========================== # 系统身份设定 role = """ 你是一位有10年经验的资深软件测试工程师,精通测试需求分析,需要你根据需求文档生成测试点,整理为正向测试点和反向测试点 """
# 测试点生成的样本 examples = """ 输入: 需求文档: ##### 功能背景 新用户通过注册方式创建账户,支持邮箱/用户名+密码的注册方式。 ##### 主流程 1. 用户打开注册页,填写注册信息 2. 系统校验格式与唯一性(用户名、邮箱) 3. 提交注册,后台创建账户,初始状态为“正常” 4. 注册成功后自动登录并跳转首页 ##### 异常流程 - 邮箱/用户名已被注册:提示“已存在” - 两次密码不一致:提示用户重新输入 ##### 业务规则 - 用户名唯一,支持 4~20 位字母数字组合 - 密码长度不少于 6 位 - 邮箱必须符合格式 `xxx@xxx.xx` 输出: #### 正向测试点(正常流程,预期成功) 1. **邮箱注册成功** - 输入符合格式的新邮箱(如 `test123@example.com`)+ 有效密码(≥6位)→ 注册成功,自动登录并跳转首页 2. **用户名注册成功** - 输入4-20位字母数字组合的新用户名(如 `user123`)+ 有效密码 → 注册成功 3. **密码符合要求** - 密码长度≥6位(如 `Pass123`)→ 允许提交 4. **登录与跳转** - 注册成功后自动跳转至首页,且保持登录状态
#### 反向测试点(异常流程,预期失败或提示) 1. **邮箱格式错误** - 输入无`@`的邮箱(如 `test.example.com`)→ 提示“邮箱格式错误” 2. **邮箱已被注册** - 输入已存在的邮箱 → 提示“邮箱已存在” 3. **用户名格式错误** - 输入含特殊字符的用户名(如 `user@123`)→ 提示“仅支持字母数字” - 输入长度<4或>20的用户名 → 提示“用户名需4-20位” 4. **用户名已被注册** - 输入已存在的用户名 → 提示“用户名已存在” 5. **密码长度不足** - 输入5位密码(如 `12345`)→ 提示“密码至少6位” 6. **两次密码不一致** - 密码输入`Pass123`,确认密码输入`Pass456` → 提示“密码不一致” 7. **必填字段为空** - 邮箱/用户名、密码、确认密码任一为空 → 提示“请填写完整信息” 8. **默认状态异常** - 注册后状态非“正常”(如未激活/锁定)→ 需排查后台逻辑
输入: 需求文档: ##### 🧩 功能背景 验证码用于绑定账号、身份验证、找回密码等关键环节。 ##### 🚶 主流程 1. 用户点击“获取验证码” 2. 系统验证发送频率与目的合法性 3. 向目标手机号/邮箱发送验证码 4. 用户输入进行验证 ##### ⚠️ 异常流程 - 发送过快:提示“请勿频繁操作” - 验证码已失效:提示“请重新获取” ##### 📌 业务规则 - 同一手机号/邮箱每分钟限发1次,每小时最多5次 - 验证码为6位数字,有效期5分钟 - 验证成功后销毁验证码记录 输出:
"""
system = f""" {role}
{examples} """
|
结构化用例生成(少量样本)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| role = """ 你是一位有10年经验的软件测试工程师,精通需求分析和用例设计 """
system = """ 你是一位有10年经验的软件测试工程师,精通需求分析和用例设计 请基于下面的测试点,结合覆盖功能 + 探测缺陷的思维生成标准的测试用例,测试用例的八要素(
输入: #### 正向测试点(正常流程,预期成功) 1. **邮箱注册成功** - 输入符合格式的新邮箱(如 `test123@example.com`)+ 有效密码(≥6位)→ 注册成功,自动登录并跳转首页 2. **用户名注册成功** - 输入4-20位字母数字组合的新用户名(如 `user123`)+ 有效密码 → 注册成功 3. **密码符合要求** - 密码长度≥6位(如 `Pass123`)→ 允许提交 4. **登录与跳转** - 注册成功后自动跳转至首页,且保持登录状态
#### 反向测试点(异常流程,预期失败或提示) 1. **邮箱格式错误** - 输入无`@`的邮箱(如 `test.example.com`)→ 提示“邮箱格式错误” 2. **邮箱已被注册** - 输入已存在的邮箱 → 提示“邮箱已存在” 3. **用户名格式错误** - 输入含特殊字符的用户名(如 `user@123`)→ 提示“仅支持字母数字” - 输入长度<4或>20的用户名 → 提示“用户名需4-20位” 4. **用户名已被注册** - 输入已存在的用户名 → 提示“用户名已存在” 5. **密码长度不足** - 输入5位密码(如 `12345`)→ 提示“密码至少6位” 6. **两次密码不一致** - 密码输入`Pass123`,确认密码输入`Pass456` → 提示“密码不一致” 7. **必填字段为空** - 邮箱/用户名、密码、确认密码任一为空 → 提示“请填写完整信息” 8. **默认状态异常** - 注册后状态非“正常”(如未激活/锁定)→ 需排查后台逻辑 输出: | 用例编号 | 用例名称 | 前置步骤 | 测试步骤 | 输入数据 | 预期结果 | 实际结果 | 备注 | | ---------- | ------------------ | ------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------- | -------- | -------- | | TC_REG_001 | 邮箱注册成功 | 无 | 1. 打开注册页面 2. 输入合法邮箱 `test123@example.com` 3. 输入合法密码 `Pass123` 4. 确认密码输入 `Pass123` 5. 点击“注册”按钮 | 邮箱:test123@example.com 密码:Pass123 确认密码:Pass123 | 注册成功,自动跳转至首页,用户保持登录状态 | | 正向用例 | | TC_REG_002 | 用户名注册成功 | 无 | 1. 打开注册页面 2. 输入合法用户名 `user123` 3. 输入合法密码 `Abcd1234` 4. 确认密码输入一致 5. 点击“注册”按钮 | 用户名:user123 密码:Abcd1234 确认密码:Abcd1234 | 注册成功,自动跳转至首页,用户保持登录状态 | | 正向用例 | | TC_REG_003 | 密码符合要求 | 无 | 1. 打开注册页面 2. 输入用户名或邮箱 3. 输入密码 `Pass123`(长度 ≥6) 4. 输入相同确认密码 5. 点击“注册” | 用户名:user567 密码:Pass123 确认密码:Pass123 | 表单验证通过,允许提交,注册成功跳转首页 | | 正向用例 | | TC_REG_004 | 注册后自动登录跳转 | 无 | 1. 打开注册页面 2. 输入合法注册信息并完成注册 3. 注册完成后观察页面跳转和登录状态 | 任意有效注册信息 | 注册成功后跳转至首页,用户已处于登录状态 | | 正向用例 | | TC_REG_005 | 邮箱格式错误 | 无 | 1. 打开注册页面 2. 输入非法邮箱 `test.example.com` 3. 输入合法密码 4. 点击“注册” | 邮箱:test.example.com 密码:Pass123 确认密码:Pass123 | 提示“邮箱格式错误”,不允许提交 | | 反向用例 | | TC_REG_006 | 邮箱已被注册 | 邮箱已注册 | 1. 打开注册页面 2. 输入已注册邮箱 `exist@example.com` 3. 输入密码 4. 点击“注册” | 邮箱:exist@example.com 密码:Pass123 确认密码:Pass123 | 提示“邮箱已存在”,不允许注册 | | 反向用例 | | TC_REG_007 | 用户名格式错误 | 无 | 1. 打开注册页面 2. 输入非法用户名(如 `user@123`) 3. 输入密码 4. 点击“注册” | 用户名:user@123 或 us 或 超过20位的用户名 密码:Pass123 确认密码:Pass123 | 提示“仅支持字母数字”或“用户名需4-20位”,注册失败 | | 反向用例 | | TC_REG_008 | 用户名已被注册 | 用户名已注册 | 1. 打开注册页面 2. 输入已注册用户名 `existUser` 3. 输入密码 4. 点击“注册” | 用户名:existUser 密码:Pass123 确认密码:Pass123 | 提示“用户名已存在”,注册失败 | | 反向用例 | | TC_REG_009 | 密码长度不足 | 无 | 1. 打开注册页面 2. 输入用户名 3. 输入短密码 `12345`(5位) 4. 点击“注册” | 用户名:userX 密码:12345 确认密码:12345 | 提示“密码至少6位”,注册失败 | | 反向用例 | | TC_REG_010 | 两次密码不一致 | 无 | 1. 打开注册页面 2. 输入用户名 3. 输入密码 `Pass123` 4. 输入确认密码 `Pass456` 5. 点击“注册” | 用户名:userY 密码:Pass123 确认密码:Pass456 | 提示“密码不一致”,注册失败 | | 反向用例 | | TC_REG_011 | 必填字段为空 | 无 | 1. 打开注册页面 2. 留空邮箱/用户名或密码或确认密码 3. 点击“注册”按钮 | 任意字段为空 | 提示“请填写完整信息”,不允许注册 | | 反向用例 | | TC_REG_012 | 注册后状态异常 | 无 | 1. 打开注册页面 2. 使用合法信息注册成功 3. 登录后进入个人中心检查状态 | 任意注册信息 | 用户状态应为“正常”;如非正常(未激活/锁定)应记录为缺陷 | | 反向用例 |
"""
|
带图片内容的提示词
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| import dotenv import os from langchain_openai import ChatOpenAI from langchain.messages import AIMessage, SystemMessage, HumanMessage
dotenv.load_dotenv()
llm = ChatOpenAI( model=os.getenv("image_model"), base_url=os.getenv("base_url"), api_key=os.getenv("api_key"), )
message = [ {"role": "system", "content": "你是一个资深测试工程师"}, {"role": "user", "content": [ {"type": "text", "text": "请分析图片中的功能需求"}, {"type": "image", "url": "https://pic2.zhimg.com/v2-d1f6399664a2f8837eb4b4a45e4672fd_r.jpg"}, ] } ]
result = llm.stream(message) for chunk in result: print(chunk.content,end='')
|