{"id":8705,"date":"2022-01-05T22:32:46","date_gmt":"2022-01-06T03:32:46","guid":{"rendered":"https:\/\/www.redline13.com\/blog\/?p=8705"},"modified":"2022-05-23T13:03:42","modified_gmt":"2022-05-23T17:03:42","slug":"distribute-jmeter-clients-across-different-regions","status":"publish","type":"post","link":"https:\/\/www.redline13.com\/blog\/2022\/01\/distribute-jmeter-clients-across-different-regions\/","title":{"rendered":"Guest Post: Distribute your JMeter Clients Across Different Regions with RedLine13"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-8773 aligncenter\" src=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/Title-image.png\" alt=\"Distribute your JMeter clients across different regions with RedLine13\" width=\"400\" height=\"260\" srcset=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/Title-image.png 400w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/Title-image-300x195.png 300w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/>This is a guest post from Eldad Uzman, Automation Architect at Merck on how to distribute JMeter clients across different regions. You can read more from Eldad at <a href=\"https:\/\/eldadu1985.medium.com\/\" target=\"_blank\" rel=\"noopener\">Medium<\/a>.<\/p>\n<p>When running load tests, you want to make sure your testing setup is as close to production setup as possible.&nbsp; One of the many things that would contribute to high validity of load tests is the ability to distribute the load across different regions.&nbsp; Thanks to RedLine13 this is done very easily using <a href=\"https:\/\/jmeter.apache.org\/index.html\">JMeter<\/a>, leveraging <a href=\"https:\/\/aws.amazon.com\/\">AWS<\/a> infrastructure.&nbsp; In this article we will build up the different stages of creating and running a distributed load test across different regions.<\/p>\n<p>The code examples referenced in this article can all be found under my <a href=\"https:\/\/github.com\/eldaduzman\/DistributedLoadTesting-Demo\">DistributedLoadTesting-Demo repository<\/a> on GitHub.<\/p>\n<h2>Stage 1: Basic Distribution<\/h2>\n<p>This is the most simple and straight forward stage.&nbsp; Our test script generates user IDs in the setup and then re-use these IDs in the main thread.<\/p>\n<h3>JMeter Test Plan (<a href=\"https:\/\/github.com\/eldaduzman\/DistributedLoadTesting-Demo\/blob\/main\/Demo-1.jmx\">JMX file<\/a>):<\/h3>\n<p>First, let us take a look at the &#8220;<em>User defined variables<\/em>&#8220;:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-8731 aligncenter\" src=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/00-User-Defined-Variables.png\" alt=\"JMeter User Defined Variables\" width=\"942\" height=\"242\" srcset=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/00-User-Defined-Variables.png 942w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/00-User-Defined-Variables-300x77.png 300w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/00-User-Defined-Variables-768x197.png 768w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/00-User-Defined-Variables-425x109.png 425w\" sizes=\"auto, (max-width: 942px) 100vw, 942px\" \/><br \/>\nIn this super light example, we have two users, executing two loops, starting at a ramp up time of 2 seconds.&nbsp; They will interact with the <a href=\"https:\/\/learning.postman.com\/docs\/developer\/echo-api\/\">Postman Echo API<\/a> which will serve as our dummy server under test.&nbsp; In the JMX setup thread we will generate a unique user ID and store it in a property.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-8732 aligncenter\" src=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/01-CreateUserIds.png\" alt=\"CreateUserIds test plan element\" width=\"918\" height=\"628\" srcset=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/01-CreateUserIds.png 918w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/01-CreateUserIds-300x205.png 300w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/01-CreateUserIds-768x525.png 768w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/01-CreateUserIds-425x291.png 425w\" sizes=\"auto, (max-width: 918px) 100vw, 918px\" \/><\/p>\n<p>As you can see, each user ID is saved to a property named in the convention of \u201c<span style=\"color: #993300;\"><strong>user_id_${serial_number}<\/strong><\/span>\u201d.<\/p>\n<p>Now, we can reference the property in each thread in the test thread group (&#8220;<em>Main Test<\/em>&#8220;).&nbsp; Under the &#8220;<em>Lets begin<\/em>&#8221; element, we will grab the correct user ID by taking the property corresponding to the thread number.&nbsp; From there, it is then stored it in the variable named &#8220;<span style=\"color: #993300;\"><strong>user_id<\/strong><\/span>&#8220;.&nbsp; This variable is only shared within the thread.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-8733 size-full aligncenter\" src=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/02-Lets-begin.png\" alt=\"Lets begin test element\" width=\"919\" height=\"463\" srcset=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/02-Lets-begin.png 919w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/02-Lets-begin-300x151.png 300w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/02-Lets-begin-768x387.png 768w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/02-Lets-begin-425x214.png 425w\" sizes=\"auto, (max-width: 919px) 100vw, 919px\" \/><\/p>\n<p>Now, let&#8217;s use this user ID:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-8734 size-full\" src=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/03-JSR223-Sampler.png\" alt=\"JSR223 Sampler code inside Loop Controller\" width=\"920\" height=\"392\" srcset=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/03-JSR223-Sampler.png 920w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/03-JSR223-Sampler-300x128.png 300w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/03-JSR223-Sampler-768x327.png 768w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/03-JSR223-Sampler-425x181.png 425w\" sizes=\"auto, (max-width: 920px) 100vw, 920px\" \/><\/p>\n<p>We have a loop controller executing the number of loops specified in the user defined variables (two in our case) and the first step in the loop is to generate a per-loop correlation ID.&nbsp; Therefore, the user IDs are re-used, and in each iteration we generate a new correlation ID for the message.&nbsp; This is very important for traceability and observability.<\/p>\n<p>After all is set and done, we can send our HTTP request:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-8735 aligncenter\" src=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/04-ECHO-REQUEST.png\" alt=\"JMeter HTTP request\" width=\"944\" height=\"388\" srcset=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/04-ECHO-REQUEST.png 944w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/04-ECHO-REQUEST-300x123.png 300w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/04-ECHO-REQUEST-768x316.png 768w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/04-ECHO-REQUEST-425x175.png 425w\" sizes=\"auto, (max-width: 944px) 100vw, 944px\" \/><\/p>\n<p>Finally, let us run this script locally and see the results in the tree view:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-8736 aligncenter\" src=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/05-View-Results-Tree.png\" alt=\"View Results Tree\" width=\"1152\" height=\"396\" srcset=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/05-View-Results-Tree.png 1152w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/05-View-Results-Tree-300x103.png 300w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/05-View-Results-Tree-1024x352.png 1024w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/05-View-Results-Tree-768x264.png 768w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/05-View-Results-Tree-425x146.png 425w\" sizes=\"auto, (max-width: 1152px) 100vw, 1152px\" \/><\/p>\n<p>We\u2019ve got four echo requests as expected, and each of these requests has a response with the expected fields.<\/p>\n<h3><\/h3>\n<h3>RedLine13:<\/h3>\n<p>Let&#8217;s create a new JMeter test in RedLine13 containing our JMX test plan file only:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"wp-image-8747 size-full aligncenter\" src=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-text-application-email-6.png\" alt=\"Starting a JMeter test on RedLine13\" width=\"996\" height=\"704\" srcset=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-text-application-email-6.png 996w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-text-application-email-6-300x212.png 300w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-text-application-email-6-768x543.png 768w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-text-application-email-6-425x300.png 425w\" sizes=\"auto, (max-width: 996px) 100vw, 996px\" \/><\/p>\n<p>Now let\u2019s distribute across three regions in the &#8220;<em>Advanced Cloud Options<\/em>&#8221; section:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-8713 aligncenter\" style=\"color: initial;\" src=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-text-application-email-1.png\" alt=\"Region 1 - US-East (Virginia)\" width=\"936\" height=\"329\" srcset=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-text-application-email-1.png 936w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-text-application-email-1-300x105.png 300w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-text-application-email-1-768x270.png 768w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-text-application-email-1-425x149.png 425w\" sizes=\"auto, (max-width: 936px) 100vw, 936px\" \/><\/p>\n<p>Region 1 \u2013 US-East (Virginia)<\/p>\n<figure id=\"attachment_8714\" class=\"wp-caption aligncenter\" style=\"max-width: 940px\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-8714\" src=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-text-application-email-2.png\" alt=\"Region 2 - EU-West (Paris)\" width=\"940\" height=\"244\" srcset=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-text-application-email-2.png 940w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-text-application-email-2-300x78.png 300w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-text-application-email-2-768x199.png 768w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-text-application-email-2-425x110.png 425w\" sizes=\"auto, (max-width: 940px) 100vw, 940px\" \/><figcaption class=\"wp-caption-text\">Region 2 \u2013 EU-West (Paris)<\/figcaption><\/figure>\n<figure id=\"attachment_8768\" class=\"wp-caption alignnone\" style=\"max-width: 936px\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-8768 size-full\" src=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-text-application-email-3-1.png\" alt=\"Region 3 - Asia-Pacific Southeast (Singapore)\" width=\"936\" height=\"217\" srcset=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-text-application-email-3-1.png 936w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-text-application-email-3-1-300x70.png 300w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-text-application-email-3-1-768x178.png 768w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-text-application-email-3-1-425x99.png 425w\" sizes=\"auto, (max-width: 936px) 100vw, 936px\" \/><figcaption class=\"wp-caption-text\">Region 3 \u2013 Asia-Pacific Southeast (Singapore)<\/figcaption><\/figure>\n<p>Some easy math lends us to expect a total of 12 requests (from the &#8220;<em>ECHO REQUEST<\/em>&#8221; element).&nbsp; Let\u2019s run the test and check the results:<\/p>\n<figure id=\"attachment_8716\" class=\"wp-caption alignnone\" style=\"max-width: 978px\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-8716\" src=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-description-automaticall.png\" alt=\"Expected results\" width=\"978\" height=\"357\" srcset=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-description-automaticall.png 978w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-description-automaticall-300x110.png 300w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-description-automaticall-768x280.png 768w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-description-automaticall-425x155.png 425w\" sizes=\"auto, (max-width: 978px) 100vw, 978px\" \/><figcaption class=\"wp-caption-text\">We can see that the results return as expected.<\/figcaption><\/figure>\n<h3>Limitations:<\/h3>\n<p>This na\u00efve approach works out pretty well if the server under test is static.&nbsp; That is, if there is no caching mechanism per user, you can generate a new user ID with each test execution.&nbsp; However, the moment you introduce caching to your server under tests (and this is the most common case) your tests become invalid and unreliable as they are not reflective of real-life situation.<\/p>\n<h2><\/h2>\n<h2>Stage 2: Reusable User ID<\/h2>\n<p>This time around, we will use a CSV file to reuse these user IDs instead of creating them with each test execution.<\/p>\n<h3><\/h3>\n<h3>CSV file:<\/h3>\n<p>The structure of our CSV file is straight-forward and takes the form of a single column:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-8746 size-full aligncenter\" src=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/table-description-automatically-generated-4.png\" alt=\"List of user ID numbers\" width=\"351\" height=\"271\" srcset=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/table-description-automatically-generated-4.png 351w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/table-description-automatically-generated-4-300x232.png 300w\" sizes=\"auto, (max-width: 351px) 100vw, 351px\" \/><\/p>\n<h3><\/h3>\n<h3>JMeter Test Plan (<a href=\"https:\/\/github.com\/eldaduzman\/DistributedLoadTesting-Demo\/blob\/main\/Demo-2.jmx\">JMX file<\/a>):<\/h3>\n<p>In the JMX file, instead of generating UUIDs we will take the IDs from the CSV file:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-8738 aligncenter\" src=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/06-CreateUserIds-from-file.png\" alt=\"Loading user IDs from a CSV file\" width=\"914\" height=\"661\" srcset=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/06-CreateUserIds-from-file.png 914w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/06-CreateUserIds-from-file-300x217.png 300w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/06-CreateUserIds-from-file-768x555.png 768w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/06-CreateUserIds-from-file-425x307.png 425w\" sizes=\"auto, (max-width: 914px) 100vw, 914px\" \/><\/p>\n<h3><\/h3>\n<h3>RedLine13:<\/h3>\n<p>In RedLine13 we will only upload the CSV file and split it to the different load agents.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-8741 size-full aligncenter\" src=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-text-application-email-4-1.png\" alt=\"Starting a JMeter load test on RedLine13\" width=\"993\" height=\"753\" srcset=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-text-application-email-4-1.png 993w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-text-application-email-4-1-300x227.png 300w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-text-application-email-4-1-768x582.png 768w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-text-application-email-4-1-425x322.png 425w\" sizes=\"auto, (max-width: 993px) 100vw, 993px\" \/><\/p>\n<p>Let&#8217;s run the test and see the results:<br \/>\n<img loading=\"lazy\" decoding=\"async\" width=\"970\" height=\"356\" class=\"wp-image-8720 aligncenter\" src=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-application-description.png\" alt=\"Graphical user interface, application\n\nDescription automatically generated\" srcset=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-application-description.png 970w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-application-description-300x110.png 300w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-application-description-768x282.png 768w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-application-description-425x156.png 425w\" sizes=\"auto, (max-width: 970px) 100vw, 970px\" \/><\/p>\n<h3>Limitations:<\/h3>\n<p>Reusing data for tests in this fashion works well if your server undertest is region agnostic.&nbsp; In other words, all requests across the different regions are treated in the same way.&nbsp; But what happens when you are using some regional optimization service like <a href=\"https:\/\/aws.amazon.com\/global-accelerator\">AWSs global accelerator<\/a>?<\/p>\n<p>Now your caching mechanism is quite different.&nbsp; So, let&#8217;s take &#8220;<em><span style=\"color: #993300;\"><strong>Userid1<\/strong><\/span><\/em>&#8221; for example.&nbsp; In our first test execution it appeared in a US region, and it was cached in the US, and then in the next test execution it appeared an EU region and consequently cached in the EU.&nbsp; The CSV is being split over the different load agents irrespective of their region, in this can affect your cache in a way that your application wouldn\u2019t be operating in the real life.<\/p>\n<h2><\/h2>\n<h2>Stage 3: Region-specific User IDs<\/h2>\n<p>In order to make the distribution region aware, we need to first now what region our load agent is at.<\/p>\n<p>This is very straight forward with <a href=\"https:\/\/docs.aws.amazon.com\/AWSEC2\/latest\/WindowsGuide\/instance-identity-documents.html\">AWS instance identity server<\/a><\/p>\n<p>We can use this server to retrieve data about our EC2 instance from within the instance itself!&nbsp; Let\u2019s write a short shell script to do that for us.&nbsp; We&#8217;ll start by running the following command:<\/p>\n<p style=\"padding-left: 40px;\"><strong style=\"color: #993300; font-family: Menlo, Consolas, monaco, monospace; font-size: 15px; text-align: center; white-space: pre-wrap;\">curl http:\/\/169.254.169.254\/latest\/dynamic\/instance-identity\/document<\/strong><\/p>\n<p>The expected output should look similar to the following:<\/p>\n<pre style=\"padding-left: 40px;\"><span style=\"color: #993300;\"><strong>{<\/strong><\/span>\n<span style=\"color: #993300;\"><strong>&nbsp; &nbsp; \"accountId\" : \"[]\",<\/strong><\/span>\n<span style=\"color: #993300;\"><strong>&nbsp; &nbsp; \"architecture\" : \"x86_64\",<\/strong><\/span>\n<span style=\"color: #993300;\"><strong>&nbsp; &nbsp; \"availabilityZone\" : \"eu-central-1b\",<\/strong><\/span>\n<span style=\"color: #993300;\"><strong>&nbsp; &nbsp; \"billingProducts\" : null,<\/strong><\/span>\n<span style=\"color: #993300;\"><strong>&nbsp; &nbsp; \"devpayProductCodes\" : null,<\/strong><\/span>\n<span style=\"color: #993300;\"><strong>&nbsp; &nbsp; \"marketplaceProductCodes\" : null,<\/strong><\/span>\n<span style=\"color: #993300;\"><strong>&nbsp; &nbsp; \"imageId\" : \"[]\",<\/strong><\/span>\n<span style=\"color: #993300;\"><strong>&nbsp; &nbsp; \"instanceId\" : \"[]\",<\/strong><\/span>\n<span style=\"color: #993300;\"><strong>&nbsp; &nbsp; \"instanceType\" : \"t3.small\",<\/strong><\/span>\n<span style=\"color: #993300;\"><strong>&nbsp; &nbsp; \"kernelId\" : null,<\/strong><\/span>\n<span style=\"color: #993300;\"><strong>&nbsp; &nbsp; \"pendingTime\" : \"2021-12-20T15:16:02Z\",<\/strong><\/span>\n<span style=\"color: #993300;\"><strong>&nbsp; &nbsp; \"privateIp\" : \"[]\",<\/strong><\/span>\n<span style=\"color: #993300;\"><strong>&nbsp; &nbsp; \"ramdiskId\" : null,<\/strong><\/span>\n<span style=\"color: #993300;\"><strong>&nbsp; &nbsp; \"region\" : \"eu-central-1\",<\/strong><\/span>\n<span style=\"color: #993300;\"><strong>&nbsp; &nbsp; \"version\" : \"2017-09-30\"<\/strong><\/span>\n<span style=\"color: #993300;\"><strong>}<\/strong><\/span><\/pre>\n<p>To make it more specific to our purpose lets filter out the irrelevant fields by executing this command:<\/p>\n<pre style=\"padding-left: 40px;\"><strong><span style=\"color: #993300;\">curl http:\/\/169.254.169.254\/latest\/dynamic\/instance-identity\/document|\n<\/span><\/strong><strong><span style=\"color: #993300;\">&nbsp; &nbsp; grep region|awk -F\\\" '{print $4}'<\/span><\/strong><\/pre>\n<p>The expected output in this case would be:<\/p>\n<pre style=\"padding-left: 40px;\"><span style=\"color: #993300;\"><strong>eu-central-1<\/strong><\/span><\/pre>\n<p>Great!&nbsp; Now we can tell the region we generate our load from!<\/p>\n<h3><\/h3>\n<h3>CSV Files:<\/h3>\n<p>For the next steps, we will create a separate CSV file for each region:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-8754 aligncenter\" src=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/Multi-region-CSVs-2.png\" alt=\"Multiple CSV files for each region\" width=\"678\" height=\"245\" srcset=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/Multi-region-CSVs-2.png 678w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/Multi-region-CSVs-2-300x108.png 300w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/Multi-region-CSVs-2-425x154.png 425w\" sizes=\"auto, (max-width: 678px) 100vw, 678px\" \/><\/p>\n<h3>Shell Script:<\/h3>\n<p>Our shell script will deduce the identity of our load agent and select the correct CSV file accordingly.<\/p>\n<pre style=\"padding-left: 40px;\"><strong><span style=\"color: #993300;\">#!\/bin\/bash<\/span><\/strong>\n<strong><span style=\"color: #993300;\">REGION=`curl http:\/\/169.254.169.254\/latest\/dynamic\/instance-identity\/document<\/span><\/strong>\n<strong><span style=\"color: #993300;\">&nbsp; &nbsp; |grep region|awk -F\\\" '{print $4}'`<\/span><\/strong>\n<strong><span style=\"color: #993300;\">echo $REGION<\/span><\/strong>\n<strong><span style=\"color: #993300;\">REGION_SIGN=${REGION:0:2}<\/span><\/strong>\n<strong><span style=\"color: #993300;\">echo $REGION_SIGN<\/span><\/strong>\n<strong><span style=\"color: #993300;\">REGION_SIGN=$(echo $REGION_SIGN | tr 'a-z' 'A-Z'| xargs)<\/span><\/strong>\n<strong><span style=\"color: #993300;\">echo $REGION_SIGN<\/span><\/strong>\n<strong><span style=\"color: #993300;\">FILENAME=\"user_ids_${REGION_SIGN}.csv\"<\/span><\/strong>\n<strong><span style=\"color: #993300;\">echo $FILENAME<\/span><\/strong>\n<strong><span style=\"color: #993300;\">cp $FILENAME &nbsp;user_ids.csv<\/span><\/strong><\/pre>\n<h3><\/h3>\n<h3>JMeter Test Plan (<a href=\"https:\/\/github.com\/eldaduzman\/DistributedLoadTesting-Demo\/blob\/main\/Demo-3.jmx\">JMX file<\/a>):<\/h3>\n<p>The only change to the JMX file is to execute the shell script at the setup:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-8757 aligncenter\" src=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/07-Revised-code.png\" alt=\"Revised script to execute shell code\" width=\"843\" height=\"782\" srcset=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/07-Revised-code.png 843w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/07-Revised-code-300x278.png 300w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/07-Revised-code-768x712.png 768w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/07-Revised-code-425x394.png 425w\" sizes=\"auto, (max-width: 843px) 100vw, 843px\" \/><\/p>\n<p>We gave the script permissions to run and then we executed it.&nbsp; The rest of the script can remain unchanged.<\/p>\n<h3>RedLine13:<\/h3>\n<p>Instead of one global CSV file, we will upload three CSV files (one per region), in addition to the shell script:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-8760 aligncenter\" src=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-text-application-email-5-1.png\" alt=\"Starting a new JMeter test in RedLine13\" width=\"995\" height=\"891\" srcset=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-text-application-email-5-1.png 995w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-text-application-email-5-1-300x269.png 300w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-text-application-email-5-1-768x688.png 768w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-text-application-email-5-1-425x381.png 425w\" sizes=\"auto, (max-width: 995px) 100vw, 995px\" \/><\/p>\n<p>Now we can run this script and see the results:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-8726\" src=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-application-description-1.png\" alt=\"Distribute JMeter Clients Across Different Regions\" width=\"968\" height=\"361\" srcset=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-application-description-1.png 968w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-application-description-1-300x112.png 300w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-application-description-1-768x286.png 768w, https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/graphical-user-interface-application-description-1-425x158.png 425w\" sizes=\"auto, (max-width: 968px) 100vw, 968px\" \/><\/p>\n<h2>Conclusion<\/h2>\n<p>In this article we saw how easily we can progress between the three stages and what are the limitations of each stage.&nbsp; The na\u00efve solution of generating user IDs each test could work well in some situations.&nbsp; However, in most situations this is not a realistic scenario.&nbsp; Re-using user IDs with a fixed list is another option but you must take into account the caching mechanism of the application and how it interacts with some other solutions \u2013 namely <a href=\"https:\/\/aws.amazon.com\/global-accelerator\/\">AWS Global Accelerator<\/a>.&nbsp; We can use AWS <a href=\"https:\/\/aws.amazon.com\/identity\/\">identity services<\/a> to deduce the region from where we generate our load and then reuse our user IDs in a more intelligent way, insuring high validity to our test cases.<\/p>\n<hr>\n<p>Did you know that RedLine13 offers a free trial plan that includes time-limited full access to most of our advanced features?&nbsp; <a href=\"https:\/\/www.redline13.com\/Service\">Sign up now<\/a> and distribute your JMeter clients across different regions<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This is a guest post from Eldad Uzman, Automation Architect at Merck on how to distribute JMeter clients across different regions. You can read more from Eldad at Medium. When running load tests, you want to make sure your testing setup is as close to production setup as possible.&nbsp; One of the many things that would contribute to high validity of load tests is the ability to distribute the load across different regions.&nbsp; Thanks to RedLine13<a class=\"more-link\" href=\"https:\/\/www.redline13.com\/blog\/2022\/01\/distribute-jmeter-clients-across-different-regions\/\">Read More &rarr;<\/a><\/p>\n","protected":false},"author":12,"featured_media":8773,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[16,2,7],"tags":[88,567,283,318,566,424],"class_list":{"0":"entry","1":"post","2":"publish","3":"author-eldad","4":"post-8705","6":"format-standard","7":"has-post-thumbnail","8":"category-aws","9":"category-blog","10":"category-jmeter","11":"post_tag-aws","12":"post_tag-distributed","13":"post_tag-jmeter","14":"post_tag-load-testing","15":"post_tag-multiple-regions","16":"post_tag-redline13"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.12 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Guest Post: Distribute your JMeter Clients Across Different Regions with RedLine13 - RedLine13<\/title>\n<meta name=\"description\" content=\"In this article we will build up the different stages of creating and running a distributed load test across different regions.\" \/>\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.redline13.com\/blog\/2022\/01\/distribute-jmeter-clients-across-different-regions\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Guest Post: Distribute your JMeter Clients Across Different Regions with RedLine13 - RedLine13\" \/>\n<meta property=\"og:description\" content=\"In this article we will build up the different stages of creating and running a distributed load test across different regions.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.redline13.com\/blog\/2022\/01\/distribute-jmeter-clients-across-different-regions\/\" \/>\n<meta property=\"og:site_name\" content=\"RedLine13\" \/>\n<meta property=\"article:published_time\" content=\"2022-01-06T03:32:46+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-05-23T17:03:42+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/Title-image.png\" \/>\n\t<meta property=\"og:image:width\" content=\"400\" \/>\n\t<meta property=\"og:image:height\" content=\"260\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Eldad Uzman\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Eldad Uzman\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.redline13.com\/blog\/2022\/01\/distribute-jmeter-clients-across-different-regions\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.redline13.com\/blog\/2022\/01\/distribute-jmeter-clients-across-different-regions\/\"},\"author\":{\"name\":\"Eldad Uzman\",\"@id\":\"https:\/\/www.redline13.com\/blog\/#\/schema\/person\/ffd0bd4dde7217c3e16f1ae03286a08a\"},\"headline\":\"Guest Post: Distribute your JMeter Clients Across Different Regions with RedLine13\",\"datePublished\":\"2022-01-06T03:32:46+00:00\",\"dateModified\":\"2022-05-23T17:03:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.redline13.com\/blog\/2022\/01\/distribute-jmeter-clients-across-different-regions\/\"},\"wordCount\":1223,\"publisher\":{\"@id\":\"https:\/\/www.redline13.com\/blog\/#organization\"},\"keywords\":[\"AWS\",\"Distributed\",\"JMeter\",\"Load Testing\",\"Multiple Regions\",\"RedLine13\"],\"articleSection\":[\"AWS\",\"Blog\",\"JMeter\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.redline13.com\/blog\/2022\/01\/distribute-jmeter-clients-across-different-regions\/\",\"url\":\"https:\/\/www.redline13.com\/blog\/2022\/01\/distribute-jmeter-clients-across-different-regions\/\",\"name\":\"Guest Post: Distribute your JMeter Clients Across Different Regions with RedLine13 - RedLine13\",\"isPartOf\":{\"@id\":\"https:\/\/www.redline13.com\/blog\/#website\"},\"datePublished\":\"2022-01-06T03:32:46+00:00\",\"dateModified\":\"2022-05-23T17:03:42+00:00\",\"description\":\"In this article we will build up the different stages of creating and running a distributed load test across different regions.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.redline13.com\/blog\/2022\/01\/distribute-jmeter-clients-across-different-regions\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.redline13.com\/blog\/2022\/01\/distribute-jmeter-clients-across-different-regions\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.redline13.com\/blog\/2022\/01\/distribute-jmeter-clients-across-different-regions\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.redline13.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Guest Post: Distribute your JMeter Clients Across Different Regions with RedLine13\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.redline13.com\/blog\/#website\",\"url\":\"https:\/\/www.redline13.com\/blog\/\",\"name\":\"RedLine13\",\"description\":\"(Almost) Free Load Testing in the Cloud\",\"publisher\":{\"@id\":\"https:\/\/www.redline13.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.redline13.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.redline13.com\/blog\/#organization\",\"name\":\"RedLine13\",\"url\":\"https:\/\/www.redline13.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.redline13.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2013\/06\/cropped-rl13-header-logo.jpg\",\"contentUrl\":\"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2013\/06\/cropped-rl13-header-logo.jpg\",\"width\":300,\"height\":68,\"caption\":\"RedLine13\"},\"image\":{\"@id\":\"https:\/\/www.redline13.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.redline13.com\/blog\/#\/schema\/person\/ffd0bd4dde7217c3e16f1ae03286a08a\",\"name\":\"Eldad Uzman\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.redline13.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/07ca72c4076c07cbd0e83be9e1245d7e64a1f1005966352b9b2bd35e973b0d08?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/07ca72c4076c07cbd0e83be9e1245d7e64a1f1005966352b9b2bd35e973b0d08?s=96&d=mm&r=g\",\"caption\":\"Eldad Uzman\"},\"url\":\"https:\/\/www.redline13.com\/blog\/author\/eldad\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Guest Post: Distribute your JMeter Clients Across Different Regions with RedLine13 - RedLine13","description":"In this article we will build up the different stages of creating and running a distributed load test across different regions.","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.redline13.com\/blog\/2022\/01\/distribute-jmeter-clients-across-different-regions\/","og_locale":"en_US","og_type":"article","og_title":"Guest Post: Distribute your JMeter Clients Across Different Regions with RedLine13 - RedLine13","og_description":"In this article we will build up the different stages of creating and running a distributed load test across different regions.","og_url":"https:\/\/www.redline13.com\/blog\/2022\/01\/distribute-jmeter-clients-across-different-regions\/","og_site_name":"RedLine13","article_published_time":"2022-01-06T03:32:46+00:00","article_modified_time":"2022-05-23T17:03:42+00:00","og_image":[{"width":400,"height":260,"url":"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2022\/01\/Title-image.png","type":"image\/png"}],"author":"Eldad Uzman","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Eldad Uzman","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.redline13.com\/blog\/2022\/01\/distribute-jmeter-clients-across-different-regions\/#article","isPartOf":{"@id":"https:\/\/www.redline13.com\/blog\/2022\/01\/distribute-jmeter-clients-across-different-regions\/"},"author":{"name":"Eldad Uzman","@id":"https:\/\/www.redline13.com\/blog\/#\/schema\/person\/ffd0bd4dde7217c3e16f1ae03286a08a"},"headline":"Guest Post: Distribute your JMeter Clients Across Different Regions with RedLine13","datePublished":"2022-01-06T03:32:46+00:00","dateModified":"2022-05-23T17:03:42+00:00","mainEntityOfPage":{"@id":"https:\/\/www.redline13.com\/blog\/2022\/01\/distribute-jmeter-clients-across-different-regions\/"},"wordCount":1223,"publisher":{"@id":"https:\/\/www.redline13.com\/blog\/#organization"},"keywords":["AWS","Distributed","JMeter","Load Testing","Multiple Regions","RedLine13"],"articleSection":["AWS","Blog","JMeter"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.redline13.com\/blog\/2022\/01\/distribute-jmeter-clients-across-different-regions\/","url":"https:\/\/www.redline13.com\/blog\/2022\/01\/distribute-jmeter-clients-across-different-regions\/","name":"Guest Post: Distribute your JMeter Clients Across Different Regions with RedLine13 - RedLine13","isPartOf":{"@id":"https:\/\/www.redline13.com\/blog\/#website"},"datePublished":"2022-01-06T03:32:46+00:00","dateModified":"2022-05-23T17:03:42+00:00","description":"In this article we will build up the different stages of creating and running a distributed load test across different regions.","breadcrumb":{"@id":"https:\/\/www.redline13.com\/blog\/2022\/01\/distribute-jmeter-clients-across-different-regions\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.redline13.com\/blog\/2022\/01\/distribute-jmeter-clients-across-different-regions\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.redline13.com\/blog\/2022\/01\/distribute-jmeter-clients-across-different-regions\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.redline13.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Guest Post: Distribute your JMeter Clients Across Different Regions with RedLine13"}]},{"@type":"WebSite","@id":"https:\/\/www.redline13.com\/blog\/#website","url":"https:\/\/www.redline13.com\/blog\/","name":"RedLine13","description":"(Almost) Free Load Testing in the Cloud","publisher":{"@id":"https:\/\/www.redline13.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.redline13.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.redline13.com\/blog\/#organization","name":"RedLine13","url":"https:\/\/www.redline13.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.redline13.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2013\/06\/cropped-rl13-header-logo.jpg","contentUrl":"https:\/\/www.redline13.com\/blog\/wp-content\/uploads\/2013\/06\/cropped-rl13-header-logo.jpg","width":300,"height":68,"caption":"RedLine13"},"image":{"@id":"https:\/\/www.redline13.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.redline13.com\/blog\/#\/schema\/person\/ffd0bd4dde7217c3e16f1ae03286a08a","name":"Eldad Uzman","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.redline13.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/07ca72c4076c07cbd0e83be9e1245d7e64a1f1005966352b9b2bd35e973b0d08?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/07ca72c4076c07cbd0e83be9e1245d7e64a1f1005966352b9b2bd35e973b0d08?s=96&d=mm&r=g","caption":"Eldad Uzman"},"url":"https:\/\/www.redline13.com\/blog\/author\/eldad\/"}]}},"_links":{"self":[{"href":"https:\/\/www.redline13.com\/blog\/wp-json\/wp\/v2\/posts\/8705","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.redline13.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.redline13.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.redline13.com\/blog\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/www.redline13.com\/blog\/wp-json\/wp\/v2\/comments?post=8705"}],"version-history":[{"count":40,"href":"https:\/\/www.redline13.com\/blog\/wp-json\/wp\/v2\/posts\/8705\/revisions"}],"predecessor-version":[{"id":9654,"href":"https:\/\/www.redline13.com\/blog\/wp-json\/wp\/v2\/posts\/8705\/revisions\/9654"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.redline13.com\/blog\/wp-json\/wp\/v2\/media\/8773"}],"wp:attachment":[{"href":"https:\/\/www.redline13.com\/blog\/wp-json\/wp\/v2\/media?parent=8705"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.redline13.com\/blog\/wp-json\/wp\/v2\/categories?post=8705"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.redline13.com\/blog\/wp-json\/wp\/v2\/tags?post=8705"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}