Python 使用 Trae 提示词生成自动化测试框架实战
利用 Trae AI 工具通过优化提示词工程,快速构建包含单元测试、集成测试及端到端测试的完整自动化测试框架。文章分享了三个核心技巧:生成 pytest 测试框架代码、自动生成测试数据脚本以及生成 HTML/JSON 格式测试报告。相比手动编写,该方法显著减少测试准备时间,提升测试覆盖率与执行效率,适用于电商等复杂业务场景的自动化测试需求。

利用 Trae AI 工具通过优化提示词工程,快速构建包含单元测试、集成测试及端到端测试的完整自动化测试框架。文章分享了三个核心技巧:生成 pytest 测试框架代码、自动生成测试数据脚本以及生成 HTML/JSON 格式测试报告。相比手动编写,该方法显著减少测试准备时间,提升测试覆盖率与执行效率,适用于电商等复杂业务场景的自动化测试需求。


项目上线前都要写一堆测试用例。如果不懂自动化,测试数据全靠手动准备,测试用例一个一个敲,测试报告也是手动统计。一个项目下来,光是测试就要花掉一周时间。
后来接触了 Trae,发现它生成的测试框架特别实用。现在不管是单元测试、集成测试还是端到端测试,都能自动生成测试用例和测试数据,测试报告也能自动输出。原来要一周的活儿,现在半天就能搞定。
今天就聊聊我是怎么用 Trae 搞定自动化测试的,这些方法都是实战中摸索出来的,希望能帮到大家。
前阵子接了个电商项目,订单模块特别复杂,有各种状态流转、支付流程、库存扣减。测试的时候真是头大:
一开始我是手动写测试用例,写了整整两天,还没写完。后来用 Trae 生成的 pytest 框架,把测试逻辑描述清楚,它自动生成测试用例和测试数据,半小时就搞定了。
刚开始我用 Trae 时,提示词写得很简单,就一句话:"帮我写个测试"。结果生成的代码要么太简单,要么不符合项目需求。后来我摸索出一套写法,把需求说清楚,生成的代码就能直接用。
优化前:
帮我写一个测试代码
优化后:
使用 pytest 框架编写一个企业级自动化测试系统,要求:
1. 核心功能:
- 支持单元测试、集成测试、端到端测试
- 自动发现和运行测试用例
- 支持测试参数化和数据驱动
- 支持测试夹具(fixture)复用
- 支持测试标记和分组
2. 测试数据:
- 支持从 Excel/CSV/JSON 加载测试数据
- 支持测试数据自动生成(使用 Faker 库)
- 支持测试数据清理和恢复
- 支持测试数据隔离
3. 断言和验证:
- 支持多种断言方式
- 支持自定义断言消息
- 支持异常测试
- 支持性能测试
4. 测试报告:
- 生成 HTML 测试报告
- 生成 JSON 测试报告
- 支持测试覆盖率统计
- 支持测试结果截图
5. 代码要求:
- 使用面向对象编程
- 添加详细的中文注释和日志
- 实现异常处理和错误恢复
- 支持命令行参数
- 遵循 PEP 8 代码规范
6. 输出要求:
- 生成可执行的测试脚本
- 生成测试报告(HTML/JSON)
- 生成测试日志文件
- 可选:集成到 CI/CD 流程
这样写就把需求说清楚了,Trae 生成的代码基本能直接用。
import pytest
import pandas as pd
from typing import List, Dict, Any
import logging
from datetime import datetime
import json
import os
class TestFramework:
"""企业级自动化测试框架"""
def __init__(self, config: Dict[str, Any] = None):
"""初始化测试框架"""
self.config = config or self._default_config()
self.setup_logging()
self.test_results = {
'total': 0,
'passed': 0,
'failed': 0,
'skipped': 0,
'errors': []
}
def _default_config(self) -> Dict[str, Any]:
"""默认配置"""
return {
'test_data_file': 'test_data.xlsx',
'report_format': 'html',
'enable_coverage': True,
:
}
():
logging.basicConfig(
level=(logging, .config[]),
=,
handlers=[
logging.FileHandler(),
logging.StreamHandler()
]
)
.logger = logging.getLogger(__name__)
() -> pd.DataFrame:
:
file_path = file_path .config[]
.logger.info()
file_path.endswith():
df = pd.read_excel(file_path)
file_path.endswith():
df = pd.read_csv(file_path)
file_path.endswith():
(file_path, , encoding=) f:
data = json.load(f)
df = pd.DataFrame(data)
:
ValueError()
.logger.info()
df
Exception e:
.logger.error()
() -> pd.DataFrame:
:
faker Faker
.logger.info()
fake = Faker()
data = []
_ (num_records):
data.append({
: fake.name(),
: fake.email(),
: fake.phone_number(),
: fake.address(),
: fake.random_int(=, =),
: fake.random_int(=, =)
})
df = pd.DataFrame(data)
.logger.info()
df
ImportError:
.logger.warning()
random
string
data = []
_ (num_records):
data.append({
: ,
: ,
: ,
: ,
: random.randint(, ),
: random.randint(, )
})
pd.DataFrame(data)
() -> [, ]:
:
.logger.info()
exit_code = pytest.main([
test_dir,
,
,
,
,
,
])
._parse_test_results()
.logger.info()
.test_results
Exception e:
.logger.error()
():
:
(, , encoding=) f:
report = json.load(f)
.test_results[] = report.get(, {}).get(, )
.test_results[] = report.get(, {}).get(, )
.test_results[] = report.get(, {}).get(, )
.test_results[] = report.get(, {}).get(, )
Exception e:
.logger.warning()
() -> :
:
report_path =
os.path.exists():
os.rename(, report_path)
.logger.info()
report_path
Exception e:
.logger.error()
():
data = {
: ,
: ,
:
}
data
():
framework = TestFramework()
framework
():
sample_data[] ==
sample_data[] ==
sample_data[] ==
():
df = test_framework.generate_test_data()
(df) ==
df.columns
df.columns
():
framework = TestFramework()
test_data = framework.generate_test_data()
test_data.to_excel(, index=)
()
results = framework.run_tests()
report_path = framework.generate_report()
()
()
()
()
()
()
__name__ == :
main()
这套测试框架用起来挺简单的,我一般按这几个步骤来:
pip install pytest pytest-html pytest-json-report pandas
framework = TestFramework()
test_data = framework.generate_test_data(100)
test_data.to_excel('test_data.xlsx', index=False)
def test_user_creation(sample_data):
"""测试用户创建功能"""
user = User(**sample_data)
assert user.name == sample_data['name']
assert user.email == sample_data['email']
python test_framework.py
用这套框架后,测试效率确实提升了不少:
算下来效率提升了 10-20 倍,而且测试覆盖率也提高了不少。
测试团队最头疼的就是准备测试数据。以前他们都是:
整个过程要花半天到一天,而且很难覆盖所有场景。现在用自动化脚本,几分钟就能生成各种测试数据。
优化前:
帮我生成一些测试数据
优化后:
编写一个测试数据自动生成器,要求:
1. 核心功能:
- 支持多种数据类型(字符串、数字、日期、布尔值等)
- 支持数据格式验证(邮箱、手机号、身份证等)
- 支持数据关联(用户 - 订单 - 商品)
- 支持数据约束(唯一性、外键、范围等)
2. 数据生成策略:
- 使用 Faker 库生成真实感数据
- 支持自定义数据生成规则
- 支持数据分布控制(正态分布、均匀分布)
- 支持边界值和异常值生成
3. 数据导出:
- 支持导出为 Excel/CSV/JSON
- 支持批量生成多个数据集
- 支持数据版本管理
- 支持数据模板复用
4. 代码要求:
- 使用面向对象编程
- 添加详细的中文注释和日志
- 实现异常处理和错误恢复
- 支持配置文件
- 遵循 PEP 8 代码规范
5. 输出要求:
- 生成测试数据文件
- 生成数据生成报告
- 生成数据质量报告
import pandas as pd
import numpy as np
from typing import Dict, List, Any, Optional
import logging
from datetime import datetime, timedelta
import json
import random
import string
try:
from faker import Faker
FAKER_AVAILABLE = True
except ImportError:
FAKER_AVAILABLE = False
class TestDataGenerator:
"""测试数据自动生成器"""
def __init__(self, locale: str = 'zh_CN'):
"""初始化数据生成器"""
self.locale = locale
self.fake = Faker(locale) if FAKER_AVAILABLE else None
self.setup_logging()
self.generated_data = {}
def setup_logging(self):
"""设置日志"""
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler(f'data_generator_{datetime.now().strftime("%Y%m%d_%H%M%S")}.log'),
logging.StreamHandler()
]
)
.logger = logging.getLogger(__name__)
() -> pd.DataFrame:
:
.logger.info()
data = []
i (num_records):
FAKER_AVAILABLE:
user = {
: i + ,
: .fake.name(),
: .fake.email(),
: .fake.phone_number(),
: .fake.address(),
: .fake.random_int(=, =),
: random.choice([, ]),
: random.choice([, , ]),
: .fake.date_time_between(start_date=, end_date=)
}
:
user = {
: i + ,
: ,
: ,
: ,
: ,
: random.randint(, ),
: random.choice([, ]),
: random.choice([, , ]),
: datetime.now() - timedelta(days=random.randint(, ))
}
data.append(user)
df = pd.DataFrame(data)
.generated_data[] = df
.logger.info()
df
Exception e:
.logger.error()
() -> pd.DataFrame:
:
.logger.info()
user_ids :
user_ids = ((, ))
data = []
i (num_records):
order = {
: i + ,
: random.choice(user_ids),
: random.choice([, , , , ]),
: random.randint(, ),
: random.choice([, , , , ]),
: ,
: random.choice([, , , , ]),
: datetime.now() - timedelta(days=random.randint(, ))
}
order[] = order[] * order[]
data.append(order)
df = pd.DataFrame(data)
.generated_data[] = df
.logger.info()
df
Exception e:
.logger.error()
() -> pd.DataFrame:
:
.logger.info()
data = []
age_boundaries = [, , , , , , , , -]
age age_boundaries:
data.append({
: ,
: age,
: <= age <=
})
amount_boundaries = [, , , , , -, -]
amount amount_boundaries:
data.append({
: ,
: amount,
: < amount <=
})
string_lengths = [, , * , * , * ]
s string_lengths:
data.append({
: ,
: s,
: (s),
: <= (s) <=
})
df = pd.DataFrame(data)
.generated_data[] = df
.logger.info()
df
Exception e:
.logger.error()
() -> pd.DataFrame:
:
.logger.info()
data = []
i ():
data.append({
: ,
: random.choice([, , ]),
: ,
:
})
i ():
data.append({
: ,
: ,
: random.choice([, , , ]),
:
})
i ():
data.append({
: ,
: ,
: random.choice([-, , , ]),
:
})
i ():
data.append({
: ,
: ,
: ,
:
})
df = pd.DataFrame(data)
.generated_data[] = df
.logger.info()
df
Exception e:
.logger.error()
():
:
os
os.makedirs(output_dir, exist_ok=)
timestamp = datetime.now().strftime()
name, df .generated_data.items():
output_path = os.path.join(output_dir, )
df.to_excel(output_path, index=)
.logger.info()
Exception e:
.logger.error()
() -> [, ]:
report = {
: datetime.now().isoformat(),
: {
: (.generated_data),
: ((df) df .generated_data.values())
},
: {}
}
name, df .generated_data.items():
report[][name] = {
: (df),
: (df.columns),
:
}
report
():
generator = TestDataGenerator()
()
users = generator.generate_user_data()
()
orders = generator.generate_order_data(, users[].tolist())
()
boundary = generator.generate_boundary_data()
()
anomaly = generator.generate_anomaly_data()
()
generator.export_data()
report = generator.generate_report()
()
()
()
name, info report[].items():
()
()
()
()
__name__ == :
main()
pip install faker pandas numpy
generator = TestDataGenerator()
users = generator.generate_user_data(100)
orders = generator.generate_order_data(200)
boundary = generator.generate_boundary_data()
anomaly = generator.generate_anomaly_data(20)
generator.export_data('test_data')
效率提升了 20-50 倍!
测试完成后,测试团队还要花大量时间编写测试报告。以前他们都是:
整个过程要花 1-2 小时,而且容易出错。现在用自动化脚本,测试完成后自动生成报告,几秒钟就搞定了。
优化前:
帮我生成测试报告
优化后:
编写一个测试报告自动生成器,要求:
1. 核心功能:
- 解析 pytest 测试结果(JSON 格式)
- 生成 HTML 测试报告(带样式)
- 生成 JSON 测试报告(便于集成)
- 生成测试覆盖率报告
2. 报告内容:
- 测试概览(总数、通过、失败、跳过)
- 测试用例详情(每个用例的执行结果)
- 失败用例分析(错误信息、堆栈跟踪)
- 测试趋势分析(历史数据对比)
- 测试覆盖率统计(代码覆盖率、分支覆盖率)
3. 报告样式:
- 使用 Bootstrap 美化 HTML 报告
- 支持响应式设计
- 添加图表展示(饼图、柱状图)
- 支持颜色标记(绿色通过、红色失败、黄色跳过)
4. 高级功能:
- 支持邮件发送报告
- 支持报告模板定制
- 支持多语言切换
- 支持报告历史归档
5. 代码要求:
- 使用面向对象编程
- 添加详细的中文注释和日志
- 实现异常处理和错误恢复
- 支持配置文件
- 遵循 PEP 8 代码规范
6. 输出要求:
- 生成 HTML 测试报告
- 生成 JSON 测试报告
- 生成测试日志文件
- 可选:发送邮件通知
import json
import os
from typing import Dict, List, Any
import logging
from datetime import datetime
import base64
from io import BytesIO
try:
import matplotlib.pyplot as plt
MATPLOTLIB_AVAILABLE = True
except ImportError:
MATPLOTLIB_AVAILABLE = False
class TestReportGenerator:
"""测试报告自动生成器"""
def __init__(self, config: Dict[str, Any] = None):
"""初始化报告生成器"""
self.config = config or self._default_config()
self.setup_logging()
self.test_results = None
def _default_config(self) -> Dict[str, Any]:
"""默认配置"""
return {
'report_dir': 'test_reports',
'report_format': 'html',
'include_charts': True,
'include_coverage': True
}
():
logging.basicConfig(
level=logging.INFO,
=,
handlers=[
logging.FileHandler(),
logging.StreamHandler()
]
)
.logger = logging.getLogger(__name__)
() -> [, ]:
:
.logger.info()
(json_file, , encoding=) f:
.test_results = json.load(f)
.logger.info()
.test_results
Exception e:
.logger.error()
() -> :
:
.test_results :
ValueError()
output_path = output_path os.path.join(
.config[],
)
os.makedirs(os.path.dirname(output_path), exist_ok=)
charts = {}
.config[] MATPLOTLIB_AVAILABLE:
charts = ._generate_charts()
html_content = ._generate_html_content(charts)
(output_path, , encoding=) f:
f.write(html_content)
.logger.info()
output_path
Exception e:
.logger.error()
() -> [, ]:
charts = {}
:
summary = .test_results.get(, {})
labels = [, , ]
sizes = [
summary.get(, ),
summary.get(, ),
summary.get(, )
]
colors = [, , ]
plt.figure(figsize=(, ))
plt.pie(sizes, labels=labels, colors=colors, autopct=, startangle=)
plt.title()
buf = BytesIO()
plt.savefig(buf, =, dpi=, bbox_inches=)
buf.seek()
charts[] = base64.b64encode(buf.read()).decode()
plt.close()
tests = .test_results.get(, [])
tests:
durations = [test.get(, ) test tests[:]]
names = [test.get(, )[:] test tests[:]]
plt.figure(figsize=(, ))
plt.barh(names, durations, color=)
plt.xlabel()
plt.title()
plt.tight_layout()
buf = BytesIO()
plt.savefig(buf, =, dpi=, bbox_inches=)
buf.seek()
charts[] = base64.b64encode(buf.read()).decode()
plt.close()
Exception e:
.logger.warning()
charts
() -> :
summary = .test_results.get(, {})
tests = .test_results.get(, [])
total = summary.get(, )
passed = summary.get(, )
failed = summary.get(, )
skipped = summary.get(, )
pass_rate = (passed / total * ) total >
html =
html
() -> :
charts:
html =
charts:
html +=
charts:
html +=
html +=
html
() -> :
html =
test tests[:]:
outcome = test.get(, )
name = test.get(, )
duration = test.get(, )
outcome == :
css_class =
status =
outcome == :
css_class =
status =
:
css_class =
status =
html +=
outcome == test:
error = test[].get(, {}).get(, )
html +=
html +=
html
() -> :
:
.test_results :
ValueError()
output_path = output_path os.path.join(
.config[],
)
os.makedirs(os.path.dirname(output_path), exist_ok=)
(output_path, , encoding=) f:
json.dump(.test_results, f, ensure_ascii=, indent=)
.logger.info()
output_path
Exception e:
.logger.error()
():
generator = TestReportGenerator()
()
generator.load_test_results()
()
html_path = generator.generate_html_report()
()
()
json_path = generator.generate_json_report()
()
__name__ == :
main()
pip install matplotlib
generator = TestReportGenerator()
generator.load_test_results('test_report.json')
html_path = generator.generate_html_report()
json_path = generator.generate_json_report()
config = {
'report_dir': 'custom_reports',
'report_format': 'html',
'include_charts': True,
'include_coverage': True
}
generator = TestReportGenerator(config)
效率提升了 10-20 倍!
通过这 3 个技巧,我用 Trae 成功生成了一套完整的自动化测试框架:
整个测试流程从 2-3 天缩短到几分钟,效率提升了 10 倍以上。测试团队现在可以专注于测试用例的设计,而不是重复的手动工作。
如果你也想提升测试效率,不妨试试用 Trae 生成自动化测试框架,相信会有意想不到的收获!

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online