{"id":19663,"date":"2020-09-03T15:43:57","date_gmt":"2020-09-03T13:43:57","guid":{"rendered":"https:\/\/www.inovex.de\/blog\/?p=19663"},"modified":"2022-09-20T08:17:58","modified_gmt":"2022-09-20T06:17:58","slug":"testing-serverless-probleme-ansaetze-frameworks","status":"publish","type":"post","link":"https:\/\/www.inovex.de\/de\/blog\/testing-serverless-probleme-ansaetze-frameworks\/","title":{"rendered":"Testing von Serverless-Funktionen: Probleme, Ans\u00e4tze und Frameworks"},"content":{"rendered":"<p>Serverless-Technologien finden seit der Einf\u00fchrung von AWS Lambda im Jahr 2014 immer gr\u00f6\u00dfere Verbreitung. Google, Microsoft und andere Anbieter folgten bald mit \u00e4hnlichen Diensten. Die Rede ist von Function-as-a-Service (FaaS). Dabei wird Funktionscode in die Cloud hochgeladen und in der Laufzeitumgebung des Anbieters ausgef\u00fchrt. Der Cloud-Anbieter stellt die Infrastruktur, \u00fcbernimmt das Scaling und rechnet die Nutzung nach Pay-per-Use ab. Die Funktionen k\u00f6nnen dann durch verschiedene Ereignisse innerhalb der Cloud und ohne eigene Server (Serverless) ausgel\u00f6st werden.<!--more--><\/p>\n<p>Die \u00d6kosph\u00e4re rund um Serverless \u2013 das hei\u00dft Entwickler:innentools und Best Practices \u2013 befindet sich noch immer in einer fr\u00fchen Entwicklungsphase. F\u00fcr meine Bachelorarbeit habe ich mich speziell mit dem Thema Testing einer Serverless-Funktion besch\u00e4ftigt.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\"><p class=\"ez-toc-title\" style=\"cursor:inherit\"><\/p>\n<\/div><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.inovex.de\/de\/blog\/testing-serverless-probleme-ansaetze-frameworks\/#Was-macht-Testing-im-Serverless-Bereich-schwierig\" >Was macht Testing im Serverless-Bereich schwierig?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.inovex.de\/de\/blog\/testing-serverless-probleme-ansaetze-frameworks\/#Testen-gegen-einen-Endpunkt-in-der-Cloud\" >Testen gegen einen Endpunkt in der Cloud<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.inovex.de\/de\/blog\/testing-serverless-probleme-ansaetze-frameworks\/#Lokale-Emulation-der-Cloud-Umgebung\" >Lokale Emulation der Cloud-Umgebung<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.inovex.de\/de\/blog\/testing-serverless-probleme-ansaetze-frameworks\/#Serverless-Framework\" >Serverless Framework<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.inovex.de\/de\/blog\/testing-serverless-probleme-ansaetze-frameworks\/#Serverless-Application-Model-SAM\" >Serverless Application Model (SAM)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.inovex.de\/de\/blog\/testing-serverless-probleme-ansaetze-frameworks\/#LocalStack\" >LocalStack<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.inovex.de\/de\/blog\/testing-serverless-probleme-ansaetze-frameworks\/#Azure-Functions-Core-Tools\" >Azure Functions Core Tools<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.inovex.de\/de\/blog\/testing-serverless-probleme-ansaetze-frameworks\/#Functions-Framework\" >Functions Framework<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/www.inovex.de\/de\/blog\/testing-serverless-probleme-ansaetze-frameworks\/#Fazit\" >Fazit<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"Was-macht-Testing-im-Serverless-Bereich-schwierig\"><\/span>Was macht Testing im Serverless-Bereich schwierig?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Function-as-a-Service unterscheidet sich von Platform-as-a-Service oder Infrastructure-as-a-Service in dem Sinne, dass wir keinen direkten Einfluss auf die Laufzeitumgebung haben, in der unser Code ausgef\u00fchrt wird. Wir k\u00f6nnen also nicht, wie in traditionellen Bereitstellungsmodellen, ein Dockerfile erstellen und davon ausgehen, lokal, im CI-Runner und auf der Produktionsumgebung dieselben Ergebnisse zu erhalten.<\/p>\n<p>Hinzu kommen spezielle Rahmenbedingungen bei der Ausf\u00fchrung von Serverless-Funktionen in der Cloud. Werden Funktionen f\u00fcr eine l\u00e4ngere Zeit\u00a0 \u2013 in der Regel etwa 15 Minuten \u2013 nicht ausgel\u00f6st, muss die Umgebung beim n\u00e4chsten Funktionsaufruf neu aufgebaut werden. Man spricht von einem Cold Start. Dadurch verz\u00f6gert sich die Antwortzeit immens und so k\u00f6nnen beispielsweise Timeouts im Frontend der Anwendung greifen, bevor die Funktion ausgef\u00fchrt werden kann. Dies sollte in einem Integration- oder End-to-end-Test \u00fcberpr\u00fcft werden.<\/p>\n<p>Aber nicht nur Cold Starts sind eine Besonderheit, sondern auch die gesetzten und oft konfigurierbaren Limitierungen bei der Ausf\u00fchrung der Funktion. Dazu geh\u00f6ren beispielsweise:<\/p>\n<ul>\n<li>Timeouts<\/li>\n<li>Arbeitsspeicher<\/li>\n<li>Speicherplatz f\u00fcr das beschreibbare \/tmp Storage<\/li>\n<li>Gr\u00f6\u00dfe des Invocation Payloads f\u00fcr Request und Response<\/li>\n<\/ul>\n<p>Die vollst\u00e4ndige Aufz\u00e4hlung und Details zu Limitierungen k\u00f6nnen in den Dokumentationen der Cloud-Anbieter nachgelesen werden.\u00a0Ad\u00e4quate Testing-L\u00f6sungen sollten also auch diese Limitierungen ber\u00fccksichtigen.<\/p>\n<p>Ein Aufruf von Serverless-Funktionen erfolgt \u00fcber verkn\u00fcpfte Dienste des Cloud-Anbieters, die zu definierten Ereignissen die Ausf\u00fchrung der Funktion initiieren. Das einfachste Beispiel daf\u00fcr ist das API Gateway. Hier wird im Prinzip nur ein HTTP-Endpunkt zur Ausf\u00fchrung der Funktion konstruiert. AWS Lambda bspw. unterst\u00fctzt aber auch Ereignisse aus S3, DynamoDB, Kinesis, SNS oder CloudWatch. Wie sollte man diese Schnittstellen simulieren, um Integration- und End-to-end-Tests durchf\u00fchren zu k\u00f6nnen?<\/p>\n<p>Aus all diesen Gr\u00fcnden mag es sinnvoll erscheinen Serverless-Anwendungen direkt in der Cloud zu testen und die Nachteile, die damit verbunden sind (Cloud-Kosten, Abh\u00e4ngigkeit an Internetverbindung), in Kauf zu nehmen. Die Alternative w\u00e4re, die Cloud-Umgebung lokal zu emulieren. In den n\u00e4chsten Abschnitten werde ich beide Ans\u00e4tze gegeneinander abw\u00e4gen und aufzeigen, welche Tools und Frameworks f\u00fcr eine lokale Emulation existieren und wie erfolgreich sie dieser Aufgabe nachkommen.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Testen-gegen-einen-Endpunkt-in-der-Cloud\"><\/span>Testen gegen einen Endpunkt in der Cloud<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Das Testen gegen einen Endpunkt in der Cloud, das der produktiven Umgebung nachempfunden ist, eignet sich nat\u00fcrlich am besten f\u00fcr eine realit\u00e4tsnahe Testing-Simulation. Identische Laufzeitumgebung und Limitierungen geben dabei Sicherheit und auch kontextuelle Dienste, wie z.B. ein S3-Bucket, k\u00f6nnen bei diesen Tests wirklichkeitsgetreu miteinander interagieren.<\/p>\n<p>Dadurch ergeben sich jedoch folgende Nachteile:<\/p>\n<ul>\n<li>Testing hat normalerweise den Anspruch, isoliert ausgef\u00fchrt werden zu k\u00f6nnen \u2013 etwa auf einer CI oder gar lokal. Bei dieser L\u00f6sung ist das Testing von einer Internetverbindung bzw. Verbindung zur Cloud abh\u00e4ngig.<\/li>\n<li>Das Ausf\u00fchren von Cloud-Diensten ist mit Kosten verbunden. Im Kontext von Serverless, das nach einem Pay-per-Use-Preismodell abgerechnet wird, entstehen Kosten f\u00fcr jeden einzelnen Aufruf und damit auch zwangsweise jedes Mal, wenn die Testing-Suite ausgef\u00fchrt wird.<\/li>\n<li>Zu weiteren finanziellen Aufwendungen f\u00fchrt die Koordination mehrerer Entwickler:innen, die gleichzeitig an einer Funktion arbeiten. Deployments auf die Testing-Umgebung d\u00fcrfen nicht den Stand eines anderen Testing-Prozesses \u00fcberschreiben, bevor dieser abgeschlossen ist. Dieser Fall kann eintreten, wenn mehrere Commits dicht aufeinander folgen bzw. auf mehreren Branches gleichzeitig gearbeitet wird. Hier m\u00fcssen also spezielle L\u00f6sungen gefunden werden, z.B. der Commit-Hash an den Namen der Instanz angehangen werden.<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"Lokale-Emulation-der-Cloud-Umgebung\"><\/span>Lokale Emulation der Cloud-Umgebung<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Es existieren zahlreiche Projekte von der Community und den Cloud-Anbietern selbst, welche die lokale Emulation bzw. Simulation von Serverless-Funktionen bewerkstelligen sollen. Sie haben das Ziel, lokales Testing und Debugging zu unterst\u00fctzen. Es ist der Zeit seit der Ver\u00f6ffentlichung der jeweiligen Serverless-Dienste geschuldet, dass die Tools f\u00fcr AWS bereits besser ausgereift sind als f\u00fcr Azure respektive Google Cloud.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Serverless-Framework\"><\/span>Serverless Framework<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Beim Serverless Framework handelt es sich um ein sehr popul\u00e4res Open-Source-Projekt zur Entwicklung von Serverless-Funktionen. Das Besondere an diesem Framework ist, dass es Cloud-agnostisch ist. Es unterst\u00fctzt also eine Vielzahl von Anbietern und ist gleichzeitig in jeder Programmiersprache verf\u00fcgbar.<\/p>\n<p>Mit dem Serverless Framework ist es m\u00f6glich, einen lokalen Webserver zu starten, der als API Gateway f\u00fcr die Funktionen agiert. Die Konfiguration wird der selben Datei entnommen, die auch f\u00fcr die Provisionierung in der Cloud verantwortlich ist. Hier wird ebenfalls der konfigurierte Wert f\u00fcr das Timeout der Funktion entnommen. Diese Limitierung wird also bei der Simulation ber\u00fccksichtigt.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Serverless-Application-Model-SAM\"><\/span>Serverless Application Model (SAM)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>SAM ist ein Framework, das von AWS entwickelt wird und auch zum Entwickeln von AWS Lambda Funktionen genutzt werden kann. Mit dem CLI kann ein lokales API Gateway simuliert werden. Die Funktionen werden als eigene Instanzen von Docker Containern gestartet. Hierbei wird gleichzeitig ein Cold Start simuliert! Die Docker Container basieren auf einem Image der Laufzeitumgebung, welches speziell von AWS bereitgestellt wurde. Timeouts und sogar Speicherlimits werden bei der Ausf\u00fchrung ber\u00fccksichtigt.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"LocalStack\"><\/span>LocalStack<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Bei LocalStack handelt es sich um ein zum Teil kommerzielles Projekt, das es sich zur Aufgabe gemacht hat, Dienste aus der AWS Cloud lokal zu emulieren. Dies schlie\u00dft Lambda und auch alle kontextuellen Dienste, wie S3 und DynamoDB, mit ein.<\/p>\n<p>Auch hier wird ein API Gateway mit Cold Starts containerisierter Funktionsinstanzen emuliert. Timeouts und Speicherlimits werden ber\u00fccksichtigt.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Azure-Functions-Core-Tools\"><\/span>Azure Functions Core Tools<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Die Azure Functions Core Tools werden von Microsoft zum Entwickeln und lokalen Testen von Azure Functions entwickelt. Microsoft stellt eigene Docker Images zur Verf\u00fcgung, welche die Laufzeitumgebung in ihrer Cloud nachahmen sollen. Allerdings werden hierbei keine Cold Starts emuliert und unter den Limitierungen nur das Timeout ber\u00fccksichtigt.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Functions-Framework\"><\/span>Functions Framework<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Das Functions Framework wird durch das Google-Cloud-Platform-Team entwickelt. Hierbei handelt es sich aber im Wesentlichen nur um ein CLI, das beim Bootstrapping von Funktionen helfen soll und einen Webserver zum Ausf\u00fchren der Funktionen zur Verf\u00fcgung stellt.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Fazit\"><\/span>Fazit<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Aus der Auflistung der verf\u00fcgbaren Frameworks geht hervor, dass sich die lokale Emulation von Cloud-Umgebungen in ganz unterschiedlichen Phasen der Entwicklung befindet. W\u00e4hrend f\u00fcr AWS bereits Frameworks mit einem hohen Anspruch an die Qualit\u00e4t der Simulation existieren (Cold Starts, Timeouts, Memory Limits), existiert f\u00fcr Google Cloud noch nicht einmal ein Docker Image zur Nachahmung der Laufzeitumgebung in der Cloud. End-to-End-Testing von Funktionen, die von anderen Ereignissen als HTTP ausgel\u00f6st werden, ist au\u00dferhalb von LocalStack und damit AWS schlicht nicht m\u00f6glich.<\/p>\n<p>Eine vollst\u00e4ndige lokale Emulation f\u00fcr das Testing von Serverless-Funktionen existiert nicht. Es ist aber erkennbar, dass sowohl AWS, als auch Azure und Google Cloud, dieses Problem anvisiert haben und an einer L\u00f6sung arbeiten bzw. ihre L\u00f6sungen weiterhin ausbessern.<\/p>\n<p>Bis dahin bleibt es den Entwickler:innen \u00fcberlassen, ob sie sich entscheiden, das Testing doch lieber auf einem Endpunkt in der Cloud vorzunehmen oder sich sogar eine hybride L\u00f6sung auszudenken. Diese Entscheidung d\u00fcrfte von der Unterst\u00fctzung des jeweiligen Cloud-Anbieters und den pers\u00f6nlichen Anspr\u00fcchen an die Testing-Qualit\u00e4t abh\u00e4ngen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Serverless-Technologien finden seit der Einf\u00fchrung von AWS Lambda im Jahr 2014 immer gr\u00f6\u00dfere Verbreitung. Google, Microsoft und andere Anbieter folgten bald mit \u00e4hnlichen Diensten. Die Rede ist von Function-as-a-Service (FaaS). Dabei wird Funktionscode in die Cloud hochgeladen und in der Laufzeitumgebung des Anbieters ausgef\u00fchrt. Der Cloud-Anbieter stellt die Infrastruktur, \u00fcbernimmt das Scaling und rechnet die [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":19670,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"ep_exclude_from_search":false,"footnotes":""},"tags":[512,513,71,147,335],"service":[432],"coauthors":[],"class_list":["post-19663","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-aws-2","tag-azure-2","tag-cloud","tag-google-cloud","tag-serverless","service-devops"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Testing von Serverless-Funktionen: Probleme, Ans\u00e4tze und Frameworks - inovex GmbH<\/title>\n<meta name=\"description\" content=\"Ob ereignisbasierte Ausl\u00f6ser oder Limitierungen in der Cloud-Umgebung, das Testen von Serverless-Funktionen stellt eine echte Herausforderung f\u00fcr Entwickler:innen dar.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.inovex.de\/de\/blog\/testing-serverless-probleme-ansaetze-frameworks\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Testing von Serverless-Funktionen: Probleme, Ans\u00e4tze und Frameworks - inovex GmbH\" \/>\n<meta property=\"og:description\" content=\"Ob ereignisbasierte Ausl\u00f6ser oder Limitierungen in der Cloud-Umgebung, das Testen von Serverless-Funktionen stellt eine echte Herausforderung f\u00fcr Entwickler:innen dar.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.inovex.de\/de\/blog\/testing-serverless-probleme-ansaetze-frameworks\/\" \/>\n<meta property=\"og:site_name\" content=\"inovex GmbH\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/inovexde\" \/>\n<meta property=\"article:published_time\" content=\"2020-09-03T13:43:57+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-20T06:17:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.inovex.de\/wp-content\/uploads\/2020\/09\/serverless-testing.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Frederik Timm\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.inovex.de\/wp-content\/uploads\/2020\/09\/serverless-testing-1024x576.png\" \/>\n<meta name=\"twitter:creator\" content=\"@inovexgmbh\" \/>\n<meta name=\"twitter:site\" content=\"@inovexgmbh\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Frederik Timm\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"6\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/testing-serverless-probleme-ansaetze-frameworks\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/testing-serverless-probleme-ansaetze-frameworks\\\/\"},\"author\":{\"name\":\"Frederik Timm\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/person\\\/49134dcf488a16a6c46fe19a1bcc5fc0\"},\"headline\":\"Testing von Serverless-Funktionen: Probleme, Ans\u00e4tze und Frameworks\",\"datePublished\":\"2020-09-03T13:43:57+00:00\",\"dateModified\":\"2022-09-20T06:17:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/testing-serverless-probleme-ansaetze-frameworks\\\/\"},\"wordCount\":1279,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/testing-serverless-probleme-ansaetze-frameworks\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/serverless-testing.png\",\"keywords\":[\"AWS\",\"Azure\",\"Cloud\",\"Google Cloud\",\"Serverless\"],\"articleSection\":[\"General\",\"Infrastructure\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/testing-serverless-probleme-ansaetze-frameworks\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/testing-serverless-probleme-ansaetze-frameworks\\\/\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/testing-serverless-probleme-ansaetze-frameworks\\\/\",\"name\":\"Testing von Serverless-Funktionen: Probleme, Ans\u00e4tze und Frameworks - inovex GmbH\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/testing-serverless-probleme-ansaetze-frameworks\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/testing-serverless-probleme-ansaetze-frameworks\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/serverless-testing.png\",\"datePublished\":\"2020-09-03T13:43:57+00:00\",\"dateModified\":\"2022-09-20T06:17:58+00:00\",\"description\":\"Ob ereignisbasierte Ausl\u00f6ser oder Limitierungen in der Cloud-Umgebung, das Testen von Serverless-Funktionen stellt eine echte Herausforderung f\u00fcr Entwickler:innen dar.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/testing-serverless-probleme-ansaetze-frameworks\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/testing-serverless-probleme-ansaetze-frameworks\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/testing-serverless-probleme-ansaetze-frameworks\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/serverless-testing.png\",\"contentUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/serverless-testing.png\",\"width\":1920,\"height\":1080,\"caption\":\"Lambda aufgeklappt mit sichtbaren Zahnr\u00e4dern\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/testing-serverless-probleme-ansaetze-frameworks\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Testing von Serverless-Funktionen: Probleme, Ans\u00e4tze und Frameworks\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#website\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/\",\"name\":\"inovex GmbH\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#organization\",\"name\":\"inovex GmbH\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/inovex-logo-16-9-1.png\",\"contentUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/inovex-logo-16-9-1.png\",\"width\":1921,\"height\":1081,\"caption\":\"inovex GmbH\"},\"image\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/inovexde\",\"https:\\\/\\\/x.com\\\/inovexgmbh\",\"https:\\\/\\\/www.instagram.com\\\/inovexlife\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/inovex\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UC7r66GT14hROB_RQsQBAQUQ\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/person\\\/49134dcf488a16a6c46fe19a1bcc5fc0\",\"name\":\"Frederik Timm\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/frederik-timm-foto.1024x1024-96x96.jpg71a89bb949bb9a527cecfb951e7c4324\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/frederik-timm-foto.1024x1024-96x96.jpg\",\"contentUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/frederik-timm-foto.1024x1024-96x96.jpg\",\"caption\":\"Frederik Timm\"},\"sameAs\":[\"https:\\\/\\\/www.youtube.com\\\/@InovexDe\"],\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/author\\\/frederik_timm-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2--2\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Testing von Serverless-Funktionen: Probleme, Ans\u00e4tze und Frameworks - inovex GmbH","description":"Ob ereignisbasierte Ausl\u00f6ser oder Limitierungen in der Cloud-Umgebung, das Testen von Serverless-Funktionen stellt eine echte Herausforderung f\u00fcr Entwickler:innen dar.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.inovex.de\/de\/blog\/testing-serverless-probleme-ansaetze-frameworks\/","og_locale":"de_DE","og_type":"article","og_title":"Testing von Serverless-Funktionen: Probleme, Ans\u00e4tze und Frameworks - inovex GmbH","og_description":"Ob ereignisbasierte Ausl\u00f6ser oder Limitierungen in der Cloud-Umgebung, das Testen von Serverless-Funktionen stellt eine echte Herausforderung f\u00fcr Entwickler:innen dar.","og_url":"https:\/\/www.inovex.de\/de\/blog\/testing-serverless-probleme-ansaetze-frameworks\/","og_site_name":"inovex GmbH","article_publisher":"https:\/\/www.facebook.com\/inovexde","article_published_time":"2020-09-03T13:43:57+00:00","article_modified_time":"2022-09-20T06:17:58+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/www.inovex.de\/wp-content\/uploads\/2020\/09\/serverless-testing.png","type":"image\/png"}],"author":"Frederik Timm","twitter_card":"summary_large_image","twitter_image":"https:\/\/www.inovex.de\/wp-content\/uploads\/2020\/09\/serverless-testing-1024x576.png","twitter_creator":"@inovexgmbh","twitter_site":"@inovexgmbh","twitter_misc":{"Verfasst von":"Frederik Timm","Gesch\u00e4tzte Lesezeit":"6\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.inovex.de\/de\/blog\/testing-serverless-probleme-ansaetze-frameworks\/#article","isPartOf":{"@id":"https:\/\/www.inovex.de\/de\/blog\/testing-serverless-probleme-ansaetze-frameworks\/"},"author":{"name":"Frederik Timm","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/person\/49134dcf488a16a6c46fe19a1bcc5fc0"},"headline":"Testing von Serverless-Funktionen: Probleme, Ans\u00e4tze und Frameworks","datePublished":"2020-09-03T13:43:57+00:00","dateModified":"2022-09-20T06:17:58+00:00","mainEntityOfPage":{"@id":"https:\/\/www.inovex.de\/de\/blog\/testing-serverless-probleme-ansaetze-frameworks\/"},"wordCount":1279,"commentCount":0,"publisher":{"@id":"https:\/\/www.inovex.de\/de\/#organization"},"image":{"@id":"https:\/\/www.inovex.de\/de\/blog\/testing-serverless-probleme-ansaetze-frameworks\/#primaryimage"},"thumbnailUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2020\/09\/serverless-testing.png","keywords":["AWS","Azure","Cloud","Google Cloud","Serverless"],"articleSection":["General","Infrastructure"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.inovex.de\/de\/blog\/testing-serverless-probleme-ansaetze-frameworks\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.inovex.de\/de\/blog\/testing-serverless-probleme-ansaetze-frameworks\/","url":"https:\/\/www.inovex.de\/de\/blog\/testing-serverless-probleme-ansaetze-frameworks\/","name":"Testing von Serverless-Funktionen: Probleme, Ans\u00e4tze und Frameworks - inovex GmbH","isPartOf":{"@id":"https:\/\/www.inovex.de\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.inovex.de\/de\/blog\/testing-serverless-probleme-ansaetze-frameworks\/#primaryimage"},"image":{"@id":"https:\/\/www.inovex.de\/de\/blog\/testing-serverless-probleme-ansaetze-frameworks\/#primaryimage"},"thumbnailUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2020\/09\/serverless-testing.png","datePublished":"2020-09-03T13:43:57+00:00","dateModified":"2022-09-20T06:17:58+00:00","description":"Ob ereignisbasierte Ausl\u00f6ser oder Limitierungen in der Cloud-Umgebung, das Testen von Serverless-Funktionen stellt eine echte Herausforderung f\u00fcr Entwickler:innen dar.","breadcrumb":{"@id":"https:\/\/www.inovex.de\/de\/blog\/testing-serverless-probleme-ansaetze-frameworks\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.inovex.de\/de\/blog\/testing-serverless-probleme-ansaetze-frameworks\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.inovex.de\/de\/blog\/testing-serverless-probleme-ansaetze-frameworks\/#primaryimage","url":"https:\/\/www.inovex.de\/wp-content\/uploads\/2020\/09\/serverless-testing.png","contentUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2020\/09\/serverless-testing.png","width":1920,"height":1080,"caption":"Lambda aufgeklappt mit sichtbaren Zahnr\u00e4dern"},{"@type":"BreadcrumbList","@id":"https:\/\/www.inovex.de\/de\/blog\/testing-serverless-probleme-ansaetze-frameworks\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.inovex.de\/de\/"},{"@type":"ListItem","position":2,"name":"Testing von Serverless-Funktionen: Probleme, Ans\u00e4tze und Frameworks"}]},{"@type":"WebSite","@id":"https:\/\/www.inovex.de\/de\/#website","url":"https:\/\/www.inovex.de\/de\/","name":"inovex GmbH","description":"","publisher":{"@id":"https:\/\/www.inovex.de\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.inovex.de\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/www.inovex.de\/de\/#organization","name":"inovex GmbH","url":"https:\/\/www.inovex.de\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/logo\/image\/","url":"https:\/\/www.inovex.de\/wp-content\/uploads\/2021\/03\/inovex-logo-16-9-1.png","contentUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2021\/03\/inovex-logo-16-9-1.png","width":1921,"height":1081,"caption":"inovex GmbH"},"image":{"@id":"https:\/\/www.inovex.de\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/inovexde","https:\/\/x.com\/inovexgmbh","https:\/\/www.instagram.com\/inovexlife\/","https:\/\/www.linkedin.com\/company\/inovex","https:\/\/www.youtube.com\/channel\/UC7r66GT14hROB_RQsQBAQUQ"]},{"@type":"Person","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/person\/49134dcf488a16a6c46fe19a1bcc5fc0","name":"Frederik Timm","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.inovex.de\/wp-content\/uploads\/frederik-timm-foto.1024x1024-96x96.jpg71a89bb949bb9a527cecfb951e7c4324","url":"https:\/\/www.inovex.de\/wp-content\/uploads\/frederik-timm-foto.1024x1024-96x96.jpg","contentUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/frederik-timm-foto.1024x1024-96x96.jpg","caption":"Frederik Timm"},"sameAs":["https:\/\/www.youtube.com\/@InovexDe"],"url":"https:\/\/www.inovex.de\/de\/blog\/author\/frederik_timm-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2--2\/"}]}},"_links":{"self":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts\/19663","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/comments?post=19663"}],"version-history":[{"count":2,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts\/19663\/revisions"}],"predecessor-version":[{"id":38430,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts\/19663\/revisions\/38430"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/media\/19670"}],"wp:attachment":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/media?parent=19663"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/tags?post=19663"},{"taxonomy":"service","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/service?post=19663"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/coauthors?post=19663"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}