With Tracetest, we were able to streamline our testing process and validate the functionality and performance of our fully serverless web app!
## The Background — Building Geographic Information Systems
[Uzufly](https://www.uzufly.com/en/) offers an all-in-one solution for planning and communication in urban development, construction, and virtual reality projects.
A few years ago, the development of 3D modeling, or "photomesh" from drone images was limited, mainly focused on capturing images of heritage buildings. This limitation inspired Romain Kirchhoff (CEO and Co-founder) to create Uzufly, aiming to unlock the potential of 3D modeling in the urban planning and construction industry.
Their mission is to revolutionize how the planning and construction industry approaches projects and interacts with clients. They produce cutting-edge 3D models and data, providing clients with the means to leverage the vast potential of Digital Twins and enhance their daily lives.
To deliver high-quality models that meet our customers' diverse needs, Uzufly has developed its own processes and algorithms for 3D data processing, while automating the processing as much as possible.
We got to snag some time with Uzufly’s VP of Software Engineering, [Olivier Lange](https://www.linkedin.com/in/olange/), to learn how Uzufly leverages Tracetest to improve and streamline their testing harness!
## The Challenge — Testing a Serverless Web App
Uzufly was encountering difficulties in effectively testing their application's performance and writing detailed functional tests. They required a solution to assist them in efficiently identifying and resolving issues in their web app. Since their web app was fully serverless, with a static website hosted on Vercel and using serverless functions, they needed to introduce a new way of testing.
The Uzufly team aimed to enhance their testing process with trace-based testing to obtain valuable insights into exactly what their app was doing. They sought a tool that could enable them to track events and traces within their web app, conduct end-to-end testing, and analyze the results effectively.
## The Requirements
Uzufly needed a testing tool that could:
- Track events and traces within the front-end web app
- Trigger tests from the front-end web app
- Support end-to-end testing
- Support trace-based testing
- Integrate seamlessly with the existing development workflow
## The Solution — Using Distributed Traces for Testing
After careful consideration, Uzufly decided to use Tracetest, an open-source trace-based testing tool. Tracetest offered the features and capabilities that Uzufly needed to enhance their testing process and gain valuable insights.
Olivier was intrigued by Tracetest and the concept trace-based testing—specifically, using traces the front-end web app generates as test specs.
The team at Uzufly started by creating use cases for testing using Tracetest. They even contributed to the discussion on several GitHub issues:
- Triggering tests from the front end: [https://github.com/kubeshop/tracetest/issues/2544](https://github.com/kubeshop/tracetest/issues/2544)
- Test specs from trace events: [https://github.com/kubeshop/tracetest/issues/2844](https://github.com/kubeshop/tracetest/issues/2844)
By introducing Tracetest to their testing harness, they were able to establish a structured approach to their testing process.
Olivier started by adding OpenTelemetry code instrumentation to the code base. This generates the needed telemetry for Tracetest to use as test assertions. Olivier decided to generate a `traceparent` in the `<meta>` header of the web app and enable OpenTelemetry auto-instrumentation.
He then introduced Jaeger as a trace data store to persist the OpenTelemetry traces. Tracetest seamlessly integrates with Jaeger, meaning for every test run Tracetest will poll for traces in Jaeger and display them as a response.
With Tracetest’s Deep Link test trigger, Olivier could trigger the Tracetest test run from the Uzufly front-end web app. This would open Tracetest, directly triggering the `bootstrap-sequence` tests of the Uzufly web app by injecting the `traceparent` span id to poll for traces in Jaeger.
**With Tracetest, Uzufly was able to streamline their testing process and validate the functionality and performance of their fully serverless web app. All this thanks to trace-based testing!**
## The Future
With Tracetest, Uzufly was able to successfully conduct various tests, including the bootstrap sequence of their web app, internationalization (i18n), and user use cases. They also leveraged the power of Tracetest to analyze their trace quality and in turn enhance their tracing instrumentation.
Looking ahead, Uzufly plans to continue using Tracetest for their testing needs. They will explore additional features and functionalities to further optimize their testing process and improve the overall quality of their web app.
Have an exciting Tracetest case study and want to be featured?
Drop us a line: [firstname.lastname@example.org](mailto:email@example.com)
Interested in managed [Tracetest](https://app.tracetest.io/) for your trace-based testing that includes access control, shared environments and test runs? [Request a 1-1](https://calendar.app.google/8qHAomjQZDKKDARd8), or find us on [Discord](https://discord.gg/6zupCZFQbe) and [GitHub](https://github.com/kubeshop/tracetest).
Tracetest lets you build integration and end-to-end tests 98% faster with distributed traces. No plumbing, no mocks, no fakes – test against real data. Assert against both the response and trace data at every point of a request transaction. Validate timing of trace spans, including databases. Assert against side-effects, including Kafka and message queues. Save and run tests visually and programatically with CI build jobs. Get started with Tracetest for free and start building tests in minutes instead of days.