📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)
📝 职场经验干货:
每次手动编写测试用例都头大?重复劳动、覆盖率低、维护难?
AI来拯救你! 只需一个API调用,DeepSeek能根据需求描述智能生成结构化测试用例,自动保存为JSON文件,直接对接测试框架。
效果预览:
一、准备工作
1、安装Python库:
pip install openai
2、获取DeepSeek API Key:
前往硅基流动官网注册账号,创建应用并获取API密钥。
二、4步生成测试用例JSON文件
步骤1:调用DeepSeek API生成用例
from openai import OpenAI
import json
import re
Client = OpenAI(
api_key='***********',
base_url='https://api.siliconflow.cn/v1'
)
# 示例:传入提示词,调用deeseek接口
defdeepseek(prompt):
response = Client.chat.completions.create(
messages=[
{'role': 'user', 'content': prompt},
],
model='deepseek-ai/DeepSeek-V3',
max_tokens=4096,
stream=False,
)
return response.choices[0].message.content
# 示例:登录需求
requirement_text = """
用户名长度为8到20个字符,不能包含特殊字符
密码长度为6到8个字符,必须包含大小写字母和数字
系统用户名和密码正确,登录成功,
系统用户名和密码错误,提示账户或密码错误,
超过5次错误,锁定10分钟
"""
#提示词,要求以json格式返回,指定返回字段
base_prompt = """
请以json的格式返回数据的测试用例,包含字段:
- no.(测试用例编号,累加)
- case_name(用例名称)
- steps(步骤列表)
- expected_result(预期结果)
示例格式:
{
"test_cases":[
{
"no.": TC_0001
"case_name": "用户名为空"
"steps": ["输入用户名", "点击登录"],
"expected_result": "提示用户名不能为空"
}
]
}
测试用例需要包含:边界值用例,异常用例,基础逻辑功能用例
"""
#需求文档内容太多冗余内容,提炼一份测试要点,便于生成测试用例
defparse_requirement(requirement):
return deepseek(f'请根据以下需求内容,提炼一份测试要点,按照1,2,3....返回,需求内容是: {requirement}')
#根据测试要点,按照指定格式返回测试用例
defgen_test_cases(content):
return deepseek(f'请针对{content}测试要点,生成一份详细的测试用例,按照{base_prompt}格式返回')
requirement = parse_requirement(requirement_text)
test_cases = gen_test_cases(requirement)
步骤2:解析API响应内容
defparse_content(response_text):
try:
data = json.loads(response_text)
return data
except json.JSONDecodeError:
json_str = re.search(r'```json\n(.*?)\n```', response_text, re.DOTALL)
if json_str:
return json.loads((json_str.group(1)))
else:
raise ValueError("无法解析为JSON")
cases = parse_content(test_cases)
print("生成的用例:", cases)
步骤3:保存为JSON文件
defsave_test_cases(test_cases, output_file='test_cases.json'):
with open(output_file, 'w') as f:
f.write(json.dumps(test_cases, indent=2, ensure_ascii=False))
if cases:
save_to_json(cases)
else:
print("生成失败,请检查提示词或API密钥!")
步骤4:验证生成结果
生成的test_cases.json
文件内容示例:
{
"test_cases": [
{
"no.": "TC_0001",
"case_name": "用户名长度验证 - 边界值测试(7个字符)",
"steps": [
"输入7个字符的用户名",
"点击注册"
],
"expected_result": "提示用户名长度不符合要求"
},
{
"no.": "TC_0002",
"case_name": "用户名长度验证 - 边界值测试(8个字符)",
"steps": [
"输入8个字符的用户名",
"点击注册"
],
"expected_result": "用户名验证通过"
},
{
"no.": "TC_0003",
"case_name": "用户名长度验证 - 边界值测试(20个字符)",
"steps": [
"输入20个字符的用户名",
"点击注册"
],
"expected_result": "用户名验证通过"
},
{
"no.": "TC_0004",
"case_name": "用户名长度验证 - 边界值测试(21个字符)",
"steps": [
"输入21个字符的用户名",
"点击注册"
],
"expected_result": "提示用户名长度不符合要求"
},
{
"no.": "TC_0005",
"case_name": "用户名字符验证 - 特殊字符测试",
"steps": [
"输入包含特殊字符(如@!#$%)的用户名",
"点击注册"
],
"expected_result": "提示用户名不能包含特殊字符"
},
{
"no.": "TC_0006",
"case_name": "密码长度验证 - 边界值测试(5个字符)",
"steps": [
"输入5个字符的密码",
"点击注册"
],
"expected_result": "提示密码长度不符合要求"
},
{
"no.": "TC_0007",
"case_name": "密码长度验证 - 边界值测试(6个字符)",
"steps": [
"输入6个字符的密码",
"点击注册"
],
"expected_result": "密码验证通过"
},
{
"no.": "TC_0008",
"case_name": "密码长度验证 - 边界值测试(8个字符)",
"steps": [
"输入8个字符的密码",
"点击注册"
],
"expected_result": "密码验证通过"
},
{
"no.": "TC_0009",
"case_name": "密码长度验证 - 边界值测试(9个字符)",
"steps": [
"输入9个字符的密码",
"点击注册"
],
"expected_result": "提示密码长度不符合要求"
},
{
"no.": "TC_0010",
"case_name": "密码复杂度验证 - 仅小写字母测试",
"steps": [
"输入仅包含小写字母的密码(如abcdef)",
"点击注册"
],
"expected_result": "提示密码复杂度不符合要求"
},
{
"no.": "TC_0011",
"case_name": "密码复杂度验证 - 大小写字母和数字测试",
"steps": [
"输入包含大小写字母和数字的密码(如Abc123)",
"点击注册"
],
"expected_result": "密码验证通过"
},
{
"no.": "TC_0012",
"case_name": "正确用户名和密码登录",
"steps": [
"输入正确的用户名和密码",
"点击登录"
],
"expected_result": "登录成功"
},
{
"no.": "TC_0013",
"case_name": "错误用户名或密码登录",
"steps": [
"输入错误的用户名或密码",
"点击登录"
],
"expected_result": "提示账户或密码错误"
},
{
"no.": "TC_0014",
"case_name": "多次错误登录锁定机制",
"steps": [
"连续输入错误用户名或密码超过5次",
"点击登录"
],
"expected_result": "系统锁定账户并提示锁定10分钟"
},
{
"no.": "TC_0015",
"case_name": "锁定期间登录尝试",
"steps": [
"在账户锁定期间尝试登录",
"点击登录"
],
"expected_result": "系统拒绝登录并提示锁定信息"
},
{
"no.": "TC_0016",
"case_name": "解锁时间验证",
"steps": [
"等待10分钟后尝试登录",
"点击登录"
],
"expected_result": "系统解除锁定,允许登录"
}
]
}
三、高阶技巧
1. 批量生成不同模块用例
modules = ['登录', '支付', '搜索']
reqirements = {'登录':'', '支付':'', '搜索':''}
for module in modules:
prompt = f'为{module}功能设计测试用例,覆盖正向和异常场景,具体需求内容是:{reqirement[module]}'
requirement = parse_requirement(prompt)
response = gen_test_cases(f'请针对{requirement}测试要点,生成一份详细的测试用例,按照{base_prompt}格式返回')
test_cases = parse_content(response)
save_test_cases(test_cases, f'{module}_test_cases.json')
2. 自定义字段模板
在Prompt中指定详细字段:
prompt = """
请生成包含以下字段的JSON测试用例:
- case_name(用例名称)
- priority(优先级:P0/P1/P2)
- test_data(测试数据:{用户名: "test", 密码: "123"})
- expected_status_code(预期HTTP状态码)
示例:{"case_name": "正常登录", "priority": "P0", ...}
"""
四、常见问题
-
返回内容非JSON怎么办?
-
检查Prompt是否明确要求JSON格式
-
添加
response_format: {'type': 'json_object'}
参数,有的模型不支持json格式返回,最好在prompt明确要求 -
使用正则提取Markdown中的JSON代码块
-
-
如何提高生成质量?
-
提供示例:在Prompt中给出用例模板
-
限定范围:如“生成5个边界值测试用例”
-
五、总结
通过DeepSeek API + Python实现例智能生成 并保存为 JSON文件,大幅提升测试效率。其核心优势:
-
效率提升:5分钟生成覆盖边界值、异常场景的测试用例。
-
零编码:通过自然语言描述需求,无需手动编写用例逻辑。
-
灵活扩展:JSON文件可直接对接测试管理工具(如Jira、TestRail)
最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】