Brainlab

Developer and Software Tester at Brainlab

Daniel Ensminger's software development and test automation work on Quip, an operating-room video platform, at Brainlab from October 2024 to May 2026.

Working Student

2024 — 2026

Munich, Germany

brainlab.com

Brainlab

I joined Brainlab as a working student in October 2024 and worked with the Snke team through May 2026. As a Developer and Software Tester, I focused on making an operating-room video product more reliable through automated and manual testing, reusable test tooling, and targeted bug fixes.

Quip

Quip is a compact computer designed for use in the operating room. It enables surgical teams to stream, view, record, and remotely share video captured by Quip Eye.

My work sat across that full path — from the camera feed into Quip, through the Chromium UI and REST APIs, and into the CI pipelines that ran the suites.

  1. 01

    Quip Eye

    OR camera feed

  2. 02

    Quip

    Streaming · viewing · recording

  3. 03

    Robot tests

    UI + API automation

  4. 04

    CI

    Jenkins · GitLab · GitHub

Testing and Development

  • Wrote Python test suites with Robot Framework to exercise user-interface workflows and REST API endpoints.
  • Built reusable Robot Framework libraries and keywords that expanded automated coverage while reducing repetitive manual testing.
  • Combined Selenium-based browser automation with manual and exploratory testing to validate Chromium-based workflows.
  • Tested network-dependent behavior by configuring connected devices, working with IP addressing and routing, and troubleshooting ports and services.
  • Integrated and maintained automated tests across Jenkins, GitLab CI, and GitHub Actions.
  • Investigated failures found through testing and contributed targeted fixes to the product code.

A typical setup looked like this: Python keywords for the reusable checks, then a .robot suite that called them.

libraries/QuipApiLibrary.py:

from robot.api.deco import keyword, library
from robot.libraries.BuiltIn import BuiltIn


@library(scope="GLOBAL")
class QuipApiLibrary:
    """Reusable keywords for Quip session and stream checks."""

    def __init__(self, base_url: str):
        self.base_url = base_url.rstrip("/")
        self._http = BuiltIn().get_library_instance("RequestsLibrary")

    @keyword("Session Should Be Active")
    def session_should_be_active(self, session_id: str) -> None:
        response = self._http.get_on_session(
            "quip",
            f"/api/sessions/{session_id}",
        )
        assert response.status_code == 200
        assert response.json()["status"] == "active"

    @keyword("Open Quip Stream View")
    def open_quip_stream_view(self, session_id: str) -> None:
        selenium = BuiltIn().get_library_instance("SeleniumLibrary")
        selenium.go_to(f"{self.base_url}/streams/{session_id}")
        selenium.wait_until_element_is_visible(
            "css:[data-testid=stream-canvas]"
        )

tests/quip_smoke.robot:

*** Settings ***
Documentation     Smoke checks for Quip streaming sessions.
Library           SeleniumLibrary
Library           RequestsLibrary
Library           ../libraries/QuipApiLibrary.py    ${BASE_URL}
Suite Setup       Create Session    quip    ${BASE_URL}
Test Tags         smoke

*** Variables ***
${BASE_URL}       http://quip.local
${SESSION_ID}     demo-or-stream

*** Test Cases ***
Session Should Be Active
    [Documentation]    Verify REST session state before opening the UI.
    Session Should Be Active    ${SESSION_ID}

Open Quip Stream View
    [Documentation]    Chromium canvas is ready for the active session.
    Open Quip Stream View    ${SESSION_ID}
    Page Should Contain Element    css:[data-testid=stream-canvas]

Network Path Remains Reachable
    [Documentation]    Ports and routes respond on the Quip device.
    ${response}=    GET On Session    quip    /health
    Should Be Equal As Integers    ${response.status_code}    200

Those suites ran in CI and surfaced regressions before they reached the next build:

$ robot --include smoke tests/quip_smoke.robot
==============================================================================
Quip Smoke :: Smoke checks for Quip streaming sessions.
==============================================================================
Session Should Be Active :: Verify REST session state                 | PASS |
Open Quip Stream View :: Chromium canvas is ready                     | PASS |
Network Path Remains Reachable :: Ports and routes respond            | PASS |
==============================================================================
3 tests, 3 passed, 0 failed

What I Learned

Working across software, browser automation, connected hardware, and operating-room video gave me practical experience with Chromium, REST APIs, CI pipelines, and network configuration. It also taught me how to design maintainable tests for a product whose reliability depends on several systems working together.

Join 2,000 readers and get infrequent updates on new projects.

+8.7K

By subscribing you consent to email updates. You can unsubscribe anytime. See our Privacy Policy.