{"id":347,"date":"2019-01-17T05:40:41","date_gmt":"2019-01-17T04:40:41","guid":{"rendered":"http:\/\/blog.zhaw.ch\/splab\/?p=347"},"modified":"2019-01-17T07:26:32","modified_gmt":"2019-01-17T06:26:32","slug":"end-to-end-testing-of-cloud-native-applications","status":"publish","type":"post","link":"https:\/\/blog.zhaw.ch\/splab\/2019\/01\/17\/end-to-end-testing-of-cloud-native-applications\/","title":{"rendered":"End-to-end testing of cloud-native applications"},"content":{"rendered":"<p>In our <a href=\"http:\/\/blog.zhaw.ch\/splab\/\">research group<\/a>, we have for many years observed and systematically explored how cloud applications are being developed. In particular, we focus our investigations on <a href=\"http:\/\/blog.zhaw.ch\/splab\/for-researchers\/cloud-native-applications\/\">cloud-native applications<\/a> whose properties are largely determined by exploiting the capabilities of modern cloud platforms for both their development and operation. As we are involved in European research on testing cloud applications (<a href=\"http:\/\/elastest.io\/\">Elastest<\/a>), our aim was to look at the current project results through the cloud-native glasses. This blog post reports about end-to-end testing of composite containerised applications from this perspective.<\/p>\n<p><!--more--><\/p>\n<p>Software testing is of profound importance in a world where more and more processes are software-supported, software-defined and software-controlled. Ideally, one could <a href=\"https:\/\/queue.acm.org\/detail.cfm?id=2024356\">formally verify<\/a> the correctness of any single piece of software and any composed system, but in practice, testing is as far as industrial software development even for safety-critical domains gets these years. Starting from basic unit-testing, integration testing and <a href=\"https:\/\/doi.org\/10.1016\/bs.adcom.2015.11.007\">end-to-end testing<\/a> are adequate means of checking if a system or application does what it is supposed to do. An example would be a public transport system whose usage is regulated by turnstyles and rechargeable tickets. The specification would say that (a) persons can only enter the system with a valid (charged) ticket, (b) the ticket would be charged upon entering or leaving, (c) any entering and leaving would be recorded, and (d) the invariant saying that no persons would ever be trapped in the system because upon successful entering the leaving would be guaranteed. In reality, due to bugs in the system design or implementation, these safety guarantees do not hold. Swiss researchers have recently shown in a carefully prepared undercover study that indeed one can get stuck in such systems and can only leave via undocumented means.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-355\" src=\"http:\/\/blog.zhaw.ch\/splab\/files\/2019\/01\/novalido.jpg\" alt=\"\" width=\"400\" height=\"168\" srcset=\"https:\/\/blog.zhaw.ch\/splab\/files\/2019\/01\/novalido.jpg 400w, https:\/\/blog.zhaw.ch\/splab\/files\/2019\/01\/novalido-300x126.jpg 300w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/p>\n<p>Related to our example, most researchers associated with the Elastest consortium met in M\u00f3stoles close to Madrid in Spain for a consortium meeting which informed about the current technical state of Elastest and aimed at advancing testing so that the mentioned issues can be avoided. From a user perspective, the Elastest software lets developers, testers and QA experts define, execute and analyse tests on various types of applications, including interactive web browser sessions, remote services and Docker compositions. In simple terms, Elastest is downloaded as a Docker container which, when started, downloads other containers to set up a sophisticated composition including a web frontend called <a href=\"https:\/\/github.com\/elastest\/elastest-torm\/blob\/master\/docs\/index.md\">TORM<\/a>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-350\" src=\"http:\/\/blog.zhaw.ch\/splab\/files\/2019\/01\/elastest-campus.jpg\" alt=\"\" width=\"1024\" height=\"768\" srcset=\"https:\/\/blog.zhaw.ch\/splab\/files\/2019\/01\/elastest-campus.jpg 1024w, https:\/\/blog.zhaw.ch\/splab\/files\/2019\/01\/elastest-campus-300x225.jpg 300w, https:\/\/blog.zhaw.ch\/splab\/files\/2019\/01\/elastest-campus-768x576.jpg 768w, https:\/\/blog.zhaw.ch\/splab\/files\/2019\/01\/elastest-campus-676x507.jpg 676w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>While in the first two years under development Elastest was not yet ready for wider use, this is changing now with the more recent releases. Hence, we are looking forward to use Elastest for testing our dockerised tools (e.g. <a href=\"https:\/\/github.com\/serviceprototypinglab\/snafu\">Snafu<\/a>, <a href=\"https:\/\/github.com\/serviceprototypinglab\/helmqa\">HelmQA<\/a>) for assuring quality while these tools are under development. This work will happen within the next few weeks, and we invite other developers of containerised applications to try out Elastest for themselves, too.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-351\" src=\"http:\/\/blog.zhaw.ch\/splab\/files\/2019\/01\/elastest-meeting.jpg\" alt=\"\" width=\"1024\" height=\"768\" srcset=\"https:\/\/blog.zhaw.ch\/splab\/files\/2019\/01\/elastest-meeting.jpg 1024w, https:\/\/blog.zhaw.ch\/splab\/files\/2019\/01\/elastest-meeting-300x225.jpg 300w, https:\/\/blog.zhaw.ch\/splab\/files\/2019\/01\/elastest-meeting-768x576.jpg 768w, https:\/\/blog.zhaw.ch\/splab\/files\/2019\/01\/elastest-meeting-676x507.jpg 676w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>Many of the Elastest components are set up using Docker Compose. The corresponding compose files come with <a href=\"https:\/\/docs.docker.com\/compose\/compose-file\/#labels\">labels<\/a> to differentiate the type of component. Some labels also carry test-related information. An obvious challenge during the development of Elastest itself is that these labels must be used consistently, and unlabelled or improperly components need to be reported. Such consistency checks relate to our previous research on <a href=\"https:\/\/arxiv.org\/abs\/1901.00644\">microservice metadata<\/a>. Therefore, we came up with a refined &#8220;big picture&#8221; of our activities related to microservices including the bidirectional possibilities of using Elastest for service assessment and assessing the Elastest services.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-356 size-full\" src=\"http:\/\/blog.zhaw.ch\/splab\/files\/2019\/01\/microservice-technology-coverage-1.png\" alt=\"\" width=\"724\" height=\"501\" srcset=\"https:\/\/blog.zhaw.ch\/splab\/files\/2019\/01\/microservice-technology-coverage-1.png 724w, https:\/\/blog.zhaw.ch\/splab\/files\/2019\/01\/microservice-technology-coverage-1-300x208.png 300w, https:\/\/blog.zhaw.ch\/splab\/files\/2019\/01\/microservice-technology-coverage-1-676x468.png 676w\" sizes=\"auto, (max-width: 724px) 100vw, 724px\" \/><\/p>\n<p>From this brainstorming, it did not take long before we had the first proof-of-concept prototype on consistency checking running. The script would run nightly to pull the Docker Compose <a href=\"https:\/\/github.com\/search?o=desc&amp;q=org%3Aelastest+docker-compose&amp;s=committer-date&amp;type=Commits\">deployment files<\/a> from the Elastest GitHub repository, check the presence and validity of labels, and report the results to a Kafka endpoint which can be visualised with Grafana. As the output below shows, the current state of development is not bad among the services with proper deployment information, with only one label missing. On the other hand, many services are currently not checked as they still miss the Docker Compose file or have it in a non-standard location.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-348\" src=\"http:\/\/blog.zhaw.ch\/splab\/files\/2019\/01\/elastest-grafana.png\" alt=\"\" width=\"1394\" height=\"489\" srcset=\"https:\/\/blog.zhaw.ch\/splab\/files\/2019\/01\/elastest-grafana.png 1394w, https:\/\/blog.zhaw.ch\/splab\/files\/2019\/01\/elastest-grafana-300x105.png 300w, https:\/\/blog.zhaw.ch\/splab\/files\/2019\/01\/elastest-grafana-768x269.png 768w, https:\/\/blog.zhaw.ch\/splab\/files\/2019\/01\/elastest-grafana-1024x359.png 1024w, https:\/\/blog.zhaw.ch\/splab\/files\/2019\/01\/elastest-grafana-676x237.png 676w\" sizes=\"auto, (max-width: 1394px) 100vw, 1394px\" \/><\/p>\n<p>This technique is also applicable to many cloud-native applications. These applications are primarily composed of microservices in order to achieve certain guarantees related to <a href=\"https:\/\/pd.zhaw.ch\/publikation\/upload\/211457.pdf\">resilience and elasticity<\/a>. On the implementation level, container compositions are often used for this purpose, and a subset of those use Docker Compose whereas others may use Kubernetes deployment descriptors which support a similar <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/overview\/working-with-objects\/labels\/\">label syntax<\/a> for all objects. While appropriate techniques for testing of cloud-native applications still need to be defined and evaluated, we can assume that the following ingredients contribute to avoid issues: Static tests on metadata, code and configuration, including dependency analysis; unit tests; deployment and integration tests; runtime tests under controlled imperfect conditions; controlled testing (e.g. A\/B testing) in production. We are looking forward to discuss how the testability of applications can be improved and the degree of testing can be expressed across the application development lifecycle.<\/p>\n<div class=\"pt-sm\">Schlagw\u00f6rter: <a href=\"http:\/\/blog.zhaw.ch\/splab\/tag\/cloud-native\/\">cloud-native<\/a>, <a href=\"http:\/\/blog.zhaw.ch\/splab\/tag\/consistency\/\">consistency<\/a>, <a href=\"http:\/\/blog.zhaw.ch\/splab\/tag\/docker\/\">docker<\/a>, <a href=\"http:\/\/blog.zhaw.ch\/splab\/tag\/kubernetes\/\">kubernetes<\/a>, <a href=\"http:\/\/blog.zhaw.ch\/splab\/tag\/maomao\/\">maomao<\/a>, <a href=\"http:\/\/blog.zhaw.ch\/splab\/tag\/testing\/\">testing<\/a><br><\/div>","protected":false},"excerpt":{"rendered":"<p>In our research group, we have for many years observed and systematically explored how cloud applications are being developed. In particular, we focus our investigations on cloud-native applications whose properties are largely determined by exploiting the capabilities of modern cloud platforms for both their development and operation. As we are involved in European research on [&hellip;]<\/p>\n","protected":false},"author":203,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[4],"tags":[20,43,44,34,37,42],"features":[],"class_list":["post-347","post","type-post","status-publish","format-standard","hentry","category-research","tag-cloud-native","tag-consistency","tag-docker","tag-kubernetes","tag-maomao","tag-testing"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>End-to-end testing of cloud-native applications - Service Prototyping Lab<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.zhaw.ch\/splab\/2019\/01\/17\/end-to-end-testing-of-cloud-native-applications\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"End-to-end testing of cloud-native applications\" \/>\n<meta property=\"og:description\" content=\"In our research group, we have for many years observed and systematically explored how cloud applications are being developed. In particular, we focus our investigations on cloud-native applications whose properties are largely determined by exploiting the capabilities of modern cloud platforms for both their development and operation. As we are involved in European research on [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.zhaw.ch\/splab\/2019\/01\/17\/end-to-end-testing-of-cloud-native-applications\/\" \/>\n<meta property=\"og:site_name\" content=\"Service Prototyping Lab\" \/>\n<meta property=\"article:published_time\" content=\"2019-01-17T04:40:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-01-17T06:26:32+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/blog.zhaw.ch\/splab\/files\/2019\/01\/novalido.jpg\" \/>\n<meta name=\"author\" content=\"Josef Spillner\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Josef Spillner\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2019\/01\/17\/end-to-end-testing-of-cloud-native-applications\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2019\/01\/17\/end-to-end-testing-of-cloud-native-applications\/\"},\"author\":{\"name\":\"Josef Spillner\",\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/#\/schema\/person\/33a5227c6cc1fa3329279d33c3cc440e\"},\"headline\":\"End-to-end testing of cloud-native applications\",\"datePublished\":\"2019-01-17T04:40:41+00:00\",\"dateModified\":\"2019-01-17T06:26:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2019\/01\/17\/end-to-end-testing-of-cloud-native-applications\/\"},\"wordCount\":825,\"commentCount\":1,\"image\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2019\/01\/17\/end-to-end-testing-of-cloud-native-applications\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/blog.zhaw.ch\/splab\/files\/2019\/01\/novalido.jpg\",\"keywords\":[\"cloud-native\",\"consistency\",\"docker\",\"kubernetes\",\"maomao\",\"testing\"],\"articleSection\":[\"Research\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.zhaw.ch\/splab\/2019\/01\/17\/end-to-end-testing-of-cloud-native-applications\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2019\/01\/17\/end-to-end-testing-of-cloud-native-applications\/\",\"url\":\"https:\/\/blog.zhaw.ch\/splab\/2019\/01\/17\/end-to-end-testing-of-cloud-native-applications\/\",\"name\":\"End-to-end testing of cloud-native applications - Service Prototyping Lab\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2019\/01\/17\/end-to-end-testing-of-cloud-native-applications\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2019\/01\/17\/end-to-end-testing-of-cloud-native-applications\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/blog.zhaw.ch\/splab\/files\/2019\/01\/novalido.jpg\",\"datePublished\":\"2019-01-17T04:40:41+00:00\",\"dateModified\":\"2019-01-17T06:26:32+00:00\",\"author\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/#\/schema\/person\/33a5227c6cc1fa3329279d33c3cc440e\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2019\/01\/17\/end-to-end-testing-of-cloud-native-applications\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.zhaw.ch\/splab\/2019\/01\/17\/end-to-end-testing-of-cloud-native-applications\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2019\/01\/17\/end-to-end-testing-of-cloud-native-applications\/#primaryimage\",\"url\":\"http:\/\/blog.zhaw.ch\/splab\/files\/2019\/01\/novalido.jpg\",\"contentUrl\":\"http:\/\/blog.zhaw.ch\/splab\/files\/2019\/01\/novalido.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2019\/01\/17\/end-to-end-testing-of-cloud-native-applications\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/blog.zhaw.ch\/splab\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"End-to-end testing of cloud-native applications\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/#website\",\"url\":\"https:\/\/blog.zhaw.ch\/splab\/\",\"name\":\"Service Prototyping Lab\",\"description\":\"A Blog of the ZHAW Zurich University of Applied Sciences\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.zhaw.ch\/splab\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/#\/schema\/person\/33a5227c6cc1fa3329279d33c3cc440e\",\"name\":\"Josef Spillner\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/c57d7019e91373902c08eac230e003cb4f8498ecf68c9d119e9ecb82fdf6c400?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c57d7019e91373902c08eac230e003cb4f8498ecf68c9d119e9ecb82fdf6c400?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c57d7019e91373902c08eac230e003cb4f8498ecf68c9d119e9ecb82fdf6c400?s=96&d=mm&r=g\",\"caption\":\"Josef Spillner\"},\"description\":\"Head of the Service Prototyping Lab. Research on distributed systems and application computing paradigms. Senior lecturer at Zurich University of Applied Sciences.\",\"url\":\"https:\/\/blog.zhaw.ch\/splab\/author\/spio\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"End-to-end testing of cloud-native applications - Service Prototyping Lab","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:\/\/blog.zhaw.ch\/splab\/2019\/01\/17\/end-to-end-testing-of-cloud-native-applications\/","og_locale":"en_GB","og_type":"article","og_title":"End-to-end testing of cloud-native applications","og_description":"In our research group, we have for many years observed and systematically explored how cloud applications are being developed. In particular, we focus our investigations on cloud-native applications whose properties are largely determined by exploiting the capabilities of modern cloud platforms for both their development and operation. As we are involved in European research on [&hellip;]","og_url":"https:\/\/blog.zhaw.ch\/splab\/2019\/01\/17\/end-to-end-testing-of-cloud-native-applications\/","og_site_name":"Service Prototyping Lab","article_published_time":"2019-01-17T04:40:41+00:00","article_modified_time":"2019-01-17T06:26:32+00:00","og_image":[{"url":"http:\/\/blog.zhaw.ch\/splab\/files\/2019\/01\/novalido.jpg","type":"","width":"","height":""}],"author":"Josef Spillner","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Josef Spillner","Estimated reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.zhaw.ch\/splab\/2019\/01\/17\/end-to-end-testing-of-cloud-native-applications\/#article","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/splab\/2019\/01\/17\/end-to-end-testing-of-cloud-native-applications\/"},"author":{"name":"Josef Spillner","@id":"https:\/\/blog.zhaw.ch\/splab\/#\/schema\/person\/33a5227c6cc1fa3329279d33c3cc440e"},"headline":"End-to-end testing of cloud-native applications","datePublished":"2019-01-17T04:40:41+00:00","dateModified":"2019-01-17T06:26:32+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.zhaw.ch\/splab\/2019\/01\/17\/end-to-end-testing-of-cloud-native-applications\/"},"wordCount":825,"commentCount":1,"image":{"@id":"https:\/\/blog.zhaw.ch\/splab\/2019\/01\/17\/end-to-end-testing-of-cloud-native-applications\/#primaryimage"},"thumbnailUrl":"http:\/\/blog.zhaw.ch\/splab\/files\/2019\/01\/novalido.jpg","keywords":["cloud-native","consistency","docker","kubernetes","maomao","testing"],"articleSection":["Research"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.zhaw.ch\/splab\/2019\/01\/17\/end-to-end-testing-of-cloud-native-applications\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.zhaw.ch\/splab\/2019\/01\/17\/end-to-end-testing-of-cloud-native-applications\/","url":"https:\/\/blog.zhaw.ch\/splab\/2019\/01\/17\/end-to-end-testing-of-cloud-native-applications\/","name":"End-to-end testing of cloud-native applications - Service Prototyping Lab","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/splab\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.zhaw.ch\/splab\/2019\/01\/17\/end-to-end-testing-of-cloud-native-applications\/#primaryimage"},"image":{"@id":"https:\/\/blog.zhaw.ch\/splab\/2019\/01\/17\/end-to-end-testing-of-cloud-native-applications\/#primaryimage"},"thumbnailUrl":"http:\/\/blog.zhaw.ch\/splab\/files\/2019\/01\/novalido.jpg","datePublished":"2019-01-17T04:40:41+00:00","dateModified":"2019-01-17T06:26:32+00:00","author":{"@id":"https:\/\/blog.zhaw.ch\/splab\/#\/schema\/person\/33a5227c6cc1fa3329279d33c3cc440e"},"breadcrumb":{"@id":"https:\/\/blog.zhaw.ch\/splab\/2019\/01\/17\/end-to-end-testing-of-cloud-native-applications\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.zhaw.ch\/splab\/2019\/01\/17\/end-to-end-testing-of-cloud-native-applications\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/blog.zhaw.ch\/splab\/2019\/01\/17\/end-to-end-testing-of-cloud-native-applications\/#primaryimage","url":"http:\/\/blog.zhaw.ch\/splab\/files\/2019\/01\/novalido.jpg","contentUrl":"http:\/\/blog.zhaw.ch\/splab\/files\/2019\/01\/novalido.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/blog.zhaw.ch\/splab\/2019\/01\/17\/end-to-end-testing-of-cloud-native-applications\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/blog.zhaw.ch\/splab\/"},{"@type":"ListItem","position":2,"name":"End-to-end testing of cloud-native applications"}]},{"@type":"WebSite","@id":"https:\/\/blog.zhaw.ch\/splab\/#website","url":"https:\/\/blog.zhaw.ch\/splab\/","name":"Service Prototyping Lab","description":"A Blog of the ZHAW Zurich University of Applied Sciences","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.zhaw.ch\/splab\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Person","@id":"https:\/\/blog.zhaw.ch\/splab\/#\/schema\/person\/33a5227c6cc1fa3329279d33c3cc440e","name":"Josef Spillner","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/c57d7019e91373902c08eac230e003cb4f8498ecf68c9d119e9ecb82fdf6c400?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/c57d7019e91373902c08eac230e003cb4f8498ecf68c9d119e9ecb82fdf6c400?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c57d7019e91373902c08eac230e003cb4f8498ecf68c9d119e9ecb82fdf6c400?s=96&d=mm&r=g","caption":"Josef Spillner"},"description":"Head of the Service Prototyping Lab. Research on distributed systems and application computing paradigms. Senior lecturer at Zurich University of Applied Sciences.","url":"https:\/\/blog.zhaw.ch\/splab\/author\/spio\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/posts\/347","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/users\/203"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/comments?post=347"}],"version-history":[{"count":3,"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/posts\/347\/revisions"}],"predecessor-version":[{"id":357,"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/posts\/347\/revisions\/357"}],"wp:attachment":[{"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/media?parent=347"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/categories?post=347"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/tags?post=347"},{"taxonomy":"features","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/features?post=347"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}