SlideShare a Scribd company logo
MULTIPLAYER
GAME TESTING IN
ACTIONS
Yevhen Rudiev
• QA Automation Lead at
GamePoint
• 7 years experience in IT
• 4 years experience in Automated
Testing
• Founder of Game Unit Lab
organization
GAMES
Multiplayer game testing in actions
Multiplayer game testing in actions
Multiplayer game testing in actions
Multiplayer game testing in actions
Multiplayer game testing in actions
GAMES
MULTIPLAYER
GAME
SERVER
DB
DESKTOP
CLIENT
WEB
CLIENT
MOBILE
CLIENT
PAYMENTPLATFORM
DB DB
ENTERPRIS
E
SERVER
DB
DESKTOP
CLIENT
WEB
CLIENT
MOBILE
CLIENT
PAYMENTPLATFORM
DB DB
CLIENTS
CLIENTS
CLIENTS
MAIN FOCUSES
• Interesting
• Easy to play
• Fast
• Beautiful
• Stable
• Synchronized
Multiplayer game testing in actions
Multiplayer game testing in actions
GAME
SERVER
DB
DESKTOP
CLIENT
WEB
CLIENT
MOBILE
CLIENT
PAYMENTPLATFORM
DB DB
MANUAL
END2END
SYSTEM
UNIT
UNIT TESTS
LEGACY CODE
REFACTORING
REFACTORING
SYSTEM TESTS
GAME SERVER
GAME
SERVER
CLIENT CLIENT
CLIENT
CLIENT
CLIENT
CLIENT
CLIENT CLIENT
DIFFERENCE
ORDINARY BACK-END GAME SERVER
VS
ENTERPRISE
SERVER
CLIENT
REST API
COMMUNICATION
GAME
SERVER
CLIENT
SOCKET API
COMMUNICATION
SOCKET
GAME
SERVER
CLIENT
SOCKET API
REST API
SOCKET
OWN TOOLS
FUNCTIONAL TESTS
GAME
SERVER
DB
CLIENT
FUNCTIONAL TESTS
GAME
SERVER
DB
TEST
FUNCTIONAL TESTS
SINGLEPLAYER
GAME
SERVER
DB
TEST
SINGLEPLAYER FLOW
PLAYER
public class Player
{
public int Id {get; set;}
public string Name {get; set;}
public string Password {get; set;}
private SocketClient Client {get;}
public void Login()
{
Client.Send(new Message(Protocol.C_LOGIN, this.Id, this.Password));
Client.MessageReceived(Protocol.S_LOGIN_OK);
}
}
PLAYER
[Test]
public void PlayerSetStatus_Away_Positive()
{
Given().PlayerLoggedIn();
When().Message(new Message(Protocol.C_SET_PERSONAL_MESSAGE, Status.Away))
.WasSent();
Then().MessageWithConditionReceived(Protocol.S_SET_PERSONAL_MESSAGE,
msg => msg.Value == Status.Away)
.DBEntityIsRecorded(entity => entity.PlayerId == Context.Current.Player.Id &&
entity.Status == Status.Away.ToString());
}
SINGLEPLAYER
MULTIPLAYER
GAME
SERVER
DB
TEST
MULTIPLAYER FLOW
PLAYER
PLAYER
[Test]
public void OpponentSetStatus_Playing_Positive_PlayerReceivedOpponentStatus()
{
Given().Opponents(1)
.OpponentLoggedIn(Context.Current.Opponents[0])
.PlayerLoggedIn();
When().Message(new Message(Protocol.C_SET_PERSONAL_MESSAGE, Status.Playing))
.WasSentBy(Context.Current.Opponents[0]);
Then().MessageWithConditionReceivedBy(Context.Current.Player,
Protocol.S_SET_PERSONAL_MESSAGE,
msg => msg.Value == Status.Playing.ToString());
}
MULTIPLAYER
GAME
SERVER
DB
TEST
SYNCHRONIZATION
PLAYER
PLAYER
ADMIN’S TESTS
GAME
SERVER
DB
TEST
ADMIN FLOW
PLAYER
ADMIN
GAME
SERVER
DB
TEST
ADMIN FLOW
PLAYER
PLAYER
ADMIN
[Test]
public void AdminBanPlayer_Success()
{
Given().PlayerIsAdmin()
.Opponents(1)
.OpponentLoggedIn(Context.Current.Opponents[0])
.PlayerLoggedIn();
When().Message(new Message(Protocol.C_BAN, Context.Current.Opponents[0].Id, “Reason: You was bad!”))
.WasSentBy(Context.Current.Player);
Then().MessageWithConditionReceivedBy(Context.Current.Opponents[0],
Protocol.S_BAN, msg => msg.Value == “Reason: You was bad!”)
.DBEntityIsRecorded(entity => entity.PlayerId == Context.Current.Opponents[0].Id &&
entity.Status == Status.Banned, entity.Reason == “Reason: You was bad!”);
}
ADMIN
DEPENDENT FLOWS
PLAYER
LOGIN
SEARCHING FOR A
OPPONENT
OPPONENT
LOGIN
ENTER INTO A
GAME
PLAY GAME
SEARCHING FOR A
OPPONENT
DEPENDENT FLOWS
PLAY AGAIN
ENTER INTO A
GAME
END GAME
LOSE
PLAY GAME
WIN
FEATURE BASED TESTS
[Test]
public void ClassicGame_PositiveScenario()
{
Given().Opponents(1)
.OpponentLoggedIn(Context.Current.Opponents[0])
.PlayerLoggedIn();
Feature<ClassicModeGame>()
.PlayerEntersToGame_Success(Context.Current.Player)
.PlayerEntersToGame_Success(Context.Current.Opponents[0])
.TwoPlayersAreReady_GameIsStarted()
.PlayerMakeWrongTurn_ScoreWasDescreased(Context.Current.Player)
.PlayerMakeGoodTurn_ScoreWasIncreased(Context.Current.Opponents[0])
.GameTimeWasFinished_ResultsWereReceived();
}
FEATURE BASED TESTS
GAME
SERVER
TEST
PARALLEL PROCESSING
P
P
TEST
P
P
TEST
P
TEST
P
TEST
P
P
TEST
P P
TEST
P P
A
CLIENT
CLIENT
DIFFERENCE
• Technologies
DIFFERENCE
DIFFERENCE
DIFFERENCE
• Technologies
• Test Frameworks
TEST FRAMEWORKS
TEST FRAMEWORKS
TEST FRAMEWORKS
TEST FRAMEWORKS
PUPPETRY
https://www.youtube.com/watch?v=miO5-jmOZPc
PUPPETRY
• Click
• SendKeys
• DragTo
• Swipe
• GetComponent
• GetCoordinates
• Count
public class LoginScreen
{
GameObject nameField = new GameObject(“Canvas”, “nameField”);
GameObject passwordField = new GameObject(“Canvas”, “passwordField”);
GameObject loginButton = new GameObject().ByUPath(“//Canvas//loginButton”);
public MainManuScreen MakeSuccessLogin(string name, string password)
{
nameField.SendKeys(name);
passwordField.SendKeys(password);
loginButton.Click();
return new MainMenuScreen();
}
}
PUPPETRY
TEST
[Test]
public void Login_CorrectCredentials_Success()
{
//Arrange
var name = "Yevhen";
var password = “SeleniumCamp2019";
//Act
var screen = new LoginScreen().MakeSuccessLogin(name, password);
//Assert
Assert.IsTrue(screen.IsScreenOpened,
$"Main Menu was not opened after login with {name} and {password}")
}
FUNCTIONAL UI TESTS
GAME
SERVER
CLIENT
APPROACH
TEST
CLIENT
APPROACH
TEST
TESTS
• CRUD tests
• Functional tests
GAME
SERVER
CLIENT
APPROACH
TEST
GAME
SERVER
FAKE
CLIENT
APPROACH
TEST
PLATFORMS
COMMON LOGIC
CUSTOM LOGIC
OTHER PLAYER RELATED UI
GAME
SERVER
FAKE
CLIENT
SOCKET API
OPPONENT
TEST CLIENT
GAME
SERVER
FAKE
CLIENT
FAKE CONTROLLER
TEST
REST API
SOCKET API
FAKE
REST
CONTROLLER
CONNECTION
CONNECTION MANAGER
CLIENT TEST
public class ScenarioBuilder
{
public ScenarioBuilder MakeSuccessLogin_MainManuIsLoaded()
{
Context.Current.Page = new LoginScreen()
.MakeSuccessLogin()
.IsLoaded();
return this;
}
public ScenarioBuilder StartPlayGame_SearchingForOpponentWasStarted()
{
Context.Current.Page = ((MainMenuScreen)Context.Current.Page)
.ClickPlayGameButton()
.SearchingForOpponentMessageIsShown();
return this;
}
}
PLAYER SCENARIO
END2END TESTS
GAME
SERVER
DB
CLIENT
PAYMENTPLATFORM
DB DB
TEST
GAME
SERVER
DB
CLIENT
PAYMENTPLATFORM
DB DB
TEST
GAME
SERVER
DB
CLIENT
PAYMENTPLATFORM
DB DB
TEST
GAME
SERVER
DB
CLIENT
PAYMENTPLATFORM
DB DB
TEST
LACK OF TECHNOLOGIES
CROSSBREEDING
CROSSBREEDING
• Puppetry + Appium
GAME
SERVER
DB
MOBILE
CLIENT
TEST
APPIUM
PUPPETR
YOPPONENT
CROSSBREEDING
• Puppetry + Appium
• Puppetry + Selenium
MANUAL TESTING
MANUAL TESTING
• New functionality
• Functionality that hard to automate
• Exploratory testing
• Layout and visual testing
• Testing of sounds
• Localization testing
WHAT’S NEXT?
• Performance testing of Game Server
• Performance testing of Client
• Visual testing
• Bot for exploratory testing
CONCLUSION
• Games are not usual enterprise application, but
have a lot of common
• You can re-use common approaches
• You can invent your own approaches
CONTACTS:
www.linkedin.com/in/yevhen-rudiev-a5609590
www.facebook.com/evgeniy.rudev.5
yrudiev@gmail.com
@gameunitlab
Multiplayer game testing in actions

More Related Content

PDF
Eclipse and Genymotion
PPTX
Gameplay: Inputs (Max Botviniev)
PPT
ЄВГЕН РУДЄВ «Multiplayer game testing in actions» QADay 2019
PPT
YEVHEN RUDIEV "Multiplayer game testing in actions" BAQ
PDF
STUDY OF AN APPLICATION DEVELOPMENT ENVIRONMENT BASED ON UNITY GAME ENGINE
PPTX
Software testing vs. Game testing
PPTX
Software testing and game testing
PDF
Unit testing in Unity
Eclipse and Genymotion
Gameplay: Inputs (Max Botviniev)
ЄВГЕН РУДЄВ «Multiplayer game testing in actions» QADay 2019
YEVHEN RUDIEV "Multiplayer game testing in actions" BAQ
STUDY OF AN APPLICATION DEVELOPMENT ENVIRONMENT BASED ON UNITY GAME ENGINE
Software testing vs. Game testing
Software testing and game testing
Unit testing in Unity

Similar to Multiplayer game testing in actions (19)

PDF
Know More About Rational Performance - Snehamoy K
PDF
3 know more_about_rational_performance_tester_8-1-snehamoy_k
 
PPT
Making a game "Just Right" through testing and play balancing
PPTX
Eyes or heart
PDF
Srinivas, Nirmalaya - Testing a massively multi-player online game
PPTX
Mastering Multiplayer Stage3d and AIR game development for mobile devices
PDF
An Introduction to Game Programming with Flash: An Introduction to Flash and ...
PPT
Games.ppt
PDF
Multiplayer Networking Game
PDF
2012 03-26
PPTX
Facebook flash api and social game development
PPT
Presentation 20110918 split
PDF
생산적인 개발을 위한 지속적인 테스트
PPTX
Testing banking apps
PPTX
SPA 2009 - Acceptance Testing AJAX Web Applications through the GUI
PPTX
98 374 Lesson 06-slides
PDF
Game Development Challenges
PPTX
Automation of online games
PDF
intern.pdf
Know More About Rational Performance - Snehamoy K
3 know more_about_rational_performance_tester_8-1-snehamoy_k
 
Making a game "Just Right" through testing and play balancing
Eyes or heart
Srinivas, Nirmalaya - Testing a massively multi-player online game
Mastering Multiplayer Stage3d and AIR game development for mobile devices
An Introduction to Game Programming with Flash: An Introduction to Flash and ...
Games.ppt
Multiplayer Networking Game
2012 03-26
Facebook flash api and social game development
Presentation 20110918 split
생산적인 개발을 위한 지속적인 테스트
Testing banking apps
SPA 2009 - Acceptance Testing AJAX Web Applications through the GUI
98 374 Lesson 06-slides
Game Development Challenges
Automation of online games
intern.pdf
Ad

Recently uploaded (20)

PDF
Autodesk AutoCAD Crack Free Download 2025
PDF
CCleaner Pro 6.38.11537 Crack Final Latest Version 2025
PDF
Cost to Outsource Software Development in 2025
PPTX
Computer Software and OS of computer science of grade 11.pptx
PDF
Design an Analysis of Algorithms I-SECS-1021-03
PPTX
WiFi Honeypot Detecscfddssdffsedfseztor.pptx
PPTX
CHAPTER 2 - PM Management and IT Context
PDF
Download FL Studio Crack Latest version 2025 ?
PPTX
AMADEUS TRAVEL AGENT SOFTWARE | AMADEUS TICKETING SYSTEM
PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 42 Updates Latest 2025
PPTX
Log360_SIEM_Solutions Overview PPT_Feb 2020.pptx
PDF
How to Make Money in the Metaverse_ Top Strategies for Beginners.pdf
PPTX
assetexplorer- product-overview - presentation
PPTX
Reimagine Home Health with the Power of Agentic AI​
PPTX
Embracing Complexity in Serverless! GOTO Serverless Bengaluru
PDF
Designing Intelligence for the Shop Floor.pdf
PDF
Wondershare Filmora 15 Crack With Activation Key [2025
PPTX
Oracle Fusion HCM Cloud Demo for Beginners
PDF
Design an Analysis of Algorithms II-SECS-1021-03
PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 41
Autodesk AutoCAD Crack Free Download 2025
CCleaner Pro 6.38.11537 Crack Final Latest Version 2025
Cost to Outsource Software Development in 2025
Computer Software and OS of computer science of grade 11.pptx
Design an Analysis of Algorithms I-SECS-1021-03
WiFi Honeypot Detecscfddssdffsedfseztor.pptx
CHAPTER 2 - PM Management and IT Context
Download FL Studio Crack Latest version 2025 ?
AMADEUS TRAVEL AGENT SOFTWARE | AMADEUS TICKETING SYSTEM
Internet Downloader Manager (IDM) Crack 6.42 Build 42 Updates Latest 2025
Log360_SIEM_Solutions Overview PPT_Feb 2020.pptx
How to Make Money in the Metaverse_ Top Strategies for Beginners.pdf
assetexplorer- product-overview - presentation
Reimagine Home Health with the Power of Agentic AI​
Embracing Complexity in Serverless! GOTO Serverless Bengaluru
Designing Intelligence for the Shop Floor.pdf
Wondershare Filmora 15 Crack With Activation Key [2025
Oracle Fusion HCM Cloud Demo for Beginners
Design an Analysis of Algorithms II-SECS-1021-03
Internet Downloader Manager (IDM) Crack 6.42 Build 41
Ad

Multiplayer game testing in actions