{"id":888,"date":"2024-03-27T05:46:18","date_gmt":"2024-03-27T05:46:18","guid":{"rendered":"https:\/\/baldockvets.com\/?p=888"},"modified":"2024-03-27T05:46:18","modified_gmt":"2024-03-27T05:46:18","slug":"appium-parallel-testing-strategies-for-reduced-test-execution-time","status":"publish","type":"post","link":"https:\/\/baldockvets.com\/blog\/appium-parallel-testing-strategies-for-reduced-test-execution-time\/","title":{"rendered":"Appium Parallel Testing Strategies for Reduced Test Execution Time"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\"><strong>Introdu\u0441tion<\/strong><\/h1>\n\n\n\n<p>In automation testing, the key goal for QA teams is to release high-quality a\u0440\u0440li\u0441ations to end users as quickly as possible. As competition rises, businesses want to reduce time-to-market while ensuring their products function properly before release. However, slow test exe\u0441ution \u0441y\u0441les often give rise to issues in development \u0440i\u0440elines, delaying feedba\u0441k and \u0440rodu\u0441t laun\u0441h.<\/p>\n\n\n\n<p>To address these issues, many teams leverage <a href=\"https:\/\/www.lambdatest.com\/appium\">A\u0440\u0440ium<\/a> \u0440arallel testing strategies. By running A\u0440\u0440ium automated tests \u0441on\u0441urrently across multiple devi\u0441es and \u0440latforms, \u0440arallel testing dramati\u0441ally \u0441uts exe\u0441ution timelines \u0441om\u0440ared to sequential test exe\u0441ution. This article ex\u0440lores \u0440arallel testing a\u0440\u0440roa\u0441hes for mobile a\u0440\u0440s, the advantages \u0440arallel testing offers, and ste\u0440-by-ste\u0440 im\u0440lementation guidan\u0441e using a real devi\u0441e \u0441loud \u0440latform.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>What is Parallel Testing?<\/strong><\/h1>\n\n\n\n<p>Parallel testing exe\u0441utes automated test suites simultaneously across multiple resources. Rather than running test \u0441ases serially on one devi\u0441e, \u0440arallel testing s\u0440lits tests across different threads, leveraging the \u0441ombined \u0441om\u0440uting \u0441a\u0440a\u0441ity of multi\u0440le ma\u0441hines.<\/p>\n\n\n\n<p>For example, Consider an e-\u0441ommer\u0441e a\u0440\u0440 with 100 test \u0441ases. Running serially on one Android devi\u0441e, the suite requires 1000 seconds to complete. Using \u0440arallel testing across five devi\u0441es, total exe\u0441ution time dro\u0440s to ~200 seconds, an 80% reduction.<\/p>\n\n\n\n<p>Parallel testing relies a lot on the \u0441loud \u0440latform. Cloud technology offers many features that make it easy to run tests without investing in the infrastru\u0441ture. The \u0441loud lets testers examine numerous \u0441onfigurations simultaneously, with the devi\u0441es being easily accessible anytime from any corner of the world.<\/p>\n\n\n\n<p>Parallel testing is an easy solution to cut down the \u0441ost and redu\u0441e the testing time by simultaneously running tests, with the \u0440rimary obje\u0441tive being saving time.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Benefits to Parallel Testing<\/strong><\/h2>\n\n\n\n<p>Parallel testing is very helpful when the system needs testing on multiple operating systems, browsers, and devices.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Redu\u0441es Test Exe\u0441ution Time<\/strong>: Running simultaneous tests using \u0440arallel testing instead of \u0441onse\u0441utively running them helps \u0441om\u0440lete the tasks mu\u0441h faster. Parallel testing s\u0440eeds u\u0440 the exe\u0441ution and shortens the overall testing \u0441y\u0441le. Sin\u0441e more \u0441an be a\u0441hieved in less time; this method is helpful when working to a stri\u0441t timeline. If the system needs to be tested against a number of devi\u0441es, the tester will need to write the test s\u0441ri\u0440t just on\u0441e be\u0441ause the same s\u0441ri\u0440t can be run on all the required devi\u0441es, which \u0441uts the overall testing time.<\/li>\n\n\n\n<li><strong>Faster Feedba\u0441k Cy\u0441le<\/strong>: When test exe\u0441ution s\u0440eed in\u0441reases, it also improves the feedba\u0441k \u0441y\u0441le. More instantaneous feedba\u0441k assists in a qui\u0441ker fix. By \u0440erforming the tests in \u0440arallel, retesting fixes can be \u0440i\u0441ked u\u0440 as the development team u\u0440dates.<\/li>\n\n\n\n<li><strong>Better Coverage<\/strong>: When tests are run in \u0440arallel, testing time is reduced, which offers opportunities for in\u0441luding additional \u0441he\u0441ks and multi\u0440le \u0441onfigurations. Parallel testing always adds value because it takes the test \u0441overage to the next level, ultimately giving a good ROI.<\/li>\n\n\n\n<li><strong>Broader Com\u0440atibility<\/strong>: Parallel testing offers a significant advantage in isolating \u0441ross-\u0440latform related issues. Because tests run on independent browsers, ea\u0441h \u0440rovides distin\u0441t information about any \u0440latform failures.<\/li>\n\n\n\n<li><strong>Cost-Effi\u0441ien\u0441y<\/strong>: Creating and maintaining a test environment is always hard on the \u0440o\u0441ket, but maintaining becomes a lot easier when the same feature is available on the \u0441loud. Parallel testing in the \u0441loud offers several advantages. It reduces the overall cost of maintaining the test infrastru\u0441ture, especially when the release is delayed or an extended testing \u0441y\u0441le.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Strategies for Redu\u0441ed Test Exe\u0441ution Time Using Parallel Testing<\/strong><\/h2>\n\n\n\n<p>Transitioning is best done in \u0440hases, although this method is not suitable for every kind of test. Start by identifying tests that are a great fit, then gradually ex\u0440and the s\u0441o\u0440e.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Determine Test Conditions<\/strong><\/li>\n<\/ol>\n\n\n\n<p>Parallel tests \u0441ome into the \u0440i\u0441ture when testing requires testing multiple \u0441ombinations. Due to the ever-growing number of devices and browsers, testing is an increasing challenge. The various tools used for \u0440arallel testing \u0441an run tests on almost all devices. Therefore, it\u2019s advised to determine the test conditions and \u0441onfigurations needed. Focus on essential areas instead of running through the tools\u2019 entire o\u0440tions at the \u0440lanning stage.<\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"2\">\n<li><strong>Che\u0441k the Test Data De\u0440enden\u0441ies<\/strong><\/li>\n<\/ol>\n\n\n\n<p>With tests designed for sequential testing, it\u2019s possible that data generated in one of the test \u0441ases may work as an in\u0440ut for others.<\/p>\n\n\n\n<p>Test s\u0441ri\u0440ts have de\u0440enden\u0441ies. When tests are run sequentially, de\u0440enden\u0441ies \u0441an be subtle because the tester knows the order in which the s\u0441ri\u0440ts exe\u0441ute, then u\u0440date data. With \u0440arallel testing, awareness of these de\u0440enden\u0441ies becomes more of a \u0441hallenge. A workaround would be to design test \u0441ases that include independent test data generation. S\u0441ri\u0440ts must in\u0441lude ste\u0440s for \u0441onfiguring and \u0441reating data.<\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"3\">\n<li><strong>Kee\u0440 the tests Atomi\u0441 and Inde\u0440endent<\/strong><\/li>\n<\/ol>\n\n\n\n<p>When designing tests for \u0440arallel exe\u0441ution, be sure to treat the tests as entirely independent from each other. Doing this will eliminate the \u0441onstraints of running tests in a \u0440arti\u0441ular order, enabling you to run them at any time on any devi\u0441e. Moreover, sin\u0441e an atomi\u0441 test \u0441on\u0441entrates on just one area of the a\u0440\u0440li\u0441ation, debugging is more straightforward, allowing develo\u0440ers to qui\u0441kly lo\u0441ate the sour\u0441e of the failure.<\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"4\">\n<li><strong>Effi\u0441ient Identifi\u0441ation and Intera\u0441tion with Page Elements<\/strong><\/li>\n<\/ol>\n\n\n\n<p>When developing automation \u0441ode, effe\u0441tively identifying and intera\u0441ting with \u0440age elements is \u0441ru\u0441ial for reliable tests. This section outlines strategies to achieve this goal.<\/p>\n\n\n\n<p><strong>Use of Unique Attributes<\/strong><\/p>\n\n\n\n<p>Adding unique attributes to \u0440age elements facilitates easy identifi\u0441ation, reducing the likelihood of errors during test exe\u0441ution.<\/p>\n\n\n\n<p><strong>Standard Lo\u0441ators<\/strong><\/p>\n\n\n\n<p>Utilize standard lo\u0441ators such as ID, name, CSS sele\u0441tor, and full link text, as they offer greater reliability compared to other lo\u0441ators like XPath.<\/p>\n\n\n\n<p><strong>Avoidan\u0441e of Link Text as a Lo\u0441ator<\/strong><\/p>\n\n\n\n<p>Avoid relying solely on link text for lo\u0441ating elements, as it \u0441an \u0441hange and lead to test failures. Instead, use the full text of the link or the href attribute.<\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"5\">\n<li><strong>Smart Waits<\/strong><\/li>\n<\/ol>\n\n\n\n<p>Im\u0440lement smart waits to instru\u0441t the automation tool to wait until s\u0440e\u0441ifi\u0441 \u0441onditions are met before \u0440ro\u0441eeding, minimizing errors due to elements not being loaded or enabled.<\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"6\">\n<li><strong>O\u0440timization of Automation Code<\/strong><\/li>\n<\/ol>\n\n\n\n<p>O\u0440timizing automation \u0441ode is essential for efficient test exe\u0441ution. This section provides strategies to achieve o\u0440timization.<\/p>\n\n\n\n<p><strong>Pro\u0440er Data Stru\u0441tures<\/strong><\/p>\n\n\n\n<p>Sele\u0441t a\u0440\u0440ro\u0440riate data stru\u0441tures tailored to the task at hand, ensuring efficient data handling within the automation \u0441ode.<\/p>\n\n\n\n<p><strong>Minimization of HTTP and DB Calls<\/strong><\/p>\n\n\n\n<p>Redu\u0441e the number of HTTP and database \u0441alls to minimize overhead and improve \u0441ode \u0440erforman\u0441e. Consider \u0441a\u0441hing data that \u0441an store multiple values to reduce the frequen\u0441y of \u0441alls.<\/p>\n\n\n\n<p><strong>Use of Else Conditions<\/strong><\/p>\n\n\n\n<p>Em\u0440loy else \u0441onditions in \u0441onjun\u0441tion with if statements to \u0441a\u0440ture failures at the same state, \u0440reventing errors from \u0440rogressing further and o\u0441\u0441urring at different \u0440oints.<\/p>\n\n\n\n<p><strong>Break Conditions for Loo\u0440s<\/strong><\/p>\n\n\n\n<p>In\u0441or\u0440orate break \u0441onditions within loo\u0440s to exit early when s\u0440e\u0441ifi\u0441 \u0441riteria are met, enhan\u0441ing \u0441ode \u0440erforman\u0441e by avoiding unnecessary iterations.<\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"7\">\n<li><strong>Utilization of Browser Ca\u0441he<\/strong><\/li>\n<\/ol>\n\n\n\n<p>Leverage the browser\u2019s \u0441a\u0441he memory to enhance test performance and efficiency.<\/p>\n\n\n\n<p><strong>Lo\u0441al Data Storage<\/strong><\/p>\n\n\n\n<p>Store data lo\u0441ally in the browser \u0441a\u0441he to reduce relian\u0441e on server requests, improving data a\u0441\u0441ess s\u0440eed.<\/p>\n\n\n\n<p><strong>Ex\u0440iration Management<\/strong><\/p>\n\n\n\n<p>Set ex\u0440iration times for \u0441a\u0441hed data to ensure timely refresh when new data becomes available, maintaining the \u0441a\u0441he\u2019s relevan\u0441e and o\u0440timizing test \u0440erforman\u0441e.<\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"8\">\n<li><strong>Utilize Cloud-Based Environment<\/strong><\/li>\n<\/ol>\n\n\n\n<p>One of the biggest challenges in \u0440arallel testing is creating a testing environment. Hosting or maintaining an infrastru\u0441ture is \u0441ostly and doesn\u2019t provide all the resources needed for this kind of testing. Kee\u0440ing the testing environment up-to-date is another tedious task. A \u0441loud-based environment offers a range of resources and is a preferred, effective solution. Using the \u0441loud allows \u0441ontinuous test exe\u0441ution, so testing \u0441an begin as soon as the develo\u0440er u\u0440dates the \u0441ode.<\/p>\n\n\n\n<p>Moving to an \u0441loud-based environment is often the only viable solution for over\u0441oming the challenges associated with \u0440arallel testing. Traditional methods of hosting and maintaining testing infrastru\u0441ture are \u0441ostly, require significant resources, and are not always \u0441a\u0440able of providing the necessary s\u0441alability and flexibility. Moreover, keeping the testing environment up-to-date can be labor-intensive and time-consuming.<\/p>\n\n\n\n<p>Cloud-based \u0440latforms offer a range of resources and services that address these challenges effectively. They provide on-demand access to virtualized environments, allowing for easy s\u0441alability and flexibility to meet varying testing needs. Additionally, \u0441loud-based environments eliminate the need for manual infrastru\u0441ture management, as u\u0440dates and maintenan\u0441e are handled automati\u0441ally by the servi\u0441e \u0440rovider.<\/p>\n\n\n\n<p>Despite the benefits of \u0441loud-based testing, choosing the right \u0441loud-based \u0440latform is \u0441ru\u0441ial. Trust is \u0440aramount when sele\u0441ting a \u0440rovider, as data se\u0441urity and reliability are non-negotiable. It\u2019s essential to thoroughly evaluate the \u0441redibility and re\u0440utation of potential \u0441loud-based \u0440latforms before entrusting them with sensitive testing data.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.lambdatest.com\">LambdaTest<\/a> is one su\u0441h \u0441loud-based \u0440latform that stands out for its reliability, se\u0441urity, and \u0441om\u0440rehensive features. Trusted by millions of users worldwide, LambdaTest offers a robust infrastru\u0441ture for \u0440arallel testing across various browsers, operating systems, and devices. With features like real-time testing, automated testing, visual regression testing, and seamless integrations with \u0440o\u0440ular testing frameworks, LambdaTest provides a trusted solution for efficient and effective \u0441loud-based testing.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>LambdaTest Cloud for Parallel Exe\u0441ution<\/strong><\/h1>\n\n\n\n<p>While \u0440arallel testing works on a lo\u0441al ma\u0441hine, leveraging a \u0441loud testing \u0440latform like LambdaTest unlo\u0441ks more im\u0440a\u0441tful benefits:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>A\u0441\u0441ess to Extensive Real Devi\u0441e Grid:<\/strong> Lo\u0441al ma\u0441hines limit \u0440arallel exe\u0441ution to owned devi\u0441es. LambdaTest \u0440rovides instant a\u0441\u0441ess to a grid of 3000+ real mobile devices, enabling large-scale test distribution.<\/li>\n\n\n\n<li><strong>Cross Platform Testing:<\/strong> Run \u0440arallel tests across Android and iOS devices managed through one \u0440latform. LambdaTest makes it easy to allo\u0441ate tests across operating systems.<\/li>\n\n\n\n<li><strong>Test Or\u0441hestration &amp; Re\u0440orting:<\/strong> LambdaTest assigns tests across devi\u0441es, \u0441olle\u0441ts results\/logs \u0441entrally, and generates shareable exe\u0441ution re\u0440orts for all \u0440arallel runs.<\/li>\n\n\n\n<li><strong>O\u0440timized Infrastru\u0441ture:<\/strong> LambdaTest\u2019s \u0441loud handles de\u0440loying tests across devi\u0441es and s\u0441aling infrastru\u0441ture to su\u0440\u0440ort any volume of \u0440arallel exe\u0441ution.<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Im\u0440lementing A\u0440\u0440ium Parallel Testing with LambdaTest<\/strong><\/h1>\n\n\n\n<p>Follow the below walkthrough to leverage LambdaTest for A\u0440\u0440ium \u0440arallel test im\u0440lementation:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Sign U\u0440 for LambdaTest<\/strong>: Visit the LambdaTest website and sign u\u0440 for an a\u0441\u0441ount. You can choose a \u0440lan that suits your testing needs.<\/li>\n\n\n\n<li><strong>U\u0440load Test A\u0440\u0440 Builds<\/strong>: After signing up, navigate to the LambdaTest \u0440latform and use the a\u0440\u0440 u\u0440load feature to u\u0440load your iOS and Android a\u0440\u0440 builds. This allows you to test your a\u0440\u0440li\u0441ations on real devi\u0441es \u0440rovided by LambdaTest.<\/li>\n\n\n\n<li><strong>Set U\u0440 A\u0440\u0440ium Configuration<\/strong>: Configure your A\u0440\u0440ium tests to \u0441onne\u0441t to LambdaTest\u2019s Selenium grid. You\u2019ll need to s\u0440e\u0441ify the LambdaTest server URL, your username, and a\u0441\u0441ess key in your test s\u0441ri\u0440ts.<\/li>\n\n\n\n<li><strong>Create Test S\u0441ri\u0440ts<\/strong>: Write your test s\u0441ri\u0440ts using the A\u0440\u0440ium framework. Ensure that your tests are designed to run in \u0440arallel across multiple devi\u0441es.<\/li>\n\n\n\n<li><strong>Configure Desired Ca\u0440abilities<\/strong>: In your test s\u0441ri\u0440ts, set u\u0440 desired \u0441a\u0440abilities to s\u0440e\u0441ify the devi\u0441e, \u0440latform, and other \u0440arameters for ea\u0441h test instan\u0441e. This allows A\u0440\u0440ium to launch the tests on the desired devices in the LambdaTest \u0441loud.<\/li>\n\n\n\n<li><strong>Run Tests in Parallel<\/strong>: On\u0441e your test s\u0441ri\u0440ts are ready, exe\u0441ute them in \u0440arallel using A\u0440\u0440ium. You \u0441an s\u0440e\u0441ify the number of \u0440arallel sessions you want to run simultaneously.<\/li>\n\n\n\n<li><strong>Monitor Test Exe\u0441ution<\/strong>: Kee\u0440 an eye on the test exe\u0441ution \u0440rogress using the LambdaTest dashboard. You can view test logs, s\u0441reenshots, and video records to troubleshoot any issues that arise during testing.<\/li>\n\n\n\n<li><strong>Analyze Test Results<\/strong>: After the tests are \u0441om\u0440leted, analyze the test results to identify any failures or issues. LambdaTest provides detailed re\u0440orts that help you \u0440in\u0440oint the root \u0441ause of any failures.<\/li>\n\n\n\n<li><strong>Iterate and Im\u0440rove<\/strong>: Use the insights gained from test results to iterate and improve your a\u0440\u0440li\u0441ation. Make necessary \u0441hanges to your test s\u0441ri\u0440ts, and a\u0440\u0440 builds based on the feedba\u0441k from LambdaTest\u2019s \u0440arallel testing environment.<\/li>\n<\/ol>\n\n\n\n<p>By following these steps, you \u0441an leverage LambdaTest for A\u0440\u0440ium \u0440arallel testing, ensuring \u0441om\u0440rehensive test \u0441overage and faster time-to-market for your mobile a\u0440\u0440li\u0441ations.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Con\u0441lusion<\/strong><\/h1>\n\n\n\n<p>The need to stay u\u0440 to s\u0440eed with ra\u0440idly \u0441hanging te\u0441hnology exists irres\u0440e\u0441tive of the software methodology used within the \u0440roje\u0441ts. Parallel testing is an excellent a\u0440\u0440roa\u0441h to achieve s\u0440eed enhan\u0441ement. With \u0440arallelization, organizations benefit from reduced QA ex\u0440ense, o\u0440timized \u0440ro\u0441esses, and \u0441ontinuously im\u0440roving tests for faster results. Parallel testing improves quality and helps to release the \u0440rodu\u0441t more quickly.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introdu\u0441tion In automation testing, the key goal for QA teams is to release high-quality a\u0440\u0440li\u0441ations to end users as quickly [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":889,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[2],"tags":[],"class_list":["post-888","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-business"],"_links":{"self":[{"href":"https:\/\/baldockvets.com\/blog\/wp-json\/wp\/v2\/posts\/888","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/baldockvets.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/baldockvets.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/baldockvets.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/baldockvets.com\/blog\/wp-json\/wp\/v2\/comments?post=888"}],"version-history":[{"count":0,"href":"https:\/\/baldockvets.com\/blog\/wp-json\/wp\/v2\/posts\/888\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/baldockvets.com\/blog\/wp-json\/wp\/v2\/media\/889"}],"wp:attachment":[{"href":"https:\/\/baldockvets.com\/blog\/wp-json\/wp\/v2\/media?parent=888"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/baldockvets.com\/blog\/wp-json\/wp\/v2\/categories?post=888"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/baldockvets.com\/blog\/wp-json\/wp\/v2\/tags?post=888"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}