文章目录
- 第1周 周六 Python学习执行方案(游戏测试定向·第一周知识整合+实战拔高)
-
- 一、 20分钟快速复盘:第一周核心知识点(必记必背,查漏补缺)
-
- 基础语法:变量 & 数据类型
- 核心操作:字符串处理(日志分析基石)
- 逻辑控制:条件判断 + 循环(批量处理核心)
- 进阶技能:函数定义与调用(代码复用核心)
- 二、 50分钟综合实战:2个游戏测试实用工具开发(今日核心)
-
- 实战1:游戏日志分析通用工具V3.0(整合版,每日工作直接用)
- 实战2:游戏测试数据批量生成工具(造数据神器,测试必备)
- 三、 今日学习复盘:第一周知识落地总结
- 四、 周末学习建议
第1周 周六 Python学习执行方案(游戏测试定向·第一周知识整合+实战拔高)
今日学习时长:70分钟(20分钟知识复盘 + 50分钟综合实战) 核心目标:整合第一周全部知识点(变量/字符串/条件判断/循环/函数),完成2个高贴合游戏测试工作的综合实战项目,实现从「零散知识点」到「完整测试工具开发」的跨越,让代码真正落地工作提效 前置基础:完全基于周一至周五所学内容,无任何超纲语法,核心是「知识融合+实战落地」,重点锻炼代码逻辑设计能力(游戏测试自动化的核心能力) 学习价值:今日实战的2个工具,是游戏测试日常工作中可直接复用的实用工具,写完后替换真实数据就能投入使用!
一、 20分钟快速复盘:第一周核心知识点(必记必背,查漏补缺)
用「一句话总结+核心语法」的形式,快速回顾第一周所有知识点,形成完整的知识体系,为综合实战打基础,忘记的地方立刻回头翻看对应天数的笔记!
基础语法:变量 & 数据类型
- 核心作用:存储测试数据(日志、角色信息、用例参数)
- 常用类型:字符串str(日志/角色名)、列表list(批量日志/用例)、整数int(等级/血量/统计数)
- 核心语法:name = "测试角色"、game_logs = [日志1, 日志2]、count = 0
核心操作:字符串处理(日志分析基石)
- 核心作用:拆分/拼接/查找日志、角色信息中的关键字段
- 3个高频函数:
- split(分隔符, 次数):拆分日志(时间/模块/内容)
- find(子串):查找日志中的Crash/Error关键词
- 字符串拼接:f"时间:{log_time}"(标准化输出)
逻辑控制:条件判断 + 循环(批量处理核心)
- 条件判断if-elif-else:日志分级、用例结果判断、数据校验
- 循环:for遍历批量数据(日志/用例/角色),while处理动态条件(重试/监控)
- 循环控制:continue跳过无关数据,break终止高优先级错误(Crash)
- 核心口诀:for遍历、while循环,continue筛选、break止损
进阶技能:函数定义与调用(代码复用核心)
-
核心作用:把固定逻辑(日志拆分、等级判断、批量分析)封装成独立函数,一次编写、多次调用
-
核心语法:
def 函数名(必选参数, 默认参数=默认值):
函数逻辑
return 返回值1, 返回值2 # 可返回多个值 -
调用:结果1, 结果2 = 函数名(参数1, 参数2)
第一周核心思维:模块化思维 把复杂的测试需求(比如日志分析)拆分成「小功能」(拆分日志、判断等级、批量遍历),每个小功能封装成函数,最后组合函数实现完整功能——这是开发所有测试工具的核心思维!
复盘自检(5个问题,全答上来=第一周知识掌握到位)
二、 50分钟综合实战:2个游戏测试实用工具开发(今日核心)
今日实战不做新知识点讲解,全程复用第一周知识,完成2个游戏测试日常工作中高频使用的工具,工具1偏「日志分析」(每日必做),工具2偏「测试数据生成」(造数据必备),均为可直接复用的完整代码,替换真实数据即可投入工作!
实战1:游戏日志分析通用工具V3.0(整合版,每日工作直接用)
🔍 工具场景 游戏测试服每日产生大量日志,需要实现**「批量分析+异常筛选+模块过滤+结果导出」** 全流程功能,替代人工翻日志、手动整理异常的低效工作,生成的异常日志可直接导出为txt文件,附在bug单/测试报告中。
🎯 工具目标
📝 完整可运行代码(文件名:game_log_analysis_tool.py,直接复制到VS Code运行)
# ============== 游戏测试专用 – 日志分析通用工具V3.0 ==============
# 第一周知识整合版:字符串+条件判断+循环+函数+文件操作(简易)
# 工具功能:批量分析+模块筛选+异常分级+结果导出
def parse_log(log_line):
"""【功能1】拆分单条日志:提取时间、模块、内容,兼容常规日志格式"""
if log_line.count(" ") < 3:
return "未知时间", "[未知模块]", "日志格式错误"
log_parts = log_line.split(" ", 3)
log_time = log_parts[0] + " " + log_parts[1]
log_module = log_parts[2] if "[" in log_parts[2] else f"[{log_parts[2]}]"
log_content = log_parts[3]
return log_time, log_module, log_content
def get_log_level(log_line):
"""【功能2】判断日志等级:Crash(严重)>Error(错误)>Warning(警告)>Normal(正常)"""
if "Crash" in log_line:
return "严重", 4 # 数字用于统计排序
elif "Error" in log_line:
return "错误", 3
elif "Warning" in log_line:
return "警告", 2
else:
return "正常", 1
def filter_module_logs(log_list, target_module="All"):
"""【功能3】筛选指定模块日志:默认筛选所有模块,支持精准过滤"""
filtered_logs = []
for log in log_list:
if target_module == "All" or target_module in log:
filtered_logs.append(log)
return filtered_logs
def batch_analyze_and_export(log_list, target_module="All", export_path="game_abnormal_logs.txt"):
"""【功能4】批量分析+导出异常日志:主函数,调用上述所有函数"""
# 1. 初始化统计变量
total_count = len(log_list)
abnormal_count = 0
level_count = {"严重":0, "错误":0, "警告":0, "正常":0}
abnormal_logs = [] # 存储异常日志,用于导出
# 2. 筛选指定模块日志
filtered_logs = filter_module_logs(log_list, target_module)
filter_count = len(filtered_logs)
# 3. 批量遍历分析日志
print(f"===== 游戏日志分析报告【{target_module}模块】=====\\n")
print(f"原始日志总数:{total_count} 条 | 筛选后日志数:{filter_count} 条")
print("-" * 60 + "\\n")
for log in filtered_logs:
log_time, log_module, log_content = parse_log(log)
log_level, level_code = get_log_level(log)
# 统计各等级数量
level_count[log_level] += 1
# 标记异常日志并统计
if log_level != "正常":
abnormal_count += 1
abnormal_logs.append(f"【{log_level}】{log_time} {log_module} {log_content}")
# 标准化打印单条日志结果
level_icon = {"严重":"❌", "错误":"⚠️", "警告":"🔶", "正常":"✅"}[log_level]
print(f"{level_icon} {log_level} | {log_time} | {log_module} | {log_content}")
# 4. 打印统计总结
print("\\n" + "-" * 60)
print(f"📊 分析总结:共分析{filter_count}条日志,异常日志{abnormal_count}条")
print(f" 严重:{level_count['严重']}条 | 错误:{level_count['错误']}条 | 警告:{level_count['警告']}条 | 正常:{level_count['正常']}条")
# 5. 导出异常日志到txt文件(核心实用功能)
if abnormal_logs:
with open(export_path, "w", encoding="utf-8") as f:
f.write(f"游戏{target_module}模块异常日志分析报告\\n")
f.write(f"生成时间:{time.strftime('%Y-%m-%d %H:%M:%S')}\\n")
f.write(f"异常日志总数:{abnormal_count}条\\n")
f.write("-" * 50 + "\\n")
for abnormal_log in abnormal_logs:
f.write(abnormal_log + "\\n")
print(f"\\n📁 异常日志已导出至:{export_path}(可直接附在bug单/测试报告)")
else:
print("\\n✅ 未发现异常日志,无需导出")
# ============== 工具调用入口:替换成你的真实日志即可 ==============
if __name__ == "__main__":
import time # 用于导出文件的生成时间
# 模拟游戏测试服真实日志(可直接替换为工作中的日志列表)
test_game_logs = [
"2026-01-25 08:30:00 [Login] 玩家-清风-登录成功,账号:test001",
"2026-01-25 08:35:00 [Login] Crash:服务器验证失败,客户端闪退",
"2026-01-25 08:40:00 [Prop] Error:道具ID=5008发放失败,库存不足",
"2026-01-25 08:45:00 [Combat] Warning:技能ID=102冷却时间计算异常",
"2026-01-25 08:50:00 [Prop] 玩家拾取道具ID=1001,数量:1",
"2026-01-25 08:55:00 [Combat] Crash:怪物攻击导致角色血量溢出",
"2026-01-25 09:00:00 [Chat] 玩家-星河-发送聊天消息:组队刷副本"
]
# 调用1:分析【所有模块】日志,导出异常日志到默认文件
batch_analyze_and_export(test_game_logs)
# 调用2:分析【Login模块】日志,自定义导出文件名称(取消注释即可运行)
# print("\\n" + "="*80 + "\\n")
# batch_analyze_and_export(test_game_logs, target_module="Login", export_path="login_module_abnormal_logs.txt")
运行结果(3个核心输出)
实战验收标准
实战2:游戏测试数据批量生成工具(造数据神器,测试必备)
🔍 工具场景 测试角色创建、升级、战斗、道具系统时,需要大量不同职业、不同等级、不同属性的角色测试数据,人工创建耗时费力,该工具可实现「指定数量+自定义属性规则+标准化导出」,1秒生成100条符合游戏规则的角色数据。
🎯 工具目标
📝 完整可运行代码(文件名:game_role_data_generator.py,直接复制到VS Code运行)
# ============== 游戏测试专用 – 角色测试数据批量生成工具 ==============
# 第一周知识整合版:循环+函数+字符串+条件判断+文件操作
# 工具功能:自定义数量+多职业+属性关联+数据导出
def generate_role_data(role_count, jobs=["战士", "法师", "弓箭手", "牧师"]):
"""
生成指定数量的角色测试数据
:param role_count: 生成角色数量(必选参数)
:param jobs: 职业列表(默认参数,可自定义)
:return: 角色数据列表,每条为标准化字符串
"""
role_data_list = []
print(f"===== 开始生成{role_count}个游戏角色测试数据 =====\\n")
# for循环批量生成,属性规则贴合游戏设计(等级与血量/攻击力正相关)
for i in range(1, role_count + 1):
# 基础属性
role_id = f"role_{i:03d}" # 角色ID补0,如role_001、role_002
role_name = f"测试角色_{i}"
role_job = jobs[i % len(jobs)] # 循环分配职业,适配任意职业列表
role_level = i * 10 # 等级:10/20/30…递增,可自定义规则
# 衍生属性(贴合游戏规则,可按需修改)
role_hp = role_level * 60 # 血量=等级*60
role_attack = role_level * 5 # 攻击力=等级*5
role_defense = role_level * 3 # 防御力=等级*3
role_mp = role_level * 40 # 蓝量=等级*40(法师/牧师专用,战士/弓箭手为0)
role_mp = role_mp if role_job in ["法师", "牧师"] else 0
# 标准化拼接角色数据
role_data = f"ID:{role_id} | 名称:{role_name} | 职业:{role_job} | 等级:{role_level} | 血量:{role_hp} | 攻击力:{role_attack} | 防御力:{role_defense} | 蓝量:{role_mp}"
role_data_list.append(role_data)
print(role_data)
return role_data_list
def export_role_data(role_data_list, export_path="game_role_test_data.txt"):
"""
导出角色数据到txt文件
:param role_data_list: 角色数据列表(必选参数)
:param export_path: 导出文件路径(默认参数)
:return: 无返回值,直接导出
"""
import time
with open(export_path, "w", encoding="utf-8") as f:
f.write(f"游戏角色测试数据生成报告\\n")
f.write(f"生成时间:{time.strftime('%Y-%m-%d %H:%M:%S')}\\n")
f.write(f"生成角色总数:{len(role_data_list)}个\\n")
f.write("=" * 80 + "\\n")
for role_data in role_data_list:
f.write(role_data + "\\n")
print(f"\\n📁 角色测试数据已成功导出至:{export_path}")
print(f"✅ 共导出{len(role_data_list)}个角色数据,可直接用于测试用例/游戏创建角色")
# ============== 工具调用入口:修改参数即可自定义生成 ==============
if __name__ == "__main__":
# 调用1:生成10个角色,使用默认职业列表(战士/法师/弓箭手/牧师)
role_data = generate_role_data(10)
export_role_data(role_data)
# 调用2:生成8个角色,自定义职业列表(坦克/刺客/辅助)(取消注释即可运行)
# print("\\n" + "="*100 + "\\n")
# custom_jobs = ["坦克", "刺客", "辅助"]
# role_data_custom = generate_role_data(8, custom_jobs)
# export_role_data(role_data_custom, export_path="custom_role_test_data.txt")
运行结果(2个核心输出)
实战验收标准
三、 今日学习复盘:第一周知识落地总结
今日核心收获
2个实战工具的工作应用场景
| 日志分析通用工具V3.0 | 测试服每日日志分析、版本更新后日志排查、bug单附异常日志 | 替代人工翻日志,1秒完成批量分析,准确率100% |
| 角色测试数据生成工具 | 角色功能测试、战斗系统测试、数值平衡性测试造数据 | 1秒生成任意数量的角色数据,避免人工创建的繁琐 |
第一周学习打卡总表(直接填写,完成第一周闭环)
| 周一 | 变量/数据类型/角色信息管理 | |||
| 周二 | 字符串操作(split/find)+ 日志字段拆分 | |||
| 周三 | if-elif-else + 逻辑运算符 + 日志分级 | |||
| 周四 | for/while循环 + break/continue + 批量日志分析 | |||
| 周五 | 函数定义/调用/参数 + 日志分析逻辑封装 | |||
| 周六 | 知识整合 + 2个游戏测试实用工具开发 |
四、 周末学习建议
周末学习建议(轻松巩固,不耗时)
网硕互联帮助中心






评论前必须登录!
注册