{"id":392,"date":"2019-09-09T14:58:03","date_gmt":"2019-09-09T14:58:03","guid":{"rendered":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/?p=392"},"modified":"2022-02-18T14:09:10","modified_gmt":"2022-02-18T14:09:10","slug":"test-automation-with-squish-part-1","status":"publish","type":"post","link":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/test-automation-with-squish-part-1\/","title":{"rendered":"Test Automation with Squish (Part 1) \u2013 Technical Perspective"},"content":{"rendered":"\n<p>A wide variety of test automation tools for various fields of application is available on the market today. One of our clients in the medical engineering industry, for example, has regularly used the tool \u201cSquish\u201d for the automation of GUI tests. That is why in this blog post, I would like to take a closer look at the technical and functional aspects to be observed in the design of test frameworks and test scripts. The second part of this blog post series will provide additional information on this topic.<\/p>\n\n\n\n<p>With \u201cSquish\u201d, a GUI test automation tool produced by the software company Froglogic in Hamburg, the entire test code and everything that goes with it is written and managed using one of five programming or script languages that are commonly used today. You can choose among Ruby, JavaScript, Tcl, Perl, and Python. As Python represents the state of the art and has a vast range of functions that can be increased even more with numerous freely available libs, but most importantly because of the exceptional readability of the test scripts written in this language, Python should be the language of choice. The default language of Squish is Python 2.7.XX, but upon request, Froglogic also provides an edition of Squish with the requested Python version (e.g. Python 3.5.XX) for download. If you absolutely prefer Python 3, you are welcome to use this option, but the default Python 2.7 included in the delivery will serve you perfectly well.<\/p>\n\n\n\n<figure class=\"wp-block-image size-medium\"><img decoding=\"async\" src=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2020\/05\/201909_Testautomatisierung_Squish_Technische_Sicht_1-600x322.jpg\" alt=\"Part of Squish IDE based on the open-source Eclipse IDE\" class=\"wp-image-535\"\/><figcaption><em>Figure 1: The Squish IDE is based on the open-source Eclipse IDE<\/em><\/figcaption><\/figure>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Irrespective of the script language you choose, Squish generally provides two approaches for dealing with an AUT (\u201capplication under test\u201d) in the test execution. Either Squish implicitly starts and stops the AUT for each test case, or you connect to a running AUT for each test case. As most software applications are not continually stopped and restarted in practice, the second approach is closer to real-life behavior and should therefore definitely be preferred to the first approach.<\/p>\n\n\n\n<p>In the world of Squish, this approach is also called \u201cattachable AUT\u201d. However, Froglogic only provides some of the test script functions required to control an \u201cattachable AUT\u201d, and you have to implement them yourself.<\/p>\n\n\n\n<p>Over the years, \u201cTstHelper\u201d has been tried and tested by our client. As the name implies, this is a servant for test execution which implements a mechanism to handle the \u201cattachable AUT\u201d approach, among others. In order to minimize redundant test code in a test script, the entire mechanism was integrated into the constructor. Thus, a single line instantiating an object of the \u201cTstHelper\u201d class at the beginning of a test script is sufficient\u2014more about this in the second post.<\/p>\n\n\n\n<p>In principle, the mechanism consists of a single \u201ctry&#8230;except\u201d block:<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>    try:\n         attachToApplication()\n    except RuntimeError:\n         AppUnderTest.start() <\/code><\/pre>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>The Squish function <em>\u201cattachToApplication\u201d<\/em> throws a \u201cRuntimeError\u201d if and only if a connection is to be established to an AUT that has not yet been started. In that case, the static function <em>AppUnderTest.start()<\/em> is called up, which\u2014as the name implies\u2014starts the AUT. You have to implement both the class and the function yourself. The name \u201cAppUndertest\u201d should be replaced by the name of the application that is actually going to be tested. This name also constitutes the name of the namespace that provides the <em>start()<\/em> function.<\/p>\n\n\n\n<p>Python does not have its own notation for namespaces, which is why namespaces are realized by means of classes. In simplified terms, the class structure should look like this:<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>    class AppUnderTest:\n        \n        @staticmethod\n        def start():\n             os.system(\"{BatchSkript}\")\n         \n        @staticmethod\n        def stop():\n             ToplevelWindow.byName(\"{MainWindowObjID}\", 10).close()<\/code><\/pre>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>With the \u201cattachable AUT\u201d approach, the AUT runs in a process separate from Squish. It is therefore started by way of an external batch script that has to be written once. The script call is then integrated into the <em>start()<\/em> function using the Python command \u201cos.system\u201d (see above).<\/p>\n\n\n\n<p>To stop the AUT, Squish provides the function <em>\u201cToplevelWindow.byName(\u201c{MainWindowObjID}\u201d, 10).close()\u201d<\/em>. The parameter <em>\u201cMainWindowObjID\u201d<\/em> represents the object ID of the top element in the hierarchy from the object map. The function call is encapsulated in the static function <em>stop()<\/em>. Consequently, the call in the test script has to be preceded by the class name as well: <em>AppUnderTest.stop()<\/em>. This syntax was chosen on purpose because of its good and clear readability. All functions attached to the AUT should be summarized into this class or this namespace. Other functions, e.g. to return the AUT to its original state, wait for or react to specific system events, or encapsulate the <em>\u201cattachToApplication()\u201d<\/em> call, can be added, possibly to add logging.<\/p>\n\n\n\n<p>The organization into namespaces is also ideal for integrating additional test tools that are to be controlled from a test script. For each test tool, a separate Python class is created according to the pattern described above. The call to start and stop the test tool is to be integrated into the <em>start() and stop()<\/em> methods. This method list can be extended as required, e.g. to include functions to secure the logfiles, etc. In the test script, they are called analogously by means of <em>\u201cTesttool.start()\u201d<\/em> and <em>\u201cTesttool.saveLogfilesTo()\u201d<\/em>. Obviously, the class name has to be replaced by the name of the test tool. The resulting syntax will be something like <em>\u201cCanSimuator.start()\u201d<\/em>, which improves readability and facilitates the review of the test scripts. Read more about this topic in the second blog post.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>How does test automation with Squish work? Which technical and functional aspects should be noted while designing the test framework or the test scripts?<\/p>\n","protected":false},"author":86,"featured_media":395,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"advgb_blocks_editor_width":"","advgb_blocks_columns_visual_guide":"","footnotes":""},"categories":[7],"tags":[125,131,174,175,178,179,180,181],"topics":[82],"class_list":["post-392","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-quality-assurance","tag-test-framework-2","tag-test-automation","tag-squish","tag-python","tag-aut","tag-application-under-test","tag-test-scripts","tag-gui-test-2","topics-test-automation"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Test automation with Squish Part 1 - ZEISS Digital Innovation Blog<\/title>\n<meta name=\"description\" content=\"How does test automation with Squish work? Which technical and functional aspects should be noted while designing the test framework or the test scripts?\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/test-automation-with-squish-part-1\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Test automation with Squish Part 1 - ZEISS Digital Innovation Blog\" \/>\n<meta property=\"og:description\" content=\"How does test automation with Squish work? Which technical and functional aspects should be noted while designing the test framework or the test scripts?\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/test-automation-with-squish-part-1\/\" \/>\n<meta property=\"og:site_name\" content=\"Digital Innovation Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-09-09T14:58:03+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-02-18T14:09:10+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2020\/05\/201909_Testautomatisierung_Squish_Technische_Sicht_1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1030\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Steve Gronwaldt\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Steve Gronwaldt\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/test-automation-with-squish-part-1\/\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/test-automation-with-squish-part-1\/\",\"name\":\"Test automation with Squish Part 1 - ZEISS Digital Innovation Blog\",\"isPartOf\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/test-automation-with-squish-part-1\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/test-automation-with-squish-part-1\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2020\/05\/201909_Testautomatisierung_Squish_Technische_Sicht_1.jpg\",\"datePublished\":\"2019-09-09T14:58:03+00:00\",\"dateModified\":\"2022-02-18T14:09:10+00:00\",\"author\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/af9b6a8abe8dcf5a418126abcd49b22e\"},\"description\":\"How does test automation with Squish work? Which technical and functional aspects should be noted while designing the test framework or the test scripts?\",\"breadcrumb\":{\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/test-automation-with-squish-part-1\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/test-automation-with-squish-part-1\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/test-automation-with-squish-part-1\/#primaryimage\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2020\/05\/201909_Testautomatisierung_Squish_Technische_Sicht_1.jpg\",\"contentUrl\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2020\/05\/201909_Testautomatisierung_Squish_Technische_Sicht_1.jpg\",\"width\":1920,\"height\":1030,\"caption\":\"Ausschnitt Squish IDE basiert auf der Open-Source IDE Eclipse\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/test-automation-with-squish-part-1\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Test Automation with Squish (Part 1) \u2013 Technical Perspective\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#website\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/\",\"name\":\"Digital Innovation Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/af9b6a8abe8dcf5a418126abcd49b22e\",\"name\":\"Steve Gronwaldt\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2020\/05\/gronwaldt_steve-150x150.jpg\",\"contentUrl\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2020\/05\/gronwaldt_steve-150x150.jpg\",\"caption\":\"Steve Gronwaldt\"},\"description\":\"Steve Gronwaldt has been working in the software quality assurance department at ZEISS Digital Innovation since 2007. During this time, he gained experience in classic and agile projects in the industrial and medical environment. In addition to test analysis and test design, his field of activity primarily includes test automation and test management tasks, taking into account applicable standards. He is particularly interested in the interface between software development and testing and the associated technical options for automating manual processes.\",\"url\":\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/author\/enstevegronwaldt\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Test automation with Squish Part 1 - ZEISS Digital Innovation Blog","description":"How does test automation with Squish work? Which technical and functional aspects should be noted while designing the test framework or the test scripts?","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:\/\/blogs.zeiss.com\/digital-innovation\/en\/test-automation-with-squish-part-1\/","og_locale":"en_US","og_type":"article","og_title":"Test automation with Squish Part 1 - ZEISS Digital Innovation Blog","og_description":"How does test automation with Squish work? Which technical and functional aspects should be noted while designing the test framework or the test scripts?","og_url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/test-automation-with-squish-part-1\/","og_site_name":"Digital Innovation Blog","article_published_time":"2019-09-09T14:58:03+00:00","article_modified_time":"2022-02-18T14:09:10+00:00","og_image":[{"width":1920,"height":1030,"url":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2020\/05\/201909_Testautomatisierung_Squish_Technische_Sicht_1.jpg","type":"image\/jpeg"}],"author":"Steve Gronwaldt","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Steve Gronwaldt","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/test-automation-with-squish-part-1\/","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/test-automation-with-squish-part-1\/","name":"Test automation with Squish Part 1 - ZEISS Digital Innovation Blog","isPartOf":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/test-automation-with-squish-part-1\/#primaryimage"},"image":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/test-automation-with-squish-part-1\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2020\/05\/201909_Testautomatisierung_Squish_Technische_Sicht_1.jpg","datePublished":"2019-09-09T14:58:03+00:00","dateModified":"2022-02-18T14:09:10+00:00","author":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/af9b6a8abe8dcf5a418126abcd49b22e"},"description":"How does test automation with Squish work? Which technical and functional aspects should be noted while designing the test framework or the test scripts?","breadcrumb":{"@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/test-automation-with-squish-part-1\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.zeiss.com\/digital-innovation\/en\/test-automation-with-squish-part-1\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/test-automation-with-squish-part-1\/#primaryimage","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2020\/05\/201909_Testautomatisierung_Squish_Technische_Sicht_1.jpg","contentUrl":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2020\/05\/201909_Testautomatisierung_Squish_Technische_Sicht_1.jpg","width":1920,"height":1030,"caption":"Ausschnitt Squish IDE basiert auf der Open-Source IDE Eclipse"},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/test-automation-with-squish-part-1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/"},{"@type":"ListItem","position":2,"name":"Test Automation with Squish (Part 1) \u2013 Technical Perspective"}]},{"@type":"WebSite","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#website","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/","name":"Digital Innovation Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/af9b6a8abe8dcf5a418126abcd49b22e","name":"Steve Gronwaldt","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/#\/schema\/person\/image\/","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2020\/05\/gronwaldt_steve-150x150.jpg","contentUrl":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-content\/uploads\/sites\/3\/2020\/05\/gronwaldt_steve-150x150.jpg","caption":"Steve Gronwaldt"},"description":"Steve Gronwaldt has been working in the software quality assurance department at ZEISS Digital Innovation since 2007. During this time, he gained experience in classic and agile projects in the industrial and medical environment. In addition to test analysis and test design, his field of activity primarily includes test automation and test management tasks, taking into account applicable standards. He is particularly interested in the interface between software development and testing and the associated technical options for automating manual processes.","url":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/author\/enstevegronwaldt\/"}]}},"author_meta":{"display_name":"Steve Gronwaldt","author_link":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/author\/enstevegronwaldt\/"},"featured_img":"https:\/\/blogs.zeiss.com\/digital-innovation\/de\/wp-content\/uploads\/sites\/2\/2020\/05\/201909_Testautomatisierung_Squish_Technische_Sicht_1-600x322.jpg","coauthors":[],"tax_additional":{"categories":{"linked":["<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/quality-assurance\/\" class=\"advgb-post-tax-term\">Quality Assurance<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">Quality Assurance<\/span>"]},"tags":{"linked":["<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/quality-assurance\/\" class=\"advgb-post-tax-term\">test framework<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/quality-assurance\/\" class=\"advgb-post-tax-term\">test automation<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/quality-assurance\/\" class=\"advgb-post-tax-term\">Squish<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/quality-assurance\/\" class=\"advgb-post-tax-term\">Python<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/quality-assurance\/\" class=\"advgb-post-tax-term\">AUT<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/quality-assurance\/\" class=\"advgb-post-tax-term\">Application Under Test<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/quality-assurance\/\" class=\"advgb-post-tax-term\">test scripts<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/category\/quality-assurance\/\" class=\"advgb-post-tax-term\">GUI test<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">test framework<\/span>","<span class=\"advgb-post-tax-term\">test automation<\/span>","<span class=\"advgb-post-tax-term\">Squish<\/span>","<span class=\"advgb-post-tax-term\">Python<\/span>","<span class=\"advgb-post-tax-term\">AUT<\/span>","<span class=\"advgb-post-tax-term\">Application Under Test<\/span>","<span class=\"advgb-post-tax-term\">test scripts<\/span>","<span class=\"advgb-post-tax-term\">GUI test<\/span>"]}},"comment_count":"0","relative_dates":{"created":"Posted 7 years ago","modified":"Updated 4 years ago"},"absolute_dates":{"created":"Posted on September 9, 2019","modified":"Updated on February 18, 2022"},"absolute_dates_time":{"created":"Posted on September 9, 2019 2:58 pm","modified":"Updated on February 18, 2022 2:09 pm"},"featured_img_caption":"","series_order":"","_links":{"self":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/posts\/392","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/users\/86"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/comments?post=392"}],"version-history":[{"count":7,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/posts\/392\/revisions"}],"predecessor-version":[{"id":1228,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/posts\/392\/revisions\/1228"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/media\/395"}],"wp:attachment":[{"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/media?parent=392"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/categories?post=392"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/tags?post=392"},{"taxonomy":"topics","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/digital-innovation\/en\/wp-json\/wp\/v2\/topics?post=392"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}