近期为了丰富UE4插件UnrealAutomator的基础功能,在ProfileService中增加了LLM数据获取的方法。LLM拥有抓取UE4底层模块内存使用情况的功能,各种Modules按照LLM的规范实现相应宏即可将内存使用数据实时更新到LLM系统中。如果从产品外部,是难以直接访问这些信息的。
以UE4.24为例,用C++在UE4插件实现LLM数据获取的方式如下:
近期为了丰富UE4插件UnrealAutomator的基础功能,在ProfileService中增加了LLM数据获取的方法。LLM拥有抓取UE4底层模块内存使用情况的功能,各种Modules按照LLM的规范实现相应宏即可将内存使用数据实时更新到LLM系统中。如果从产品外部,是难以直接访问这些信息的。
以UE4.24为例,用C++在UE4插件实现LLM数据获取的方式如下:
UE4游戏/手游自动化测试有很多方案可以执行,不论是传统的UI测试方法还是具备前瞻性质的以图像识别+机器学习技术为主的方法,都能够满足不同的需求。适逢1024节日,受到GAutomator和PocoSDK的启发,笔者近期决定开始UE4专属自动化测试插件UnrealAutomator的研发。当前已经集成并扩展了GAutomator的UI信息检索功能,已经能够满足UI测试服务端的基本需求。
UnrealAutomator的核心愿景,是希望集成游戏QA同学日常测试需求相关的功能到统一的插件当中,并在稳定的通信协议基础上设计易于扩展/二次开发的SDK,让各个UE4手游测试组能够比较容易地根据自己的需求去进行定制。相比较原有在UE4上的解决方案,PocoSDK的UE4插件并不能够像GA一样,通过AndroidWindow获得安卓手游的控件的精确位置;而GAutomator的UE4仅仅是集成了UI检索的功能,剩余的功能都需要GAutomator Python Client Module实现,且由于GA Client Module直接在代码实现中耦合了UIAutomator跟WeTest的相关功能,二次开发极其不方便。因此,UnrealAutomator将采取如下的方案解决这些问题:
前些天在写UnrealAutomator的Web解析模块的时候,遇到了一些USTRUCT方面的问题,由于笔者以前并非UE4程序员,因此踩了一些坑,果断分享一下踩坑历程。
首先聊一下USTRUCT的生成。USTRUCT是UE4的特性之一,从非C++/UE4程序员的角度来讲,USTRUCT、UPROPERTY、GENERATED_BODY之类的概念类似于注释和装饰器的作用,可以在编译等时期将代码标识的内涵纳入自己的Runtime。举一个例子,UnrealAutomator中的UIModel.h:
Jetbrains家的IDE,默认安装之后,配置和插件都存储在系统特定的文件夹中,如果是Windows系统的话,就会在用户文件夹存储。这样就滋生了一个问题:随着插件等安装的越来越多,系统盘也会占掉一些空间,这个时候就有了转移默认插件与配置路径的需求。今天就以IDEA为例讲述一下如何操作。
很久以前写过一篇文章:《测试、策划与开发,谁来把控游戏的质量》,聊了一下测试、策划和开发三者的关系。时至今日回头来看,大方向还是差不多的。在某些地方,测试地位低,被策划跟开发冷眼相看,所以让他们开心就好;在某些地方,测试、策划和开发也可以在同一层次上讨论需求与研发过程的好坏。说白了,把控游戏质量,是三个部门一起的责任,而且测试并不是必须要为策划和程序收烂摊子。
游戏自动化该怎么做?这是一个值得探讨的问题。在中国,用手游自动化来描述,可能更为贴切。游戏自动化技术并不难以上手,有许多现成的工具提供使用。但是,要想做好游戏自动化,让其真正服务于游戏研发/运营期业务,并不是一件容易的事情。
大型的游戏项目包含许多错综复杂的业务逻辑,针对UE4游戏而言,如果纯粹采用C++编写的话,一方面会增加大量的劳动成本,影响效率,另一方面难以解决游戏热更的问题。lua作为胶水语言,能够与C/C++/C#等语言互通,简化业务逻辑编写,并且支持热更。针对UE4的游戏开发,UnLua以及sluaunreal都是采用lua编写逻辑的解决方案。
作为一个没有怎么接触过游戏开发技术栈的小白,本文主要上手UnLua的使用。
手机投屏/录屏在测试领域的用途有很多,比如:
当前手机投屏/录屏的解决方案有两个:STF的minicap以及Genymobile的scrcpy。今天则稍微介绍一下scrcpy,能够兼容各类安卓手机,并且在投屏方面,低延迟与高清晰度兼具。
在研发代码覆盖率测试工具的时候,通常除了代码覆盖数据收集模块之外,一般还要研发前端展示的部分以展现代码覆盖分析报告,通常会为每一个文件增加行染色,类似于jacoco这种形式。
然而代码覆盖报告实际出来的行染色,会出现许多正常代码行没有着色的情况。这是因为编程语言认为的“行”和本身我们在文本编辑器打出的”行“是不一样的。编译出来的“行”实际上是一段操作,比如我们定义一个函数的时候,编译器认为我们执行的操作有包括function xxx那一行,于是就有一种情况——我们实际没有运行过这个函数,但由于定义被覆盖,因此出现function xxx染绿,而函数体染红的现象。从用户的角度而言,用户如果对代码编译这块并不熟悉的话,就会造成理解上的偏差。
因此考虑工作成本,如果有必要的话,需要对代码覆盖数据进行修改,从而展现更好的代码行染色效果。以lua为例,可以采用这样的方法:
在某些游戏研发or测试的需求中,需要在Unreal增加一个插件或者模块,里面启动一个服务器作为SDK,然后外部通过直连或者adb forward可以连接到客户端中,获取客户端实时的场景、actor信息等等。UE4本身除了socket server支持之外,也支持简单的HTTP Web Server。由于网上没有比较好的范例,因此这里给出一个例子。
本文以Unreal 4.24为例。搭建HTTP Server,需要在.Build.cs
中引入如下模块:
1 | PrivateDependencyModuleNames.AddRange( |
通过FHttpServerModule::Get()
方法,可以获得内置的HTTP Server模块的一个单例,该instance负责管理内置private的socket listeners。我们可以通过该单例获取HTTPRouter
,然后绑定路由跟handler,然后调用StartAllListeners
,就能够启动Web服务器。具体代码如下: