GitLab CI is a part of GitLab, a web application with an API that stores its state in a database. It manages projects/builds and provides a nice user interface, besides all the features of GitLab.
GitLab Runner is an application which processes builds. It can be deployed separately and works with GitLab CI through an API.
In order to run tests, you need at least 1 GitLab instance and 1 GitLab Runner. One runner can run one or more jobs at the same time. Each project in GitLab CI can have one or multiple jobs. All the jobs for one commit run in parallel so your tests results are available sooner. These jobs can run in parallel on the same runner and/or on different runners. Runners and jobs can be labeled so that jobs run on runners that can process them (the right machine, OS and configuration). We recommend to not install runners the same instance as GitLab so that running rogue code and jobs can't affect the security of GitLab itself. GitLab CI is a part of GitLab.
To perform the actual build, you need to install GitLab Runner.
Tests can be run on Unix, Windows, OSX, the JVM and more. The tests are performed with GitLab Runner, see that section for all the options.