游戏测试 游戏自动化协议测试工具的开发个人思路

锅锅的锅 · 2022年01月12日 · 最后由 小小工具人 回复于 2023年01月06日 · 5858 次阅读

前言

自己从零到 1 尝试弄的一款工具,从一开始的第一步,了解封包,会了封包成功发了第一条协议后,再想如何摆放文件,(其中文件命名想了好久,大概是因为经验不不够)如何整理测试结果,到现在最终的成品,用的话是能用,但是总感觉差点什么。
写这文章的时候纠结了好久怎么写才能表达清楚,因为代码不能公开的原因,原本想着写一条用例出来,这样可能更让人明白点,不过最终还是放弃。。。

概括:

基于 pytest 进行用例组织,运行和聚合报告
使用生产者消费者设计模式进行协议收发
gitlab CI 实现自动定时触发

使用语言:python3.7+
框架:pytest

一、场景

1、功能接口自动化测试
2、批量、重复性测试数据构造

二、目录结构

|_agent
|_case
--|_XX 功能
----|_get_xxdata.py
----|_xx_test.py
----|_conftest.py
--|_XX 功能
|_conftest.py
|_command-protocol
|_common
|_dist
|_docs
|_gameconfigs
|_gametools
|_pb2
|_report
|_utils
pytest.ini
run.py
setting.yaml

三、目录介绍

agent: 前后端交互层,新写一条协议时,先在这里写好该协议请求方法
case: 用例存放目录,每个功能新建一个文件夹,其中 conftest.py 执行用例前的预处理和后处理工作,无须导入,用例函数中传入固件名称即可
command-protocol: proto 文件
common: 协议工具文件
dist: 存放打包好的测试数据工具文件
example: 示例文件,有些不熟悉的函数使用示例
gameconfig: 游戏项目配置,主要是策划配置
gametools: 测试数据构造文件
docs: 项目文档相关
pb2: Protobuff 转成的 pb 文件
report: 运行报告目录(不上传到远端,运行后产生在本地)
utils: 一些辅助脚本,例如导 pb,生成结果码文件
pytest.ini: pytest 运行设置文件
requirements.txt: 第三方包导入文件
run.py: 运行用例入口文件

四、功能接口 CASE 运行流程


五、数据构造

1、抽卡场景

2、组队队友/机器人
(当懒得开多个真机客户端,或者手上没真机)

六、用例录制

非游戏嵌入式的一种做法,粗略讲下自己的想法
用 Wireshark 捕获网络包,保存 Wireshark 文件,把 Wireshark 文件解析成 json 文件,协议工具再读取 json 文件,解析成一个个用例步骤。

最后:
文章可能写得不清楚,如果大家有兴趣或者有啥建议的话可以留言

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 8 条回复 时间 点赞

顶一下

这个思路我之前也尝试过, 有遇到两个比较大的问题:

  1. 我们服务端有进行协议的序列号验证, 重复协议重发无效, 这个需要服务端配合改逻辑, 在某个测试环境下, 支持协议重发
  2. 抓包在实际执行时, 会有一些奇怪的问题, 这个估计和每个游戏的协议实现有关
活在当下 回复

并不是说直接拿来就用喔,重新处理过一下,算一条新的那样。就是你说的那个序列号的处理了。当前叫服务端配合改也行。
然后奇怪的问题我好像倒是没处理过。
这里我录制的最重要目的是为了生成一个用例模板那样,还有拿返回来当断言。

写得很好,但是抓包没必要再解析成 json,用例一边执行一边解包就可以了

之前做的时候是 hook 地址出来,然后去操作,好处是随时可以录制。发送。解析的部分用 cpp,不会像 python 一样存在吃性能的瓶颈

wireshark 抓包?移动端其实可以用 qnet 抓包。
还有就是,游戏项目应该挺多都是 socket 协议吧?发之前需要序列化、加密,从后端拿到返回,还需要解密、反序列化。虽说加解密和序列化这块都有现成的模块,但不同的项目做法都不太一样。比如我现在很头疼的一点是,我们项目用的是 unity,C#+lua 写的客户端,然后通信模块用的是 C++。。纠结过好一阵子,最后想了想还是用 lua 写,但 lua 加载 C++ 的 dll 还在头疼怎么搞定。
希望楼主早日做出点成果,等我解决了目前的问题好来抄作业😂

JarvanRookie 回复

直接用 so 就好了,全都封装好,调用就可以了,不是更简单吗

用例定制哪里可以直接搞解析器把协议数据解析成可视化结构就好了,就不用对着 wireshark 去一条条转结构了

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册