Gamium is a game testing automation library. Its purpose is to enable control over UI, input, and other aspects of games developed using engines like Unity and Unreal, without the need to rebuild the game.

Use Cases

Gamium primarily focuses on frequent requests to check if a UI button is displayed and, if so, to perform a click action. The following code snippet provides an example:

const button = await ui.wait(By.path('Object path'));
await gamium.wait(Until.elementInteractable(button));
await button.click();

The Gamium client continuously sends requests to the Gamium Engine and waits until the element with the corresponding object path is displayed. The Gamium Engine processes all these requests without affecting the game's FPS, memory, and other aspects.

Serialization

Serialization protocols such as Protocol Buffers (protobuf) and Flatbuffers were available, but we chose to use Flatbuffers. Both protocols offer excellent performance and support multiple programming languages. However, we needed to select the protocol that best suited our project. After considering Flatbuffers and protobuf, we discovered differences during the library implementation process.

For our Gamium Engine SDK, we needed a straightforward library integration process. This way, developers using the Gamium Engine SDK could easily apply the serialization protocol. From this perspective, we chose Flatbuffers. In C++, applying Flatbuffers only required including the .h file, while in C#, adding the .cs file to the project was sufficient. There was no need to import prebuilt libraries like .dll specific to platforms, eliminating any potential inconvenience. The integration process was straightforward.

Network

Several communication methods, including HTTP, WebSocket, and TCP, could be used for communication between the Gamium Engine and Gamium Client. We chose TCP as our communication protocol. We excluded HTTP because it involves one-time connections, which could impact performance. WebSocket and TCP seemed comparable once the connection was established. However, WebSocket lacked built-in modules in C++ and C#, requiring the use of external modules. On the other hand, TCP was supported by default in each language as it provided socket functionality. This was especially advantageous in C++. For C++, adding a single module required configuring it to be imported differently for different platforms, such as .dll, .lib, .a, .so files.

Conclusion

Game modules should always be developed with performance in mind. Gamium, an open-source game testing automation tool available at Gamium, offers both performance and easy portability. It supports various game engines and client languages, allowing for quick resolution of repetitive and tedious tasks in many projects. If you believe that Gamium can increase productivity in your current project, don't hesitate to give it a try.