Depends on what the tests are, I didn't try it with multiplayer games specifically myself, but for server side and library stuff, generally in order of simplest:
—
Unit tests using a mocked networking stack entirely, to make sure all the logic, packet handling etc is right.
—
Unit test like performance benchmarks. I found a lot of performance is down to general logic CPU/code. So can benchmark, profile and optimise a lot easily right there on a system without a remote.
But want some real world test data to be replaying ideally.
—
Run both client and server on the same system. This has some effects due to system resources allocation, but it gives me both things easily in one debugger session and one profiler view.
—
Run clients on multiple virtual machines (potentially on multiple hosts). This really gets into load testing, but more complex to set up and needs a lot of hardware resources which even at places i have worked is finite. Since it's not the main day to day testing spinning up a lot of nodes on say AWS can be fairly cheap once you script it all.
I tend to use SSH and file shares for this, both on Windows and Linux. File shares make copying builds, logs, etc. easy. Then SSH to run the client installer and then client program.
I use the VM environments APIs to manage all these nodes so that they stay in a completely clean state.
I might run whichever part of the system i am primarily working on locally for better debugger/profiler/etc experience.
There is remote debugging, I tend to avoid it unless I can't reproduce the issue on my local system (sometimes bugs are environment dependent).
—
Graphical interaction with the client programs is a pain, I try to avoid it. Make sure everything needed to connect to the server can be provided on the command line or config file, and consider having some useful outputs on STDOUT.
Mostly just having them connected is fairly useful, could maybe have them run an ai/bot, not seen it done.
In past for web stuff have used selenium and those scripts can be run over SSH. Or just recruited everyone in the office.
---
Mobile devices are more complex, for server testing I try to stick with a test client program that can run under normal Linux/Windows without a GUI maybe.
Or would have to decide if the Android emulators are good enough for you. Otherwise could use a lot of phones but sounds an expensive pain. There are APIs to install an apk and push config so again will immediately connect to your test server.
For main client testing and profiling again I just use a local device.