{"id":13084,"date":"2015-07-27T13:12:02","date_gmt":"2015-07-27T17:12:02","guid":{"rendered":"https:\/\/jazz.net\/blog\/?p=13084"},"modified":"2020-03-09T11:37:58","modified_gmt":"2020-03-09T15:37:58","slug":"using-docker-with-rqm","status":"publish","type":"post","link":"https:\/\/jazz.net\/blog\/index.php\/2015\/07\/27\/using-docker-with-rqm\/","title":{"rendered":"Using Docker with RQM"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"alignleft\" style=\"border: 0px; margin: 0px;\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOIAAABWCAIAAABdKd3jAAAKpklEQVR4nO2dTVPaWh\/A84m66uJ+j27vyu\/Qvfd5HuUWX6KAcI1FUUQqgoggKFQK5aKVKQPTMqOj0+kwMmamzuCwYFxkkWcRiHk5J5yEYEz6z\/w2xnBOTs6P85bkD8Vjtvv7+0qlEtmJBtc3AICQyE70\/Pz84eEB55WxjVLvYll2lVmjPd6dVC573izUrwCAkOx5c3s\/M79Ib4bD9\/f3k9K09PmzZyVQbN402D4AGOak1vKsBKpnZyZrynFcYj\/54fDY8hICzqDe6e0kM6nDtJma7sb20uULy8sGOIy9XPEod2yOph+Ln2JHBVxO1eu7eL7sY4LTsMGmZ3Mv0OvROBPaHrP3p3ieZ1nWsxJAClrv9CKp3PySJ5zIFOpXln81AXtRvb5LlS5WQ5HZv981m82xNF3xB0qtn8g8aK8\/li3WOz3LCwzYmsrl7bJ\/9aTw0aCmt7e3K\/8w6nRLrZ+011+5vLW8hIBj2MueJvaTRjQtFD7u5YqK5KrXd8sB5suPX9q5Vi5vLV+oA+yC0GMfFM8MzP2pzXD4pNaSylfv9LTbUWG0MT09Pb\/k9TFBACCB9vqnp6d9TND\/fqPy77\/6NF32ehVGRlK5WFbZvgoUmze0178ejWfPm5b3IIAdKdSvQrGDGZer0Wjo0HSRpqvXd2IqX378ci\/QyDlTqnThY4LIyRYA6OLLj1\/+YIh8PVWpaSxbjKRy6nSj6fx6NA5TfsBEEvky4YxKqelygFHf0E+eVkOxA438au1uoX4Vyxaj6TwAkJA8rRbqV\/uFzyRtqlLTmVlXrd2VKlhs3viYIK4dLTZvVkORmVmXjwlGUjnLCw\/YhVDswMcEZ2ZdS15\/pTJiRiXTtNbuzsy6FCLSXj9yPFrv9EKxg+UAA9MpwDC1djdVunC9c38qlUg1rV7fuRdoaSqp0sV6NI5M3ccEk6dVy8sJOIB6p7e1d5DYT3IcZ0RTf3BTsaraYPu1dpf2+uGZVMBc0uWL7Z0o0lQtTeud3sysSzEqrXd6\/uBmAf8YSr3Ty1S+RtN5y9eTARsRih3E8+VY9hR5j0pL08rl7fySV2FhOJGJ58tIQWvtbjiRmZl1rW3vRtN5y+\/OATYieVoNJzLuBXpucen0tKhD00L9yscEpSIKz6MgHT2pteaXPPF8GdZWgXEo1K8Wl32HmYxxTde2dzOVr+qkk6dVf3Bz5KMqAEBI\/Li0uRUWx6k6NEUOVRtsP3laRa4GAMA45GstcUalQ1N149pg+ye11mooAh09MAnS5QvhbqoOTdVrqLV2d37JA309MDneb0UuLy91aCrc45ImoTHrBwBT+PLj1wJNG9cUN1QFAHMJfUgY1zRT+bq2vWt5GQDHc1JrGddU4yF\/ADCRLz9+GdcUt4b6HJy5X1GKbcqHP\/JNxPzcR6eJOMmn7dVf3yZ7iSJTFEVRr92HllSQ2RjX1McECxYEmPj29jW+8v9MIg82VVPiNDU1pSiKov54ezaxCwWaCliiqe9PdAUf\/vUHqpV6CZoim\/nkm0mbCpoKWKDpoOIxVStUjEyLF6vpUzqqHsAkQFMByzTFXnqhiRpILLav4iYTS9UjKweLkanBzoH9FEVRr15rpok8W6ymGt86xcBGa9iNPROUpsNrokhwVHaoS2HycH8UNtSUrKPU0HQ4clBt0koV6ubPKYkKU2+11UefLV7T4ZnIviESFTQyUpcOnY6qRMrzIckOdSk0CjUJbKWpzDCSK4XqoIcVI90p1vrTTrH+lI23WZ2+JF+x3xcbSEmmiOH48DDRS0QzqdAU6ag4RJYMPIZJSbLDXornw2aaYmb6uPYVoRSiAZMc+bR\/UDfYHtkUTRUyDYxU2TDYP5RJKTfyrKQpox1FpoPaj70Uz4ftNBUQZ8ryzfiCFE5TtWST0xSfMuFhyI+MKAhKPsUcAJvC82FTTdU2DDdZU0RSo7LmWakpopubgKaDb5dsCohPCn+YOuWnTX085qv+tA3P\/AUsGthfU1XFSDp0jFKYecPzayrvXgVvNNZZjWk69UY+ZpCnCZqazOjqUQ22tKZQ8srAdPqT1VSR6SRaU+lHFOdMlo7WpXg+bKSpyiTcBdXSFCeZFZoq19cmMzZl+w30iilxQUBTXSDWSmSoPVbXBKZjVS3xTF5TxF0ozExfeaQP1Ymjp+dPSZFnh1nMAk2JkQynsCMt7QZDY6XwGTV9mvbJ\/2t03VTcg16Qkh2DSAd1F4DkUjwf9tK0P2rgr2xopTechOuOvH9DvXb7RrRGWmmiMfaE1Bh3oWRfXdT5I5pP3GxyVFKgKQEoAzDNm2S9SbleLf+gjp4OlSbZSY46WwH5VxHnh\/57+mLKyOfIdCb1rNhTU+A3AzQFbABoCtgA0BSwAaApYANAU8AGgKaADQBNARsAmgI2ADQFbAAVXN8QbQNNTcNoUCDc+0m\/OdRhOiP+ChloahLGw1iApkiom5sbZmNL+AM0NYlJRFv5raE4jlugaSEwOWhqEqCpyVA8z3\/79n0jsttg+\/VO7z\/\/\/Z\/4P+doqv3M24BRMWokrwXLH\/eUPTaqFRRoZEQgXICJUZmSFoF9EZF2DEAJv7uzuRXO11oNtu9yz4k\/+eAMTUfHsWHJHkYeGDP1BhW5UhWARJkIUUQgrKYjMiUtwvAwayPtGGCgKcdx\/zBrpdZP6W\/pOkFTkjg2Ol\/toFCvW414uYUwIpBGuJ4RmZKF2ZGcib2C9VHi7+09PDysrW9s72fEX9VxgKYkcWwIQ+Ig3kCS7ZfagM5idEQgvKbamZKG2WFfRKQdA1DSX4Z8fHwMbW653rmFft\/+muqIejLqtWONeIDqF94Jp1DkmmpnShxmRyyUHTp6KTJNhW0vnljbijZUP6RrQ01JIiYQBnHQeFPUgKaYiEBYTbUzJY5fwr6IF5sMgNCU5\/mt7Uj2rFFrd2dmXeKhjtZ0ZEicsTUliQgEmmJAa8px3Pv1jUL9an7JU7m8FQ51tKYTbk0JIwKNpSnZcNNJmgrj1PfrG6ubEVFNG2o6ibGpAU2JIwIZ1FTP3QSHaSq0qbuxvXdz87V2t8H2Y9liJJUTP2kHTYni2BCGxBlDU+KIQAY1JQ6zg9xjB7Q0FbbDdHozdtBQ\/fqjLTQlimOjb93UsKYEEYGMakoaZod1rqY8z+\/G9jKVr8XmzXKAET9pD01J4tiweu5CEWmqDOBDGhHIsKb4IqBL6khNhRnVUbXucs8JA4CGfTSVVDZKPmXFPzmkrEg9miIC+JBEBBpHU0WmuJI6WFPB1MhO1BNgUqUL4ZN20hSwOaSaCls6k\/l7br7e6TXY\/mookj1vWl4A4HdAn6Y8z2eOsjsHuQbbDycy8XzZ8gIAjqfW7urWlOf5yE40d96M58vhRMbyMgCOp9T6aURTjuNWmbX9wmfpo\/4AMCE+ZPJGNOWHK\/9zi0vF5o3lxQAcTL3T86wEDGoqbEdHR3OLS5aXBHAwiXw5mzseS1Oe51OH6b3jT5YXBnAk1eu7ZY+X47hxNeUl71EBgInU2l3\/6tr9\/T3P8yZoKjxLlS5fWF4wwDFUr+\/8q2ssywqOmaApz\/McxyX2k+uRXfGtVAAwTCJf9vkDQjtqpqbC9v379wWaDn1InMAYANBP5fL2QyZPe7zZ3PHj46NUrf8DWzPvPTJvPS8AAAAASUVORK5CYII=\" alt=\"\" width=\"0\" height=\"0\" \/>In our pipeline, we use Rational Quality Manager (RQM) to run a lot of tests using dynamically created RQM adapters. While building the products, we also compile and package the tests to be run. After the tests and products to test are built, we create and start several RQM adapters to run the tests. Here&#8217;s how we create the adapters:<\/p>\n<ol>\n<li>We create a new VM in the cloud\u2014this takes 5\u201310 minutes (we are requesting about 100 VMs at the same time so it takes longer than it otherwise would).<\/li>\n<li>We then install the test dependencies such as the test framework and the specific versions of web browsers to be used.<\/li>\n<li>Next we install the correct version of the packaged tests (we want to use the tests aligned with the software under test).<\/li>\n<li>Finally we install and run the RQM adapter (in our case the JUnit Selenium adapter).<\/li>\n<\/ol>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 0px;\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAzUAAACGCAIAAABrODP9AAAgAElEQVR4nO2dW3AbV3rn8RDbyoM93uyM40zWY2WjmvFmMlpVonIU7ThDZ+OMstlxtPFk7Wy0M45nHCsp29LG9mTGU15TN0ICQIIESIAERPAKgfcrRIoABfBi3iDB4IjckEMOB2GRJaSoClkslgoPeOh9OGSr0X26+3SjbwC+U78HiQT7+uHrf5\/zXUwUwUin04lEIhqNNrW01PsaAMMSHh2dmZnZ2dkhua3GHMlkMhqN9vT26X4xATXw3whEo9GFhYVMJqO3rcGAAQOGcYdJ+Nerq6v+G4Ey89XGtu7AYGgkthiOLwOGpWMo0toTtFXYa1zuO3fu5NEjcG9vLxwerbDb3V5fYDDUPzan+8UE1GBoZj4wGPL528vMV9s7O5PJpN6mBwMGDBhGHLz67MGDB00tLZ6G5qGZ+UTqIZBfjC0mmzv7qhzOpaUlLe1JxshkMuMTE5UOZ+dwZGrlvu6XDtCG+OZucPKu2+vz3wjk0Yzv6upqeHQUzQVeuny5FIaiw2y+iq5tNBoF7Q6jyAden01NT9sdzpHYou5OHMiFqZX715v97R2dhp1I29nZqXI42wZuxda3db9cgC4MzcxXOpz37i3obYxCI5PJRCJRi9XmaWjuGIqgucD45q7uV6\/AiK1vo2sbGAy5vb4Kuz0SiRrWfWEHCgdqammpcjr1lrswVByXLl+u9zUMDAZTqZRKtoTRZ\/0Dgzd6g7p\/UQGluPnZ3eu+hr29PZVsSPbY2NhwutwwZwbEN3cb\/O23I1G9TRI\/FhYWyu329mB4dm1L92tVVEyt3G8PhvNiHYCiqL29vYHBoMVqa2zrHoktTi5t6H4BAfWIb+6G48u9t6ccNe4qpyomytZn\/huBvsi07mcOKEtkftVd5zXUKtLKymrtdR9MmwE0HcFwd0+v3oaZNTKZTHtHp8\/fDspMR9A6QP\/AoN7mIDSmp2cqHc6+21Mwq1qETC5tXG\/2N7W0PHjwQEGjytJn\/QODIM4KlcmljVqPN51OK2g9skcqlaqp84IjA1h0DUdGwqN6m+f+2Nvbu+5ruPnZXd0vC5BIPeyLTNf7GgziwZgDiXh\/TxDeNouckdiiq86rYNzkI302NT0Ny5qFTSi22HojoHswx87Ojqe+AZY1ASxN7d3xzz\/X10Qpikqn09Uud2R+VfcLAtCE48u1Hq\/uHow59vb2aj1eEPEAIra+7fb6lPJg+\/oslUo5aty6nxugNh3BsO5RPvW+hnB8WfdLARiT+Oauo8at7DKB1JHJZBqbW8BKDUgottjU3KKjbTBHOp2u9XjHFpO6XxbAUCj1krmvz+o8XhlvipNLG7qXUwL4wEbMxDd3yyvsOuYKLC0tXW\/2S7U0OqsLKDCwt3toZt5\/I6CXiVIU1d3TOzA+p7uXB7D0hCduDt\/S0TzQyGQyrTcCIahyAHCIb+7Wt9xYWVnN0cZMlMRHZmR+tbGjz2yxlpaW2iqd1Z56wJgc3CNHYDDEzCTS8eGXyWTK7XbCUOvZta3e21NVbk9paemVMrPu1xNQA5SpXtfo7x+bY4bvXG\/265Wyt7q66mlo1t3FAwI4atzqFTUgHDeHb\/WEJ3S\/FIAxia1vO13uHHPyTBTxetNIbNFW6ahye3pvT0E2U74wubQRGAwhJU1PkV6zWnWZQltYWPD520WPeXZtyxfoMlusjR19EABUDAzNzPsCXVfKzC3d+0HWI7HFphYdlrEymYyMFauxxaTuM5EFDDfufmwxWeNya28e9ICIIECU3KdCTDs7O7YKu\/Buplbuu+qbXPVNUNAlfwnHl6vcHm9re2x9u7mz786dO0q5KvLR3tkZnBQJpO0YitgqHf1jsLpUjHSFxi3l9t7bU\/HNXYvVpn2yXiKRaGzrJjnU2Po2Pb9rd7oUmE2sdVusFWZrdaV6E5a1bou1wuaS8bd1NmuF2eqoqMX+V12ulJmvlJl9gS7mPIKnoXl1Ndf1I9lDakRQZH41HF8ODIaAQgV1v2Td9xyt1DQzM9PaI5S2ObaYtDtd0EugMAhO3rU7XQPjsXpfg3LOimik02mL1SZQUyO+uVvX6Pf3D0OaejETW99u7OjzBboaAl2JREJjK21qaRH1dfHN3cBgCOZ3tSS2vt0\/Nlftqbc7XeiaByfvtnd2amweaCSTSbfXR3LYk0sbLd1Bs8Va5fZUe+p11xCAerjqm6o99cgt0DNZ4fhyLo9aU09vn8BcxdDMfJXbA8\/LQmJq5X6Vq8589Zpy\/opoCK8IzK5tVbk90OwVQPSPzdmdruFbmoaB7+3tXbNahQ8sHF9GMZ1QvU8XxhaTVW6PL9A1+8stXWZYKYoSfmgiZte2Gjv6bJXOrtA4hAMVDyhs2lbp9LbuF7XOJZrIJBB8NhJbdNU3gRsqPGLr23ZnzS9+8Qtl3ZbwEEhDia1vV7k9kKYOMAnHl20Vdi2LXYlmSvXennLVN0HpPt1Bc2nVtR7te6hnMhmL1SY8ZzE0M2+rdPTentL9QgF6EZy8iwJ1AgO3JiYm5RmbqcJux7ob9JoC4qxQia1vO6pdWnZ84ltJj2\/uuuqbSDJUgGLj1uw9LYtdCQd7tHQHGzv6wCUahLHFpLWicmxsTDPzQOPBgwd2h1PgwDqGInWNflh0AmLr275Al7uhpae3T56x4fXZ7NqW3emCWdnCZnJpo8bl1mx+IhqNBgZD3MPwBbogGwDgQ8tiV+HR0Y6hCPYwOoYi\/v5h3a8GwCS2vl1R5dC4rbBw8Jkv0AV2AjDpGhmvqHTIMza8PoNHZpHQORwJadXuEKvPwvHlak+97tcBMDKaFbviiysKTt71torXhQG0R\/u2wgIZvv7+YT59DxQzXaGJ\/oFBGcaG0WcoYZN837NrW8HJu4HBUGNHnwa51oAM6hr9gcFQV2icFeOlZS8drD6zO12Sws4i86sdQxE6WQYoJBo7+gKDoeDkXdbMfWR+tc7j1cBEsfpscmnD7nTBsqZh0bjgNp8+6x+b8wW6dL8agDG50Rucmp6WamwYfVbtqScMBuofm3PVN5ktVm9re2Aw1Ht7SvdKhgCWoZn5wGCopTtod7os5faW7iB90zXzblx9Ru7RxhaTqGtFldvj7x8OHBSbAQqJ3ttTgcGQt7XdbLFWe+pRFTRkANq0E8Dqs7pGP6QVGxwta6Fh9dnUyn1bpQNEPCCAjHUAtj6bXdsyW0QyzBMHSea+QBfURcs7plbud4XG6RoBmhUC5eozV32TqP3E1reRrISuFUVFOL7c2NFnq3QgbaRNsSuuPhuama9rlNAudiS2qNhKQvW1H5079965i9fUm7Osvvajc+c+qZDxt5WfnDv33rmPL1Vj\/6sivkAXmmRliiEt2wlg9RmIeECUsPRaaGx9JhoGG9\/c9QW6qj310Esgr0E1Ni3l9rHFZGNbtwaFQFn6jORNYCS2aCm3d4XGdb9cgC5Mrdyva\/S76ptmf7lVZr6qdi4LV5+RvEIkUg9n17b8\/cNmi9VV3wQrCarSPzZHT7L6Al30Y0izKTSuPgtLCaJF9bGQ1rxSZi6FUYgDNRThTmBJXQdg6zNhfxRb36721EPqQMGAqsK29t7UYHKCpc9EY667QuOu+iZIUwdGYotVbo\/b61P7AczSZ4SLCagjWcdQBOZ3tQR1FLBVOlHP1v6xOdlVDCQNrj7ztraLtq1LpB5OLm3UNfpRfXmkNcG5FSqoIS8dAEaXs5baVpitz2yVDr6JsamV+3RvDaBgiG\/u1ja0VDmr1fNoaLD0mfBMbUt3sKVbqO0YUFRMLm1Y7ZW3b99W1URZ+qz39lRjR5\/AUaE6RNCRTF+6QuN2pyvys19cunxZVfNAg6XPYuvbZotVOPIMBWnYKp2wBlqEzK5toaUqJOIltRNg67OLly5jTQ1VeIc1zULF7Wu+d29BVb\/G0meNHX189bWh1hTAZXZty+6oVrXYFUuftXQHBdbWUZ47NL0wAlMr96vcnmu2cg1qobH0meg6wOTSRpXbA0EaRc7s2pa3tb2xo6++tW1hgfRRm6XP+ObzocJ7wRPf3PU0NKvaLIWlz\/hW0qHWFMDH2GKy1uNVLwqNpc8E1q0i86tVbg8saBqH+OZujbfhdiSikm3Qg6XPukLjAjP94fgyzGsANL23pyocNeFwmNDYsvTZ1Mp9S7mdu1Hh90igMJhd23K63LI7uYoOlj7DlnGBWlOAMAPjc909vSqZKEuf8VUaQpEesKZpNOKbu7X1DWp35GTpM4GHI8obADsBmITjy+X2SsKXTHF9lksjTt2TfQAsfPerOzQ+pFovHRJ9JjtNfXJpQ\/erCiiIwJRDTa1nY2NDDRMl0WcQ6WFkYuvbrjqvqgW3WfqMr9cOWtYEcQZwuTV7r\/VGgESiieszwgxzRGR+FdX+QVmmatfCAeRB3x2UScS8g+r10hHVZ5JqTaE0dZQdU1paaqt06n5VAQWxVTpLS0tRodqu0DgzRla9Ylck+gwWEwxOWHqVKUmDRJ\/FN3dtlQ5u40QAQPRFpkk6Ponos8mlDVulk2R\/vbenLOX2KrcH1f7R\/fwBUcLxZVSJx2yx0o+c3ttTA4NBNfyaqD4jfBNgpqmPxBYhBqiAmV3bCseXW7qDlnJ7taeeTh5XqdiVqD6TvZig+3xkQcKXnKFqtwkSfQYiHhCFZB1ARJ8FBkPcnoksUKhsY0cfvC7kKbNrWy3dQVulIxxfnl3bKrfb1QjBFtZns2tblnK7aJq6v38Y0tSLk3B8ucrt8QW6Zte2VCp2JarPyNff0fyu3elSbCWh1m2xVpit1ZXqTVvWui3WCptLxt\/W2awVZqujohb7X7WgL29do5\/ZUWBq5X6F3a64eaAhqs9kBNGi8AzUxhooMPrH5rDvEiTrACL6TKAcGgJNwEBRtAJgcmkDrSWpNDkhrM9Ea01Nrdyv9tR3DEV0v1CAjvSPzVW5PaOJn1usNsXfIoT1GckrROKg2BWa34XqG9owNDOPOgp0DEXQDXJ7fSolCojqM76INC50W2EUnoHaWAMFBuq3ZHe6Ll667G1tZ77giU70Cumz+ObuxUuXBcyrpTvY2NEH2XaFREt30OH2TE5OKu7XhPWZQDm0xMEcLTztgMSBUrdVVCoeBi6sz0RfIRIHYR6wtqULB\/PrDhS5oVKchrA+i2\/uXikziz4Tp1buu+qboK1wURHf3A1O3q1r9CMTTRC0FRbSZ8LBZ40dfTCZUZB0j07WuGsV92vC+kwg+AxqTQEsYuvb1R7f2PiEsiYqrM9EFzcbO\/oaO\/ogZU9fkHwPDIRUWuIU1mf9Y3O+QJfwEQYGQ7ZKB3nWHVBgoKUqb2u7aFthIX02Elt01TdhdwAV3gubwODISHhUWb8mrM\/4VtJRZXAQZwCL+OZuldK5xsL6rMrt4QvkQI2JBSaAAY1p6R4su3pNQdugh7A+E84MiG\/uokVMWHQCgpN3qz31jhq3QJaAkD7jexWACu\/FQGtX\/1wspqBfE9ZnlnI7N78Eak0BAsyubbnrvAq29BHWZ2aLle89QVIRIkAbAsEwSQkDqUNYnwlMsiJvRtJJHSgSxhaT1opKgWgiyfoMtQSG+YyCJ765W15hV7CdgAx9BmnqgDBDM\/P+GwGlTFRYn5WWlmKPAazUsDR39in7kkmJ6TO+SVbokQhgmV3bqnTW8L1kStZnUp0RqmDUFRrXPY0CECA4eZfrO25+dre9Qyh6UdKQqs9k1JqKzK8OzczrfjEBlQjj+goomG4sQ5+RJA0AehHf3K2p8yq7CC6sz7DvmQnBXq5AkTO5tFHr8abTaa6xSdNn5OVq45u7\/WNzqLx7tae+pTuou3MHBPC2tld76q+UmX2BLuZKjYLtBKTqM\/JaU6hrhdlirXJ76hr9ul9MQCWqPfW2Sqet0hEYDNHWomA7Aan6LLa+bat0wGKCkVG824QMfSbcQx0A+KZCpOkz5CVFdxacvGspt7Oe9IDxia1vI1Vd7alHxSw6hyNhhRIFJOkzwlpTUyv36xr9qGsFPCaLhMmljcBgyFbp8PcPo2RJu8OpSK0NqfpM6mJCOL7cMRQJHLwOyaf62o\/OnXvv3MVr6lV\/rb72o3PnPqmQ8beVn5w79965jy9VY\/+rIujxNDQzz3IFTW3dn3+eyN080JCqzyAiCCABW7FPmj4TLVc7u7ZV5fZ4W9vBHPOacHzZ7nT5+4dn17YsVpsifk2SPiNZNuoYitgqHdBLoDiJb+4iAwjHl5V6i5Ckz2Lr22aLlWT9fWrlPprfrfbU+\/uHAwfhBICyIH2Gmr8xZ98nlzaqnM7czQMNqfpMkohHbSdauoNqa1lAXwKDof6xOWYtHuxErwR9hu2ezgQFDEEvgYKhYyjiqm+qdtWKtgkjGZL0mXBCXHxz1xfo8vcPQ5p6kTO7tlXtqW8LhrkP4HQ6LbUJoyR9RlLpiq6YCvO7GjM0M1\/X6K8+WAdQME5Dkj4jLFebSD0Mx5fptsJdoXHdxS6gKoHBkC\/QZbZYva3tdN11bkdOCfpMoBwa+m2V2wMtOAuMkdiirbLq888\/5\/qpQ4cOvfHGG4FAABvYyB2S9JnATG1sfdtV30TYQQUoBho7+rjFrpLJpMlkOnz48Pnz5xMJouUtSfqsmtOdk0VkftVW6aA7DgHaE44v252uwGBIYIa1pKQE+TESC6Ek6jOSWlSza1tovRuWAooN1FHA7nS1dAdj69vcphcS9JnAklNkfrXaUw9uqCAZW0w6ql1cEWY6GIRCTZI+u3jpMtac4pu7dY1+iGsEWLR0Dw6PhJj2hvQZPZ599tmzZ89Go1EBE5WkzwTKoSUOik\/CnJkRCAyGarwNjc3N2JteUlKCLOTpp59+8803hS2EkqjPRJOcRmKLtkoHpHYWOV2hcVulYzTxc7P5atZDllyf8SUHQIX3gmdk7l5TcwvLT5k4Q1iokeuz2bUts8WKPRLhNp1AMeNrbbt3b4FPn9EDPYZ7e3u5VipJn\/GVQ0ukHnYMRbyt7fC+ahyCk3dtFZXYRjonTpxgWcizzz57\/vx5vsVxSfrM7nQJdA3uCo276pugIRiQOIjdv1J2lemXctVn8c1daFxdDHQOR0LZCwTYh5+AUCPXZ3yRjlBrChCAVeyKT59xrZQuDkmuzwSCcVHkk+5XA2Bx87M4tpTx4cOH+SzkhRdeMJvNrKw6SfpMYJI1MBiCohsAk\/jmrtvXPD7xqJ1ArvoMKrsUCfHNXUeNm1nFQPjhxxVqOeozSFMHRAnHl6sczmg0Go1GA4EAiYmicfr0abfb7WtoyFGfySiqDGhGT3ji5vAtcn1GjxMnTrjdbqTjJekzvklW6JEIYIlv7tbWN9CvBDnps9m1LVulA6Zni4Shmfkfvv135M885nj66acvXbqUiz6DLjoACZVuz3e\/+92SkpI\/+qM\/IrdPFJ1WXmHPUZ8Jr2cBumOxO44cOSLPiZlMptOnT1+9etXb0kZvUIY+C8eXXfVNIOIBLLH1bVedF02F5KTPCMvVAgUDsxAoiTtTav6MvNYUUORE5lfrPF5CE3366aeZSQM5rm\/CYoLxGVtM1nq8zEA0kvkz5MpOnz7d0NAwOjqay\/wZRAQBoozEFptaWnLVZ6LlaoECg5mmTijLFIk\/g8gzgBz6LULAPlGKAGupKxd9Ft\/ctZTb9Vl\/n7YcNZlMpreqVd7Fa34Zf9v7mslkMp34aBr7Xx3w9wSnp2cI9dmzzz7LyibJcX0TRDxAwvVm\/9LSknx9NraYtDtdup8GoCVTK\/cr7HY+faZU\/ib34SdaawoAaNqCoUg0ijVR4UIwuegzknK1aqG6Prv30XGTqVD0GXOGlaKoQ4cOce0Elc3D1trIRZ\/pKeKBvAK1E5Cvz2BKozgpM+8nADNl2V\/+5V+ePXv2X\/\/1X7GPvdz1GV85NADgMjQzjzL1aBM9derUhQsX\/v7v\/35mZkbARHPRZ8IdL9QF9JlEbBV2OmmXKcuOHTt2+vTpWCwmYCS56DNICwDIqan1yNdn\/v7hjqGI7ucAaAzdKYU5W0bXMkAhGrTvU0SfCZRDAwAudCe7kpISt3vfXKPRKL1idfbsWe7iZi76LL65e\/HSZd1OGfSZRJo7++7cuUPrs1OnTtF2QvsxvnnWXPSZaLlaAKDpDo3L12fe1naoelyEoHVxls\/i1priCjXZ+iwyv1rl9uh+4kC+EFvfZpXhZuozeqBCtczHsGx9JtqbWF2w+gz98LhlIPVw4AKzBCtXG+3LL+wHsv+Wo9L2d\/1oHL1wL3vjRtRnHUOR8Oh+HC3rZZJrIcPDw0rpsytlZih3ABAytpiUr88gJKg4aWzr5nYzFKgFSgs12fosHF+u9tTrfuJAHlFaWiqqz+hBp+a1tPrl6TOdTVRIn7312nHMKT9SURyBxfqAgD6rPsNzQY9bBh4diRH1Gb0Czh3YE0JzrsjvydZnOk+yAvnG7NoW6DNAGlL1GT2++c1vnj3\/4cTP940N9BmgHpL0GXP83ot\/+NNrVaM\/+2VCij7TMzkgJajPTCZT1pwWPVW2\/+F9jXWml\/7DA0HG3BpufdP\/FtoQ84e0mGP80Ij6LBxfrvc1kOszerzwwgvvvPOOzemmN0WuzyaXNmyVTh3PGsg7QJ8B0vA0Bz7ljHPnzpE8\/NB4+dR3LlTWWSudoM8AlSgtLaWN89SpUyUlJceOHSM3UZPJ9I3ff\/HHn3xaAPqMveC4\/3OkkLBqiavGMPoMCTvOaub+Jxk\/N6g+u1Jm5vqxTz\/9lNA8vvb1o0jHk+sz8GOAVECfAdLIXZ8dPvLVdz74+JOLl0GfASrB1GfDw8PRaNRutxPa5\/GTL\/30WtXEz+8XxPwZVwkxFRJ7Oo0H8vyA\/NZnkvyYyWT68nPP\/58f\/xT0GaASoM8Aache3\/zKV77y2l\/\/797JBNoOrG8C6iFjffPYsWNvvfWDxp4heiMFoc+4witbIR0sU9KDMyX2kEyfZSUZGF+fYdc3SfyYyWT6yuHfeueDj9tGZxJS1jfBjwFSAX0GSEOqPnvhhRc+\/fTTpaUlyA8ANINcnyH7RA2JZedv5rE+S\/GkCGTF+PPoM462K2x9VlJSYrfbb968KS8\/APwYIBXQZ4A0CPUZLcuYD0jQZ4A2iOqz55577vz586xKMUWqz2hYeutR0oBQfsDBQDvKm\/VNQn2GqjwySwXJzt8EPwZIBfQZIA1hfYZkWVlZGbM0KOgzQGP49BldKOHTTz+lWyuCPmPBSeEkyhhg\/jzf9Rmyjbq6uhMnTrD8GOgzQDNAnwHSwOqzVCrFnC1raGhgLgogBwf6DNAMrj5LJpPMdorMTD26UG17R0dx6TO+z7B\/zlVjaCN8f5iv+iyVSp0\/f55uAsacTkMV8tLpNOgzQDOMrM\/QN5kxskIi9GDaclRmkxM2PNnpWey\/xdKrDI8WFASSregoXbU8IFafsQZTn9Hj2LFjP\/iH91FlqYTB9ZnqDXNysSVZDzzlTFef7UuEq89YA1tJ4bHHHn\/pj1+56m5EVfoKX5\/R7gIXbSa4vnngnDGF0\/JYn7HG0tISy0IOHTr06quvvv\/BP9GbUlefFZ4j0gr0hDWOR5KHMfUZR5kxhrCmUZNcmtBxQGJLSHFydscI+OA9hkehvobTZ\/RA9QvKbBVFrM80bmioqOnqsH3JyNNnzPHyqe+cefOt3rEYc5v0vwtFn\/H2D2D9IbNVAPLA3L4CJpPJdNxSzXqrNORTnFCfCeT8\/vtnfv273\/thczCa5\/qs0Dqr0oA+U0mf0eIMXzXRpJtEU\/YhtH+aIkqLKeCYAbmM11YmDKdpXH1Gj\/\/8+y\/StdpBnxED+kyc3PUZPdDrxOjPflmY+oxx+wTdC+MzmBl9xt1nv3ka8Smeuz6jxxe\/9Mwbb\/6QLhsE+gz0mYIYTZ9h59sfges9ohkKP4S4nVW4v81SovuODzXUw16Bex8dpz+g1vek+nqT1FLsouP4yZc+\/KefgD4jA\/SZOKWlpQra55NPfeHV1898+OGH9PaNpc8AiYTjy+\/xl6J9+umnS0pKpPac+NrXj3548donpRdBn+l+fxOgz1TRZ\/svZOLxVY+Ei\/+t\/f\/il\/9Yr4b8W+bM8zO1kUCTYGl7wewR+2GcrR+8mKIVBIzlTVuOmkxHL\/R+pKY+U3D+zHTQ62ni5\/fzYP6MMaOZbQ\/cS82yh6wPiNiSoB3ibEPELSphujmcjk6Izp+RmOhjjz32p9\/5HxUNbfQ26e2DPstrhOfPdnZ2otGopJ4Tjz9xCLkyLfRZfjoiKVuWdI4PE9nr72jKQ1yf8SkHSYEBxEcoD2PpM5KoefxVPvMW45YfXFme8once5Z1d5njYBpPyJSJ98KB\/90FG51G\/xBZBmfibeDCCZPpxEfT94yvz7jBPfmjz9D0JHs8MlqegB76AwK2JGqHidRDJfUZienmcDo6kos+e\/yJQ98+\/VdX3Y32mtr8yA8AJKLU+uaTT33hv3zr5Q\/\/7+W5f\/k3tGUt1jfz0xFJ2TLxOfKe5luvEeozrnKQps8IjjAHDKXPZM210s8Y9pKoQIYRbl4qe7+07YqV\/CHeCw52hma2EeOrdR+3DOwfCcuA0OIm\/Vsj6rPjJ06i2TKu\/eSNPmN\/\/dgdDLnL1rhFeaGCn2J2qNT6JpHpyj8dXZGnz\/7gD\/7g\/R9\/Qj9r8yZ\/E5AIoT7r7e3F+rEvfumZv3n7XW\/3rYQu+Zv564hIt0x6jo+cGOPpz9SdovqM9be815x7gqRHmBOG0meyFrD3rzL7r\/ikD\/fnPJN23EKLGFMm3wsevCnw1BZiTKoNcJc49xc37yWMp89efvllq9U6ODiYN\/XPBN0i21SyGlFjbZiovCexHSqjz8hMV\/7p6IskfVZSUnL27NnW1tZ8rU8LSIRQn7H82O\/8zu+cO3eut7dXu\/pnheWIiLdMeI78ZRBwQpANj3KQqs9EjjA3Ckaf4SaTsJvi5kXiIdFniu0F8\/rC1XZMW+QscW2wfXYAABwASURBVB4sbgoelRKQ6zNU0XFnZwflyh05cuR7Pzx7M\/bPWPvJH33GvbC4glIi70\/kgkYlfUZouoqfjkaQ6DNmi4s333zTxKh\/hqbQQJ8VKpL02alTp9xudzKZRP\/9xje+8f0f\/B1dx1E\/fZaPjohwy4TnKBAQJVYeIcUf7C5Nn4kcYY4Uij7jW9zkHSQlXkX1WS57yT5+znyeWFAaa4mTXtx8aAR9lkql6HZ1FKeWAUp0umC+lp\/6TOx7ywnqwrkPErfIZ4eK6DNi01XsdDRFVJ+xBtJn9EDh3nlT\/wyQCKE+Y\/kx9rLAqe9cqKyraw7opM\/y0RERblladWXswRPmB2DmUKTpMzn908gxlD7LIf4sR33GEyht0kCfsVczeRY3OWeatcSZNZ2mvz5jDb5aU7\/9tf\/04cVraEatcPTZo09mD1yJdnyIoYgdaqvPcjkd\/chRnzHHyZdfMXr9M0AihPqMNbAxi4899thLf\/wKneRrIH2WMqAjItyyJH0mlNEJ+kyBg2BdU5HcB9a0pJA+I7tGbItBWyZZ31TmTmRZEp30K2pPjIm37HC0vNFn9Pja149+5y9Od0XnsHaYf\/qMz7SEGuaQ26GC+kxeLAHZ6eiKgvqMHocPH6ZfJ0Cf5TXy9JnZbBYwD9RR4N33zxtIn9EYxBGRbhnmz\/Yxlj4jqH\/GSUvBX2XJy+qcT5LHn+X8WHqktASlFbYwNyadU119Vu\/vCAQCUSnj+9\/\/voBfYw609NkVnSsQfXYAJ3OK3JZUjT+TaboEp6MzpaWlvb29nxIPqZVI3\/\/4woXLZfTuQJ\/lF+H48pUys7BJcL0coR\/7jd987m\/f+wB1FDCKPjtAV0dEvmXSc+Sf0CHwSKDPpCPSPwCTc8FzlfdlHF9mB7v9CF+QoEj+JvFehDk4BuGsAs42q8+YTKYTH\/lZuQLq6jN3Q+sbb7xRImUcPnyYxK+h8eXnnn\/9zbeZD7980md8n2H\/nG9Ci8QOlcnfJDJd+aejM6WlpadPn1ZDn2FfIfJVn0lzU4ZAkbrwJPqM6+Uk+TGTyXTy5VeYPSc01WdGdETkW5YaY8dT6yAnfcZTEaK49VnWkjlfoXNc1yO+q4xvYckxMmydGNYncQ8h0r2IsL9AeYZ\/cRN7pkItE\/JpfdNkMv27X\/u11998u210hmuH+aTP8C8YBz8UWlYgt0OF6p8Rma7s09EZxdc3Dx\/5aklJCZ19XCDrm0Wsz2Ssb5L4MZPJ9Px\/PPK3732AXJl+82cGdETkWyZXP7g0VfxjkQOv8WO2iWlsXaT6LJUl0TCDVXhCwMXwhSJmb4FbRhltsJqnUhrbmMj2QnzK\/Gu7mDOlo7y5JQfzQ599+bnn\/+btd9tGZwonP4DXerP+kGtLxHaYa9luaaYr93T0RSl99utf\/s13PviYu1YF+kwvDKvPjp986cOL137y00+MEn9mPEdE\/qiVon5wqU7HLR\/Jjj9L4R0ju3Fi8eozvmskcCl5XQyrARnPDcveFzNUH\/\/+wTImwr0IwX2zITpTXJP1PNBnX37u+Zf\/5JXaG48Ou3D0Gc4ecLcVZ0tEdigvrT0X05V7OvqRoz5Drw0\/\/uTTAq9\/BvosNz\/2+BOHfu\/4i+\/\/+BPUEyVhtPxNAzoiwketRPUju\/8mv\/Fnyb7X\/A\/ZD1Zt9Fm9r4H2QcbSZ4AhyUWfffGLX\/qbt9\/9b6+9bvT6Z0CeI0+fPfPMM3948mRzMHr4yFe\/ffqv\/vbtd27O\/Iy5TfrfyuszTneQ\/YF9fpB0mMZ9kr9l3KMf4roASdgj2ZOSpRt4Fw3kPHcJyFGfPfnkk6++fubPv\/vXPzz\/I4vDpWL9M6C4MTFbmoA+A0SRoc8aGhrOnz8\/OjrqqHEnUg+Pn3wJuTnj1j8D8hyp+qy3tzcajVIUVefxRuZXv\/zc87QqQGVIJ35+Xxt99hGugTQmsYM7OEoOu5wkEryLC7iW1tOaPTidqnlW1dmSS3bfawJk1z87f\/78zMwMWnR69fX96\/JbR76KKuQlQJ8BimKamZlp7Qmi\/4A+A0SRoc\/QSKfTFqstvrlL6zN6HD7y1Vf+9Ns3bk2gXYA+A3JEqj6jx507d5o7+5j67JGVHj5MP4bV0mdocMK3ue0cyDtM04IMMzGGLanIU7tbbI\/CUdX0JwWCxHFBRTL6XhMgT5\/RIxwe7RyO0PqMHidffuV\/vvHXI3fxa+LgxwCpmHZ2dmwV+44G9Bkgimx9RlFUe2dncPIuV58xhdo7H3x849YE6DMgF2Trs0wmU263\/8Z\/eI7PRE0m0zd+\/8X3P77wk59+Qu9OSX3GjhDKqg5F3mF6gBtzzU3WY+oznlIFpHskq3SAOyrcz3Ppe01AjvrswYMHdoeTq8\/QePyJJ759+q+uuhsToM+A3DBRFEWHoIE+A0TJRZ8tLCz4\/O0C+owezzzzDJ03B34NkIpsfUZR1NLS0he\/+CVREzWZTF\/7+lFkpcrpM\/7i70JR\/CTFtPl3etwyQFAYXHiPZJ2q+VOXsks\/5tT3moAc9RlFUd09vf\/1z\/67sHk8+dQXjh8\/7u2+Re8U\/BggCRPyR9eb\/QnQZwAB73\/wT8ePH5dUn5Ye3\/rWt377yJEnn\/oCycMPjcNHvvqD9\/4R\/BogCRITlVpuVOAx\/L2\/+4e65kBOxywgwngzxR4S964W3OmjQZJ0ht0jYacdwq6vufXtIcDXPfTYY4+R3Fw+43nppZeefOopki2YDtKBfd1D4McASZjQ2wCKigV9Bojiqm\/2er2S+jsxR1NT03NfwQT3cMfjTxxCywQ3Z34Gfg2QxLvvvitqislkkm925PnnxU30V3\/1V199\/QxqjK1s\/ib7Vyx9Jqd3teBOTSY67h5fG0V8j4SdqiXpM7l9rwkgnz8TsJ+TJ0+KGgk9Xj71nXM\/KS2zVej+1QDyiH19lkqlHDVu0GeAKLmsb6LxtRdeEHBkjz9x6E\/+\/C\/+15nvzf3Lv6E9wroAIJVc1jcpihKYWkOvDRfs7rJrVnp32ukzmb2rBXe6vxGepUOiPUqaPyOt1afe\/Fnu65sURb3xxhvCmuzJp75w7Nixq+5G5MrAjwFSMdHWNjYx0dLVD\/oMECZ3ffbNb36T68t+5Vd+5U\/+\/C+QL4P8TSBH1NBnv\/u7v0s\/a1XL38QtYj6SbuQdpiXGn6UeJvCVz0j3SNapmrQPWE59rwlQRJ+VlJRgZdlv\/OZz3\/3eD1HYGeQHALlgYhpc\/8Ag055AnwFcctdnTL9GL2KWXbNC\/TNAKRTUZ5rWPxPJlJTQYRrXWUQ0TZLbxYR4j2T5m\/tHxZeYKVzpg7M12aihz1CyyPl\/\/BDqnwFKkaXPMpmM+eo12ry00Wd8GdcymbYcxdcBIk9NUgkl2z5IQpEVARpF9NmhQ4dOnjz53kcf04uYutSnVfbK6IXuZ6HwV1gJctdnJSUlVqu17JqFuU3636rWP+NOgx0IFxkdphk\/PPgJvr5G1mdYTXtI9kjWqZquOospiit9a3JRUJ+9+OKLZ958CxXZTmhQn1a4ObX415DT8UngYjLCE\/mfnvQGtXi0qe7ruPpBV0wsm7vu89GqKw\/1GW72G\/SZwfTZzMxMOp1OJBK+G530ZkGf5e9ZFJ4+29nZQf+ocbnHFpP0Nuntq9Y\/4ATu6fvIaUjoMM33YeZnBFr6shc9CfaIlQ7cTtV82QZs+5Hb95oARfRZNBrd2dnJZDIWqy22vo22rL8+M5n4Hna8fSBMPJeURBA\/Op4C0GfKrJ4rCFufRaLRtuC+CMvD9U3QZxiMps\/QYBZGToA+K\/qzUJYc9Rk9pqdn\/AftVTTrv8l8jmJisAg7TCOk99+khRFn7ZJoj7L6b\/Jar6H6b\/INZo9ErfQZz+OMvt08VY4xv2JYCNvY8D0tsmDId9BnysPWZ6gyMvod6DNFAX3GHqiqC9os6LMiPwtlUUqfZTKZWo8XTaFpps90v3qKYrhnXkJpfYaqH6At66zPeD5wIHN5\/wrXYou2ybdeO873t\/c+Ok5\/APSZ8rD1GcV4auqzvskoJJ09tS5y+7nz8NkRD9zsdOwGWS92UlSd8Ksqrz4T2yPvFxK\/QZXeOGkU1Geo1yHarAb6TNabvXA+XbbV4R+uZPeX2OCJ76+i+xW0bf71TZJvE+szynh5pfQZRVGrq6uehuYE6DNBeG3AKK\/HWSirzyiK6u7pHRifSxhBn3GfC+yYQjyYhJIDm0Rr2ZgnyLTlqMl09EKvQL06\/lN4NHCJuoxDEvZ1JFsj8Ni8+mEfMVfmf2t\/18pFSSaw+oxuJ6CrPkOSnD34bqTQ9T0w6Ndwq+9ZV5AnMILkKmOjNLKPFienSPZIrs\/woQn7J25AfYZ6Hc6ubSXU1meEV4bQAA6+7R8pYlHkBk9+fxXdr6ht45\/NEmxb8KxloaA+oyjq5vCtnvAE6DPx4+ezWCPFJiZU0Gd7e3vlFfb45q7++oyT+koaHsqVcbRNol\/hu6ae+GhaqJ4wC94YOJblk\/k60q0ReGwhfUbiypA+O\/MW47AVeCfB6DOKovw3AkMz83rqM5PJJJrOg0FgfZNng49upECmkpjlcVKlcJWE+OUUw5gODI77MVF9dnD8PO8EBtRnFONlQE19RnhliA0AH5bBNVGyDZIaPPn9VXS\/BLaNewAQHQP3lR33xZGDsvqMoqim5pbLV8roMHDQZxwwiYEmjsUaBMX1GUVRKyurnoZmnfUZ7Zo4fonA\/3M+yS68x9opWtykf0ugz3DlUWgnhvFgwr6OdGvkHht7rcjcKb0LRa0dr88ePHjgqvP2jH6moz5jv0MTTdIK6TPhDfK9ZJC8fOA+wz0Stj7jKwXEfmgR6jM+\/65QxSAaZfUZRVFNzS2h2KKK+ozsykgwAIwTzLrpyNJIN0ho8MT3V9n9ktg29zNkx4BdoFcmBERxfZZOp83Xrk0ubWBNFPRZ1lkwhnFCeZiooc8oipqLxazldjqmNmGI\/E0Jcc\/sssCcZUHug\/XohXvC\/biEtr8Pp7oyma8j3VqK1GNjnQ+pO93fhcJBeHh9RlHUysqqo8Zd1+inP6qtPuOeJ4mdCegz4Q3yWxgjTEfCTjGwjp\/\/r1jWSabP+Ctu87RtkYvi+iydTtd6vNds5SrpM7IrI8UABL6K7DdOgg2SGTzx\/VV2v0S2zXFhhMdAOCkuB8X1GUVRDU3NI7FFrIkqoM8ADVFJn1EUVe1yD83M0zvSXp8Rxz1jENBnCc4S58Hi5kNyfcYDeS8KkmeZgD4T9tgPce6O2J0K9P\/IAV59RlHUrZERW6WD\/qi2+ow0HB57b6THbxE27sVC+AXALkcKxGKzFpiEj1\/1jnU0iusziqJ2dnauWW20OSmqzyR1BiQzAKJWicQbVPj+KrtfItvm6DPiY+BMt+QeeYZQQ5+Fw6OdwxGsiYI+yy\/U02fDw7e6QuP0jrRZ38Qv6u2jkD5jL3HSi5sPc9BnWWviEnu5Em6NeyIC15Nv1YvYlSk9\/y2kz9Lp9JUrZfRHQZ\/x7DQXfYbdbPavJDy\/hTL+jKzPKIq6EWijawipoM9Er0xe6DOS+5tX+izFMx+Qs5tTQ58xyyiAPstr1NNniUSisa2b3pF28We8cSyKxJ89TLCWOLOm06ToM77qxGx9RvYsE98a5kT4r2de6TOKoixWG0qvSxSFPpM3QwvzZwqMycnJG\/3DaBf6zZ9JcTFE+oxgg6rMnym131z0mcRvE8vV5pbxp4Y+oyiqyulEIWigz\/Ia9fRZJpMpM1+Nb+6iHWmZH4DJLUs9TCiSv8n875neBDscTXJ+QLa4EQ8CY50jKz9AcGu4E+G9nuJR4yKnprE+GxgM9t6eQh8taH2WS1SywePPFK65p5I+YxZG1ir+jHllpFwlgVADdvwZwQYVvr\/K7jeX+DOZJqdICqdK+uzzzxNNbd1cEwV9ll+op8+o7HYC2uZvYjINGX\/CeXRm95oUqH+WVeIAk85JqM\/43AJ5\/BmJxxaIPxMpZskff0bgynTRZ8lk0u31oY8WtD7jzaYkue4YyyaYVODZ48EiuljCBDvFl88EDZ+\/SQ+6MLIq+ZtiV0aCAWBLPTHuHfo56QYl5ecS3F9l90ti29wXdKJj4DsAJSqaqqTPqIOOnHmgz9Tu9GywTtKSUFWfPXjwwFHjRlNoetXXwFeQzn6IMIqHnXjtjED\/AFb5pxMf+Vm5AoT6jCekh5tITuTriLeWIvXYWP1A6k510WcUY0q\/sPUZthoZ\/30Vs4mDnwjNlBLWP8OlueG6nuGy4RStZYxQT5\/RvQ6Vrn9GdmXIDYDxt0IV9Qg3SGrwxPdX2f0S2DZmAYXoGLg1CB9i3k9koZ4+S6VSNXXeyaUNY+sztTvVGK4TjiRU1WcURQ0N3+oOjSd0qE\/LlxPN23+TWVcM338T9xU2YSaZCPUZtpAYjy8V8nXkWyP22ML1U4XdqV76jK4gmg\/6DNdamHyDfMGGBI8KbI11XMVO6f0DeD6G66qBC2Y8KJpsfH1G9zpUob8T2ZUhNID9r+IJXKI70f3FSRkSgye+v4ruV9S2JfUPwMs49jBcfVrmmIvFGm50gj5Tc\/vqorY+y2QyVQ7n1Mp9\/fpvYuYUeKvtPxoi82cMF8Q8ANL4M7wnOegfhS9wnf1Jpq+TsDVij43RDykyV6aXPqMO2gnkhT7DvChI2yC7CrYEByTYo5D\/+LMNkfcGZ31MoGRXHvXf5A7U69BI\/TdFAgTx32c+g8RuUKLBy+2\/mdt+BW2buP8m1gg5deeV6AWkqj6jKKpvYLDs6jV6d6DP8gu19Rl1UONdj\/6bvIkC2b9ljOOWgazni1BOIi7gQX7+ZlakP1+pdgFfR7g1CR6bb6JRzJXpqM92dnbcdd7Wnptq6DMgv1BVn1EUdXP4VlswpIY+U4zCKPVe0KitzyiKunjxEp2mZyh9lmunZ8xnsh69gtsX+kPjoIE+oyhqZWX10uXLdE8ww\/kxLo9aAuh9JMqStx6bSJ9RFJVKpWwV9pbuIP2XoM+KE7X1GUVRjU3NFy9dovdoOL+Wt9\/24kEDfVZhf9SRLG\/0mRJN63m3r1q3e8XRRp9RFFVZ5RhbTNI7NZYfKx7y1mOT6jOKosLhUdf1RvovQZ8VJxros3Q6XWa+Sj\/8DOfX8vbbXjxooM+YtYcMpc8SqYe5dHoma1rPn+mmQrd7xdFMnzW1tNA9wQznx4qHvPXYEvRZKpWqdNbQfwn6rDjRQJ9RFOWt99HWZTi\/lrff9uJBA322sbFRU+tBu8sLfaZo03rCSp4GDVPTTJ\/duXOnubOP3qmx\/FjxkLceW4I+y2QyFquNXk0HfVacaKPPmL0ODefX8vbbXjxooM8oRu2hfNBnyjat51VsBpwt46KZPkun0xarDcUpGs6PFQ9567El6DMquzIy6LPiRBt9xux1CH4NkIo2+oyuPZQP+kzZpvW4iTHVut0rjmb6jKKo7p7egfG5BPgxQDrS9Bkqf4D+EvRZcaKNPqMYkxPg1wCpaKPPqIPaQwWlz1IkTet5Fi7V6XavOFrqs729vfIKe3xzF\/wYIBVp+ow6aG+SAH1WrGimz+7dW2jwtydAnwHS0Uyf7ezsOF3untHP8kSfKdW0XiywTNFu94qjpT6jKGp8YqJt4Bb4MUAqkvUZvfAE+qw40UyfUQcdOcGvAVLRTJ9RFJVMJquqXd7Wdt3PmkEOnZ5xcDIxSbdmzBROjfVZJpNpbG7pCk2AHwMkIVmfURTV3tF587O7oM+KEy31Gep1GLrz\/8CvAZLQUp9RFDV6+3YFI7fdAMjt9EzatJ6zfTW73StO\/9hcT2+flhaSTqcrHU6DGQlgdOTos0wmc93X4Ki9Tld2AYoHLfUZRVFzsZi3yQ\/6DJCExvpsZ2fHYivX\/awZyO70TNi0nj9\/U4Vu94oTGAxFo1EtLYSiqM3NzUuXr+h+7kC+EFvflqPPKIra29uzVVTQ5RmB4sHT0Ly6uqqs5xIefQOD1opK3U8cyBdm17YsVpuWJkpRlNl8la49ZATkd3oma1qP2b5q3e4V53qzf2lpSWMLoSjq0qXLdE8wABBmcmlDpj6jKGpoaMjfN6T7OQAaY3c4Hzx4oKDPEh2ZTObixUtqnxdQMETmV+s8Xi1NlMquPWQM5HZ6xn0GNwGG3b4q3e6VJb65W2a+mslkNLYQ6iCgVvcrAOQFwcm78vXZwsKCz1ghsYDq6OXamL0OAUAY7aOLKIpKJpNur0\/3cwdECU7ebe\/s1Ng80GC2EwAAYTwNzfL1WSaTKTNfhdnaomIkttjU0qKgwyIczF6HACCMz9++sLCgvZXStYcAI+P2+pLJpPbmQTFqoel+EQCDM7u2VW63y9dnFEW1d3YGJ+\/qfiaAZuj15GP2OgQAAWLr2xarTZfVK7BS4zM0M++\/EdDeNugxNHyrOzSu+3UADI6\/Jzg9PZOTPqPbmwDFAFL0ujz5KJicAMjoDo0PDd\/SxUSpg9pDul8EAEt8c7e8wr63t6eXeVAUtbe353S5Z9e2dL8agGGZXNqocbkzmUxO+oyiqKaWFqiyUSQgRa+Ik5Ix4GUAEEX3B3Amk6n1eOFFwph4GppXVjTNPceOWOxOC0ShAfzQRRJy1WeogigsqBc8Y4vJGpdbCe8kf6Beh7pfCsCw6PsKgcbOzo67zgsTJEbjRm9wanpaX9ugR\/\/AYF9kWvdrAhiQtoFbYxMTyE5y1WcURY1NTLQN3NL9rAD1iG\/u1l73bWxs5G4tuQzU69BQVaYA4xCZX73ua9Br\/Z05UqmUE5bjDUN8c7fB3z4aieptF48G6vgES08Ai8Hxue6eXtpOFNBnFERdFDrXm\/3\/\/M86lHPkjo2NjdrrPpivBVhMrdyvdrnT6bTeFro\/dnZ2vL6GgXFDVUQrRiaXNmqv++7d0yGrSXik0+l6XwPMogE0bQO3mOKMUkqfoY5Pw7D2VIi0dPbR061GGPfuLVxv9oNEA2imVu676rwal00WHel0urunt6bWAxNpuhBb324buFXldOo+8S8w+gcGm9q6YTW8yJlaue9paOY+Z5XRZxRFpdNp\/41AT3hC91MFlCK2vn292W+coA163Lu3UHvdB04NSKQeRuZX3XXeVCqlt1Xix8bGRo3L7fb6+sfmYGleG8Lx5ca27vIK+7iRXiz5xuefJyodzs7hCLxzFiH7bxEOJ7ZromL6DI2bw7euN\/vhwVkAjMQWXXVegyxrcsfGxobT5Ybye8VMfHO3PRi+7mvQt2ICyUgmkz29fWbz1WtWq9vrA1TC7nCWlpbW+xoSiYRxFrtFRzqdDoVHLVZbY1v3SGwRdHzBM7u2NTQz7\/O3W6y28YkJvqhZhfUZRVFLS0vldnt7MAxGlqdMLm1cb\/Y3tbQYbcGINfb29to7O91eH7S0K0KCk3crHc5IJGqEhADysbe3l4Sh2jC4yxIe6XQ6kUg0tbSYzVdLYRT0sFht\/huBhYUFYfelvD6jKCqTyUQiUbP56vVmf\/\/YHIRfGJ\/45m44vtwVGrc7nFVO59KSQafNuCOZTNZ5vLYKe1swFI4vw1tBATO1cn8kttjc2Vdmvtre2bmzs6O39cGAAQOGWuP\/A\/iwoiC79BByAAAAAElFTkSuQmCC\" alt=\"\" width=\"681\" height=\"111\" \/><\/p>\n<p>It takes 10\u201320 minutes for the process to run and we invoke it many times in parallel.\u00a0 When it is done, we have about 15 new VMs each with an RQM adapter listening and ready.\u00a0 We then start the tests and, after the tests have been completed, we throw away the VMs.<\/p>\n<h3>Enter Docker<\/h3>\n<p>We modified the build of our tests so that along with compiling and packaging, the build also publishes a Docker image and pushes it to an internal registry. The Dockerfile does a pretty good job of showing what goes into the Docker image:<\/p>\n<pre>FROM debian:8.0\r\nMaintainer Nathan Bak\r\n\r\n# Install Java, utilities to extract archives, and display packages\r\nRUN \u00a0\u00a0 \u00a0apt-get update &amp;&amp; apt-get install -y bzip2 openjdk-7-jre unzip vim wget x11vnc xvfb xfonts-100dpi xfonts-75dpi xfonts-scalable xfonts-cyrillic &amp;&amp; rm -rf \/var\/lib\/apt\/lists\/*\r\n\r\n# Install RQM Adapter\r\nENV\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0RQM_VERSION 6.0.0.0-RC1-RQMI20150511_1003\r\nRUN\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0wget some.server.ibm.com:8125\/rqm\/RQM-Extras-JUnitSeleniumAdapter_$RQM_VERSION.zip \\\r\n &amp;&amp; mkdir \/rqm &amp;&amp; unzip RQM-Extras-JUnitSeleniumAdapter_$RQM_VERSION.zip -d \/rqm \\\r\n &amp;&amp; rm\u00a0 RQM-Extras-JUnitSeleniumAdapter_$RQM_VERSION.zip &amp;&amp; unzip \/rqm\/adapters\/RQMJUnitSeleniumAdapter.zip -d \/rqm \\\r\n &amp;&amp; rm \/rqm\/adapters\/RQMJUnitSeleniumAdapter.zip &amp;&amp; rmdir \/rqm\/adapters &amp;&amp; chmod 755 \/rqm\/start.sh\r\n\r\n# Install Firefox\r\nENV\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0FIREFOX_VERSION 31.4.0esr\r\nRUN\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0wget http:\/\/download.cdn.mozilla.net\/pub\/mozilla.org\/firefox\/releases\/$FIREFOX_VERSION\/linux-x86_64\/en-US\/firefox-$FIREFOX_VERSION.tar.bz2 \\\r\n\u00a0&amp;&amp; tar -jxvf firefox-$FIREFOX_VERSION.tar.bz2 -C \/ &amp;&amp; rm firefox-$FIREFOX_VERSION.tar.bz2\r\n\r\n# Install Selenium\r\nENV\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0SELENIUM_VERSION 2.45\r\nENV\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0SELENIUM_FULL_VERSION 2.45.0\r\nRUN\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0wget http:\/\/selenium-release.storage.googleapis.com\/$SELENIUM_VERSION\/selenium-java-$SELENIUM_FULL_VERSION.zip \\\r\n &amp;&amp; unzip selenium-java-$SELENIUM_FULL_VERSION.zip -d \/ &amp;&amp; mv \/selenium-$SELENIUM_FULL_VERSION \/selenium \\\r\n &amp;&amp; rm selenium-java-$SELENIUM_FULL_VERSION.zip &amp;&amp; echo \"\" &gt;&gt; \/rqm\/selenium.properties \\\r\n &amp;&amp; echo com.ibm.rqm.selenium.seleniumClasspath=\/selenium:\/selenium\/libs &gt;&gt; \/rqm\/selenium.properties\r\n\r\n# Display properties\r\n#  \u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0GEOMETRY SCREEN_WIDTH x SCREEN_HEIGHT x SCREEN_DEPTH\r\nENV\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0GEOMETRY 1200x900x24\r\nENV\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0DISPLAY :0\r\nEXPOSE\u00a0\u00a0 \u00a0 5900\r\n\r\n# Install run script\r\nCOPY\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0  \/run.sh \/rqm\/\r\nRUN\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 chmod 755 \/rqm\/run.sh\r\nENTRYPOINT\u00a0\u00a0 \u00a0[ \"\/rqm\/run.sh\" ]\r\n\r\n# Install CSPF Test Asset\r\nRUN\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0mkdir \/media\/ibm\r\nCOPY\u00a0\u00a0 \u00a0   \/TestAssets\/ \/media\/ibm\/TestAssets\r\nRUN\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo \"\" &gt;&gt; \/media\/ibm\/TestAssets\/bootstrap.properties \\\r\n &amp;&amp; echo browserPath=\/firefox\/firefox &gt;&gt; \/media\/ibm\/TestAssets\/bootstrap.properties \\\r\n &amp;&amp; echo \"\" &gt;&gt; \/rqm\/selenium.properties \\\r\n &amp;&amp; echo com.ibm.rqm.junit.classpath=\/media\/ibm\/TestAssets\/org.junit_4.8.1.v4_8_1_v20100427-1100:\/media\/ibm\/TestAssets &gt;&gt; \/rqm\/selenium.properties<\/pre>\n<p>The run.sh script used as the entry point simply creates a display and VNC session and then starts up the adapter. Here are the contents of the script:<\/p>\n<pre>#! \/bin\/sh\r\ncd \/rqm\r\nXvfb $DISPLAY -screen 0 $GEOMETRY &amp;\r\nx11vnc -display $DISPLAY &amp;\r\ncd \/rqm\r\n.\/start.sh -repository $RQM_URL -user $RQM_USER -password $RQM_PASS -adapterName `hostname -f` -projectArea \"$RQM_PROJECT\"<\/pre>\n<p>Thanks to the magic of Docker layers and the fact that typically only the packaged tests change, building and pushing the image typically adds only a couple of minutes to the build\u2014sometimes a bit more when the version of the RQM adapter or Selenium changes, but since this happens in parallel with the product code build, the extra time doesn&#8217;t matter.<\/p>\n<p>As soon as we want to run the tests, the process of creating a new adapter now looks like this:<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"border: 0px;\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOIAAABWCAIAAABdKd3jAAAKpklEQVR4nO2dTVPaWh\/A84m66uJ+j27vyu\/Qvfd5HuUWX6KAcI1FUUQqgoggKFQK5aKVKQPTMqOj0+kwMmamzuCwYFxkkWcRiHk5J5yEYEz6z\/w2xnBOTs6P85bkD8Vjtvv7+0qlEtmJBtc3AICQyE70\/Pz84eEB55WxjVLvYll2lVmjPd6dVC573izUrwCAkOx5c3s\/M79Ib4bD9\/f3k9K09PmzZyVQbN402D4AGOak1vKsBKpnZyZrynFcYj\/54fDY8hICzqDe6e0kM6nDtJma7sb20uULy8sGOIy9XPEod2yOph+Ln2JHBVxO1eu7eL7sY4LTsMGmZ3Mv0OvROBPaHrP3p3ieZ1nWsxJAClrv9CKp3PySJ5zIFOpXln81AXtRvb5LlS5WQ5HZv981m82xNF3xB0qtn8g8aK8\/li3WOz3LCwzYmsrl7bJ\/9aTw0aCmt7e3K\/8w6nRLrZ+011+5vLW8hIBj2MueJvaTRjQtFD7u5YqK5KrXd8sB5suPX9q5Vi5vLV+oA+yC0GMfFM8MzP2pzXD4pNaSylfv9LTbUWG0MT09Pb\/k9TFBACCB9vqnp6d9TND\/fqPy77\/6NF32ehVGRlK5WFbZvgoUmze0178ejWfPm5b3IIAdKdSvQrGDGZer0Wjo0HSRpqvXd2IqX378ci\/QyDlTqnThY4LIyRYA6OLLj1\/+YIh8PVWpaSxbjKRy6nSj6fx6NA5TfsBEEvky4YxKqelygFHf0E+eVkOxA438au1uoX4Vyxaj6TwAkJA8rRbqV\/uFzyRtqlLTmVlXrd2VKlhs3viYIK4dLTZvVkORmVmXjwlGUjnLCw\/YhVDswMcEZ2ZdS15\/pTJiRiXTtNbuzsy6FCLSXj9yPFrv9EKxg+UAA9MpwDC1djdVunC9c38qlUg1rV7fuRdoaSqp0sV6NI5M3ccEk6dVy8sJOIB6p7e1d5DYT3IcZ0RTf3BTsaraYPu1dpf2+uGZVMBc0uWL7Z0o0lQtTeud3sysSzEqrXd6\/uBmAf8YSr3Ty1S+RtN5y9eTARsRih3E8+VY9hR5j0pL08rl7fySV2FhOJGJ58tIQWvtbjiRmZl1rW3vRtN5y+\/OATYieVoNJzLuBXpucen0tKhD00L9yscEpSIKz6MgHT2pteaXPPF8GdZWgXEo1K8Wl32HmYxxTde2dzOVr+qkk6dVf3Bz5KMqAEBI\/Li0uRUWx6k6NEUOVRtsP3laRa4GAMA45GstcUalQ1N149pg+ye11mooAh09MAnS5QvhbqoOTdVrqLV2d37JA309MDneb0UuLy91aCrc45ImoTHrBwBT+PLj1wJNG9cUN1QFAHMJfUgY1zRT+bq2vWt5GQDHc1JrGddU4yF\/ADCRLz9+GdcUt4b6HJy5X1GKbcqHP\/JNxPzcR6eJOMmn7dVf3yZ7iSJTFEVRr92HllSQ2RjX1McECxYEmPj29jW+8v9MIg82VVPiNDU1pSiKov54ezaxCwWaCliiqe9PdAUf\/vUHqpV6CZoim\/nkm0mbCpoKWKDpoOIxVStUjEyLF6vpUzqqHsAkQFMByzTFXnqhiRpILLav4iYTS9UjKweLkanBzoH9FEVRr15rpok8W6ymGt86xcBGa9iNPROUpsNrokhwVHaoS2HycH8UNtSUrKPU0HQ4clBt0koV6ubPKYkKU2+11UefLV7T4ZnIviESFTQyUpcOnY6qRMrzIckOdSk0CjUJbKWpzDCSK4XqoIcVI90p1vrTTrH+lI23WZ2+JF+x3xcbSEmmiOH48DDRS0QzqdAU6ag4RJYMPIZJSbLDXornw2aaYmb6uPYVoRSiAZMc+bR\/UDfYHtkUTRUyDYxU2TDYP5RJKTfyrKQpox1FpoPaj70Uz4ftNBUQZ8ryzfiCFE5TtWST0xSfMuFhyI+MKAhKPsUcAJvC82FTTdU2DDdZU0RSo7LmWakpopubgKaDb5dsCohPCn+YOuWnTX085qv+tA3P\/AUsGthfU1XFSDp0jFKYecPzayrvXgVvNNZZjWk69UY+ZpCnCZqazOjqUQ22tKZQ8srAdPqT1VSR6SRaU+lHFOdMlo7WpXg+bKSpyiTcBdXSFCeZFZoq19cmMzZl+w30iilxQUBTXSDWSmSoPVbXBKZjVS3xTF5TxF0ozExfeaQP1Ymjp+dPSZFnh1nMAk2JkQynsCMt7QZDY6XwGTV9mvbJ\/2t03VTcg16Qkh2DSAd1F4DkUjwf9tK0P2rgr2xopTechOuOvH9DvXb7RrRGWmmiMfaE1Bh3oWRfXdT5I5pP3GxyVFKgKQEoAzDNm2S9SbleLf+gjp4OlSbZSY46WwH5VxHnh\/57+mLKyOfIdCb1rNhTU+A3AzQFbABoCtgA0BSwAaApYANAU8AGgKaADQBNARsAmgI2ADQFbAAVXN8QbQNNTcNoUCDc+0m\/OdRhOiP+ChloahLGw1iApkiom5sbZmNL+AM0NYlJRFv5raE4jlugaSEwOWhqEqCpyVA8z3\/79n0jsttg+\/VO7z\/\/\/Z\/4P+doqv3M24BRMWokrwXLH\/eUPTaqFRRoZEQgXICJUZmSFoF9EZF2DEAJv7uzuRXO11oNtu9yz4k\/+eAMTUfHsWHJHkYeGDP1BhW5UhWARJkIUUQgrKYjMiUtwvAwayPtGGCgKcdx\/zBrpdZP6W\/pOkFTkjg2Ol\/toFCvW414uYUwIpBGuJ4RmZKF2ZGcib2C9VHi7+09PDysrW9s72fEX9VxgKYkcWwIQ+Ig3kCS7ZfagM5idEQgvKbamZKG2WFfRKQdA1DSX4Z8fHwMbW653rmFft\/+muqIejLqtWONeIDqF94Jp1DkmmpnShxmRyyUHTp6KTJNhW0vnljbijZUP6RrQ01JIiYQBnHQeFPUgKaYiEBYTbUzJY5fwr6IF5sMgNCU5\/mt7Uj2rFFrd2dmXeKhjtZ0ZEicsTUliQgEmmJAa8px3Pv1jUL9an7JU7m8FQ51tKYTbk0JIwKNpSnZcNNJmgrj1PfrG6ubEVFNG2o6ibGpAU2JIwIZ1FTP3QSHaSq0qbuxvXdz87V2t8H2Y9liJJUTP2kHTYni2BCGxBlDU+KIQAY1JQ6zg9xjB7Q0FbbDdHozdtBQ\/fqjLTQlimOjb93UsKYEEYGMakoaZod1rqY8z+\/G9jKVr8XmzXKAET9pD01J4tiweu5CEWmqDOBDGhHIsKb4IqBL6khNhRnVUbXucs8JA4CGfTSVVDZKPmXFPzmkrEg9miIC+JBEBBpHU0WmuJI6WFPB1MhO1BNgUqUL4ZN20hSwOaSaCls6k\/l7br7e6TXY\/mookj1vWl4A4HdAn6Y8z2eOsjsHuQbbDycy8XzZ8gIAjqfW7urWlOf5yE40d96M58vhRMbyMgCOp9T6aURTjuNWmbX9wmfpo\/4AMCE+ZPJGNOWHK\/9zi0vF5o3lxQAcTL3T86wEDGoqbEdHR3OLS5aXBHAwiXw5mzseS1Oe51OH6b3jT5YXBnAk1eu7ZY+X47hxNeUl71EBgInU2l3\/6tr9\/T3P8yZoKjxLlS5fWF4wwDFUr+\/8q2ssywqOmaApz\/McxyX2k+uRXfGtVAAwTCJf9vkDQjtqpqbC9v379wWaDn1InMAYANBP5fL2QyZPe7zZ3PHj46NUrf8DWzPvPTJvPS8AAAAASUVORK5CYII=\" alt=\"\" width=\"226\" height=\"86\" \/><\/p>\n<p>Since everything we need was packaged up in the Docker image, we simply start as many containers as we need adapters\u2014this takes less than a minute on average.\u00a0 After the tests run, cleanup is simply removing the container.<\/p>\n<p>People are always impressed with the fact that using Docker allowed us to go from 10\u201320 minutes to about a minute, but I believe there are other benefits surpassing the performance improvement:<\/p>\n<ul>\n<li>Better reliability\u2014running a container has fewer points of failure than creating a VM and running setup automation.<\/li>\n<li>Fewer resources needed\u2014instead of creating a VM for each RQM adapter, we can spin up multiple Docker containers on the same machine.<\/li>\n<li>Empowered developers\u2014the test developers have full control over the the environment in which the tests run. Changing the Firefox or Selenium version is as simple as changing a line in the Dockerfile.<\/li>\n<\/ul>\n<p>Making the transition to using Docker to run our RQM adapters didn&#8217;t take too much effort and we quickly began to benefit from that effort. In future posts I&#8217;ll go into more detail about how the builds automatically create Docker images and how we designed our internal Docker registry.<\/p>\n<p>Nathan Bak<br \/>\nDevOps Adoption Architect, Master Inventor<br \/>\nIBM Rational<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In our pipeline, we use Rational Quality Manager (RQM) to run a lot of tests using dynamically created RQM adapters. While building the products, we also compile and package the tests to be run. After the tests and products to test are built, we create and start several RQM adapters to run the tests. Here&#8217;s [&hellip;]<\/p>\n","protected":false},"author":21140,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[192,472,68],"tags":[431,300,69,265,91],"class_list":["post-13084","post","type-post","status-publish","format-standard","hentry","category-devops","category-engineering-test-management","category-rational-quality-manager","tag-devops","tag-docker","tag-rqm","tag-stickied","tag-testing"],"_links":{"self":[{"href":"https:\/\/jazz.net\/blog\/index.php\/wp-json\/wp\/v2\/posts\/13084","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jazz.net\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jazz.net\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jazz.net\/blog\/index.php\/wp-json\/wp\/v2\/users\/21140"}],"replies":[{"embeddable":true,"href":"https:\/\/jazz.net\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=13084"}],"version-history":[{"count":42,"href":"https:\/\/jazz.net\/blog\/index.php\/wp-json\/wp\/v2\/posts\/13084\/revisions"}],"predecessor-version":[{"id":16946,"href":"https:\/\/jazz.net\/blog\/index.php\/wp-json\/wp\/v2\/posts\/13084\/revisions\/16946"}],"wp:attachment":[{"href":"https:\/\/jazz.net\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=13084"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jazz.net\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=13084"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jazz.net\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=13084"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}