我在游戏产业,很真实的,看着测试从三驾马车,一路掉到现在这个地步。如果真的没啥技能门槛了,现在测试地位其实还蛮尴尬的。
bim 模型,3d 图形,Three.Js 的吗?这块不会,关注下回答。
我之前对于 Three.Js 做工具这块,倒是有个想法。
老脸一红,学习中学习中。
是这样的,说下自己个人见解,先从目标一和目标二来说下,先拿 Python 技术栈来说,无论目标一还是目标二都是一个混合多个技术栈大目标,但是测试不仅仅只有这些。
目标一:
逐步系列可以参考https://testerhome.com/topics/27935
如果性子比较急可以参考 https://testerhome.com/topics/24240
简述下过程,拿 Tcp +pb 举个例子
协议接口是做得最外层 controller 中得 apipath,这个需要做过 controller 和 service 和 model 得更好理解。
只是游戏得这个 apipath 是通过几个结构体信息去拼接到一起的,而不是一个直接对象的拷贝。
通过 socket 去模拟客户端链接服务器,链接后 先需要按项目要求 把包头和包体拼接成一个字节数组(包体部分就是用 pb 序列化 pack 到包体部分),然后通过 send 拼接得字节数组 发送到服务端。服务端开始处理(这部分不用考虑),服务器验证协议发送正确后,回包给客户端,客户端开始进行解包(这部分 Tcp 涉及处理粘包),会收到多个包,根据包里面的命令号去决定是否要解哪个包。
解包需要做 pb 反序列化 +pb format 变成可读的 dict,dict 里面需要取出一些变量存储内存中,其他地方可以用到。(这个就是所谓得上下文,也是基础级别得)
目标二:
jmeter 做压测,支持的协议是需要开发 Java 转换成 Jar 再载入进去。并且 Jmeter 还需要对设置进行优化才能提供到生产那边。Python 来说 Locust 似乎也是不错的选择,原来开源了 Tcp+ 非 zeromq 版本的,后面删了。
你可以先试试 Python 栈的这个,做压测需要了解网络模型和异步 task。
目标二建议有一定基础项目,可以读源码解决问题时再开发做。
Python 可以先集中到一定阶段后,再建议换一门语言,Java 和 Golang 都是不错的选择。
Python 之前有个一个小标准,建议可以参考下,之前只对自己有这个要求,这样才能再开发上面得心应手,数据结构设计和运用时可以心到手到。
1.各种数据结构转换 和任意位置插入,删除,查找。(面向对象,就是知道对象是啥,如何转换对象进行衔接,用别人的 Apier 和自己写 api 这个是最基础的)
2.熟练掌握类,类动态增改复位对象,类里面成员函数,类变量,实例区域里面得对象存储起来,在上下文中如何使用,了解时序的概念。 python 是推荐用面向对象编程得语言。1 和 2 最好都要做到不查资料就能写。
3.掌握有限状态机和标志位写法。(2,3 二条可以避免代码是看起来串一起的,这个不影响可读性也不是花式写法)
4.反射应用熟练,掌握 Python 常用得魔术方法(约 12 个)并且不用查资源都知道返回对象是啥。
5.掌握 Python 语言核心特性,闭包装饰器,偏函数,列表推导式,字典推导式和 Python 一些便利写法。(推荐看下巴西开发者 写得书)
6.掌握常规的数据库使用方式并且做过封装,会跨数据库数据和跨表查询(这个很关键吧,后者我搞不懂为啥只要求开发会)
似乎没看到四大模块中的自动化,其实游戏自动化已经变化很大,只有加了核心步骤和控件就不在原来界面了,才会需要大改。只是换了位置和大小修改,加了非核心步骤,是可以做到维护脚本的。
自动化本身跑的就是功能测试用例,可以做任何你想得到得结合都行(我自己规划组件数量可以有 70 个,目前所效力得公司才做了 6 分之一不到。)
e.g 自动化不想跑新手引导,可以下线调用接口测试那边跑完新手引导,也可以修改数据库后重启服务,获得标志位,再次上线。
也没有看到持续集成 CI/CD 分别是 2 个东西,内容还是挺多的。Python 对 Jenkins 库 Api 支持也是极好的。
工具才是大头吧,工具对比四大模块比例是 7:3 设置更高。
似乎前期都不用顾虑和思索比较深,先钻进去学吧(这里面不包含多线程/进程,协程,锁等等),就算做框架和产品也不是全部想清楚就不会中途修改和优化的,代码数量和工具项目引发的量变一定会质变,代码写多了用开源才能得心应手啊(手动猫头)
游戏测试要掌握技术栈可能要比互联网测试多的多,语言才是硬道理,但是测试如果喜欢他钻研进去就不仅仅是职业。回复太多了。有点长,慢慢看。
这个是一个接口参数化的问题,比如用数据库内读取一批数据到内存里面,用掉一个就推出去一个。每次跑的都是第一行数据。
如果是线上避免污染的,可以接口测试前置开发切换成新环境/新表(这个是比较常见的),接口测试结算任务时删除新表,做相关的复位。
效能分为 3 个层面,第一面减少时间损耗,第二面是增加产能,减少消息孤岛。第三面是得到全景图才能合理调兵谴将。。前者是做门禁,不要轻易就准出了。后者收益最大一开始肯定是造数和造环境和做一些同步报警即将超时和 x 小时未处理任务状态的事情。
最后一个是要做产能统计,有数据才能知道提升和降低了。
。。。我拿去垫枕头吗。
你那个版本的 pycharm 有点🐂啊,这都没抛错。~看 b() 下面的 print 和 b() 都有提示线了,只是白底不容易显示。
广州大立信 海珠区 368 号别被吃掉啊,看微信哪年开始招人暴涨就知道了。广州网易实力雄厚,多玩虎牙,UC 等等。
正常的,因为上面代码是 btn 和方法处于同一个级别作用域,大白话来说,对象管理只有下个级别的可以访问上个级别的。
如楼上所说需要把 btn 加一个关键字 global,来标记 btn 是当前文件内全局可以访问的,btn 泛指在堆上的,不同方法之间不共享。
推荐用类来写。
有一个坑点说下,go mod build 会安装 viper last tag v1.7.1,但是最新版本不是一个经过验证的稳定版本,官方的依赖有问题。
请使用 go get github.com/spf13/viper@v1.6.3
...我知道 R 语言可以做啥啊🤦
要看什么模型的,也就是你选择用的包。有的样本数不用很多。
测试和统计学是不分家的,上面第一段写了场景。
https://testerhome.com/topics/27949 第二个文章出来了。
单测我是这么看的,使用状态位,只用断言 True 就行,这样代码更容易做模板类代码
//var 在@Before里面是定义为false
//当满足条件在if区域内把 var=true
然后用assertTrue(failMsg,var)进行判断。
挺好的分享,字符串模板形式的。
boomer 刚出时玩了一会,mq 那层后的确比 locust 本身好。
set 那层测试任务,安利一种注册的写法。
func NewCatLocust() *boomer.Task {
task := &boomer.Task{
Weight: 1,
Fn: TaskList,
Name: "TestType+游戏名称",
}
return task
}
TaskList 内部通过 registerFunc(taskName string, f func() error) 注册到一个支持权重范围的 WeightedFuncs() Map 对象里面后,进行压测。
func registerFunc(taskName string, fc func() error) {
st := time.Now()
err := fc()
if err != nil {
boomer.RecordFailure("xxGame", taskName , e.Milliseconds(), err)
} else {
end := time.Since(st)
boomer.RecordSuccess("xxGame", taskName , e.Milliseconds(), 0)
}
}
原来我也是,但是只检查这些会漏一些问题啊。
举个例子:
在静态表规则里面,道具 ID 为 10001 的道具,这样的道具有 10 个,在背包内不可叠加,参数包含获取唯一。
通过配置表规则扫描,道具 ID 列表长度为 10,然后匹配参数,和 ID 匹配是 ok 了。
但是在动态配置表(接口配合造正常获取不到的环境情况下,去验证服务器健壮性和表设计),10001 道具在已经获得 1 个的情况下。
在各场景添加道具副本,比如仓库,临时背包,邮件内添加等,然后就出错了,这种出错基本就是攻击性的。
今天就会有。
好的没问题,这些一点点从客户端往服务器发去展开。不过多路复用是在服务器端的,也会讲的。
感谢会持续创作的,后续帖子里面还会发布一些关于业余时间用 Python 游戏服务端的一些组件设计,配合 client 端调式。
工具开发思想是从小做大,多个小工具需要串联占领部分流程,先谈需求再做。
再用小工具抽象进化成通用的,不同通用工具有不同的隐式分类,回头可以关注社区的一个白皮书。
测试还是开发?大数据有很多中间件,消息队列和查询引擎,处理引擎。
测试的话就从 ETL 的 ET 开始搞起好了,比如 kettle 和积累一些不同流程需要的数据特征进行造数,造数和入数仓 hive 等是必学的啊。
测试要做好造数和倾斜数据需要用模型去对抗开发模型,只是老的方式填充数据到分区,造 N 套,效率更不上的。
宽表特征和必备数据用建模和加工自己去创建测试数据。
开发的话从 docker-->Flink 集群这块先搞起来。
不一定要刷很多算法题啊,不如找几个小工具开发下。算法可以以下学习路线:
1.大 O 评估核心代码复杂度理论知识,知道循环体内外的差别,最好结果和最差结果,学习 O(1),O和 O(log(n)) 分别是什么,这个多练就行,(不同数据量下面是不一样的)最糟糕是 O(n2)。
2.排序常见算法,选择排序在于比较和交换,希尔排序在于学会分桶和处理余数,这些对于跑任务用多线程/多进程分治有关系。
3.如果是 Python 的还是先学生成器吧,这个是灵魂啊,不学一跑就爆栈了。当然你可以用缓存和设置更多的栈长,这些是没掌握生成器前的。然后再看贪心算法(不用回溯的)
4.树相关的,需要会写树和前后序,Btree 和哪些有关。
5.数据库相关的合并排序等等。
后面都可以自己补充了,祝你早日找到心仪的工作。多来 Testerhome 看帖子。
不好意思,刚看到
首先:websocket 正常情况下是没有做分包,所以不用从包头取包体对象。
客户端序列化数据-->服务端,但不代表服务器发回给客户端的一定是同样序列化方式,具体看业务。
websocket 收包按游戏来说需要设置为二进制的形式,默认是 text。
代码不是很全,logininfo 应该是 一个 pb 对象函数返回,然后 logininfo.ParseFromString(xxxx) 才能进行反序列化。
messageId 是协议号。另外 websocket+pb 一般会做一些签名验证的方式来确保包安全性,所以可以问问是否在发包前和后需要对这块进行签名和解签名。
最后,让 pb 对象可视化一点,可以用 pbjson.py。网上开源的。