<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Dogu Technologies</title>
    <description>The latest articles on DEV Community by Dogu Technologies (@dogutech).</description>
    <link>https://dev.to/dogutech</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F7277%2F0d03b1c2-7159-4043-9e46-538fdfc2293d.png</url>
      <title>DEV Community: Dogu Technologies</title>
      <link>https://dev.to/dogutech</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dogutech"/>
    <language>en</language>
    <item>
      <title>Dogu v2.0.0: Run routine with latest app, License policy and admin settings for self-hosted, Browser video recording, and more</title>
      <dc:creator>Daniel Ahn</dc:creator>
      <pubDate>Mon, 18 Sep 2023 14:15:53 +0000</pubDate>
      <link>https://dev.to/dogutech/dogu-v200-run-routine-with-latest-app-license-policy-and-admin-settings-for-self-hosted-browser-video-recording-and-more-1hog</link>
      <guid>https://dev.to/dogutech/dogu-v200-run-routine-with-latest-app-license-policy-and-admin-settings-for-self-hosted-browser-video-recording-and-more-1hog</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Kxd7yNt5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i64phk70fri49ak5a6bo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Kxd7yNt5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i64phk70fri49ak5a6bo.png" alt="dogu-v2.0.0" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this update, Dogu's major version has been changed! With this update, we have addressed the issue of specifying the app version in routines, improving convenience. We have also introduced the ability to apply and configure licensing (pricing) policies in self-hosted environments. Take a closer look!👀&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨ Run routine with latest app
&lt;/h2&gt;

&lt;p&gt;In the previous v1.11.0 update, we introduced support for Routine with mobile app and games. Routine was structured as follows at that time.&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;name: app_test

on:
  workflow_dispatch:

jobs:
  test-android:
    runs-on:
      group:
        - android
    appVersion:
      android: 1.0.0
    record: true
    steps:
      - name: run test
        uses: dogu-actions/run-test
        with:
          checkout: true
          environment: python
          command: |
            pip install -r requirements.txt
            pytest app/test_android.py --capture=no -x
        cwd: app/python/pytest

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




&lt;p&gt;This involves locating and installing an app with version &lt;code&gt;1.0.0&lt;/code&gt; on all devices with the &lt;code&gt;android&lt;/code&gt; tag and executing a test script while performing routines. You can run routines and view the results. So far, everything seems fine!&lt;/p&gt;

&lt;p&gt;However, when integrating routines with CI, there is a slight inconvenience. Why is that? It's because the routine mentioned above always runs an app with version &lt;code&gt;1.0.0&lt;/code&gt;. During the process of uploading the app built in the CI workflow, the app version can dynamically change. Therefore, Dogu defines the latest app based on the app &lt;strong&gt;build version&lt;/strong&gt; and specifies the app package name in routines, allowing you to run the latest app with that package name! Awesome!😎&lt;/p&gt;

&lt;p&gt;The above routine can be replaced with the following:&lt;/p&gt;




&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;name: app_test

on:
  workflow_dispatch:

jobs:
  test-android:
    runs-on:
      group:
        - android
    appPackageName:
      android: com.dogu.sample
    record: true
    steps:
      - name: run test
        uses: dogu-actions/run-test
        with:
          checkout: true
          environment: python
          command: |
            pip install -r requirements.txt
            pytest app/test_android.py --capture=no -x
        cwd: app/python/pytest

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




&lt;p&gt;In this routine, it locates the app among the uploaded apps with the package name &lt;code&gt;com.dogu.sample&lt;/code&gt; and selects the one with the highest build version to execute.&lt;/p&gt;

&lt;p&gt;Furthermore, you can also see which app is the latest one in the project app list from the console!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dCz2YrDf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.dogutech.io/content/images/2023/09/uploaded-app-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dCz2YrDf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.dogutech.io/content/images/2023/09/uploaded-app-1.png" alt="Dogu v2.0.0: Run routine with latest app, License policy and admin settings for self-hosted, Browser video recording, and more" width="800" height="349"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  ✨ License policy and configuration for self-hosted
&lt;/h2&gt;

&lt;p&gt;The reason for the change in Dogu's major version is as follows. Our team members engaged in extensive discussions and deliberations regarding the Dogu's direction and business model, considering various valuable insights. Initially, decisions were made after converging on several key points.&lt;/p&gt;

&lt;p&gt;Firstly, in the self-hosted environment, there will be differences in functionality between the Community Edition and the Professional Edition. These differences will encompass the number of devices and runners available, routine CI integration, and additional support features such as technical support.&lt;/p&gt;

&lt;p&gt;For detailed information about the Professional Edition or inquiries regarding experiencing it, please visit the Pricing page below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dogutech.io/pricing?type=self-hosted"&gt;Dogu Pricing&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As a result of this, we have introduced the concept of a root user in the self-hosted environment. When you first run in the self-hosted mode, you can now sign up with a root account and configure license.&lt;/p&gt;

&lt;p&gt;In self-hosted Dogu, if you are a root user, you will find the "Admin settings" menu in the top header - Profile menu. Clicking on that menu will take you to a page where you can set up your license.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MCfMcAS8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.dogutech.io/content/images/2023/09/Screenshot-2023-09-18-at-5.06.47-PM.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MCfMcAS8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.dogutech.io/content/images/2023/09/Screenshot-2023-09-18-at-5.06.47-PM.png" alt="Dogu v2.0.0: Run routine with latest app, License policy and admin settings for self-hosted, Browser video recording, and more" width="800" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are a few things to set up to register your license in a self-hosted environment, visit &lt;a href="https://docs.dogutech.io/get-started/installation/license?ref=blog.dogutech.io"&gt;our guide&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;In the cloud environment, it appears that there will be different pricing plans prepared in a different way. We will provide further guidance on this through future updates.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  ✨ Browser screen records in routine result report
&lt;/h2&gt;

&lt;p&gt;One of the most helpful things you can find in your test results report is a video recording of your test screen. If a test fails, you can intuitively see why it failed. This feature was previously only available for mobile apps and games, but this update brings it to the web!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TdNEeDto--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.dogutech.io/content/images/2023/09/Screenshot-2023-09-18-at-4.23.44-PM.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TdNEeDto--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.dogutech.io/content/images/2023/09/Screenshot-2023-09-18-at-4.23.44-PM.png" alt="Dogu v2.0.0: Run routine with latest app, License policy and admin settings for self-hosted, Browser video recording, and more" width="800" height="680"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Browser records in routine result report&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  ✨ Host device with runner
&lt;/h2&gt;

&lt;p&gt;In Dogu, a host machine can also be used as a device. In this case, the host device is special and can have multiple Runners. You'll use these Runners when you run web tests on the host device, and you'll use one Runner for one browser.&lt;/p&gt;

&lt;p&gt;Runners can now be changed in the &lt;code&gt;Runner settings&lt;/code&gt; menu. Just enter how many browser runners you want to use!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Guz_lbA_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.dogutech.io/content/images/2023/09/Screenshot-2023-09-18-at-6.11.39-PM.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Guz_lbA_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.dogutech.io/content/images/2023/09/Screenshot-2023-09-18-at-6.11.39-PM.png" alt="Dogu v2.0.0: Run routine with latest app, License policy and admin settings for self-hosted, Browser video recording, and more" width="800" height="364"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Host device with runners&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Now, when you run the web test using the host device, the usage state of each runner will change. If you run the test on the Chrome, Safari, and Firefox browsers at the same time, runners 1 through 3 will change to the &lt;code&gt;running&lt;/code&gt; state.&lt;/p&gt;
&lt;h2&gt;
  
  
  Wrapped up
&lt;/h2&gt;

&lt;p&gt;In this update, we've improved usability by using package names instead of app versions in routines, provided browser recordings in web test results reports for richer results. Furthermore, we bumped up the major version to self-hosted with licensing. We're offering a free trial on self-hosted, so give it a try!&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://dogutech.io/" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://res.cloudinary.com/practicaldev/image/fetch/s--L27UhPEG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dogutech.io/resources/images/meta.png" height="420" class="m-0" width="800"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://dogutech.io/" rel="noopener noreferrer" class="c-link"&gt;
          Dogu Technologies - Seamless Test Automation Platform
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          Revolutionize your testing workflow with our game and application test automation platform. Execute automated tests using Dogu and optimize your software quality assurance.
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
        dogutech.io
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;If you have any questions or need assistance, feel free to reach out via email at &lt;a href="//mailto:contact@dogutech.io?ref=blog.dogutech.io"&gt;contact@dogutech.io&lt;/a&gt;, or consider joining our &lt;a href="https://join.slack.com/t/dogu-community/shared_invite/zt-1zespy16o-TgYIureSBI6ma6o_nG3gVw?ref=blog.dogutech.io"&gt;Dogu Slack Community&lt;/a&gt; where you'll find a warm welcome and support. We're always here to help!&lt;/p&gt;

&lt;p&gt;Happy Testing!&lt;/p&gt;

</description>
      <category>testing</category>
      <category>opensource</category>
      <category>automation</category>
      <category>testops</category>
    </item>
    <item>
      <title>Dogu v1.11.0: Cross-browsing, Mobile app and Game test with Routine, Routine GUI editor, Dogu Studio live user session, and more</title>
      <dc:creator>Daniel Ahn</dc:creator>
      <pubDate>Sat, 09 Sep 2023 11:03:14 +0000</pubDate>
      <link>https://dev.to/dogutech/dogu-v1110-cross-browsing-mobile-app-and-game-test-with-routine-routine-gui-editor-dogu-studio-live-user-session-and-more-2no9</link>
      <guid>https://dev.to/dogutech/dogu-v1110-cross-browsing-mobile-app-and-game-test-with-routine-routine-gui-editor-dogu-studio-live-user-session-and-more-2no9</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mCcRGXI6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.dogutech.io/content/images/2023/09/Frame-31.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mCcRGXI6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.dogutech.io/content/images/2023/09/Frame-31.png" alt="Dogu v1.11.0: Cross-browsing, Mobile app and Game test with Routine, Routine GUI editor, Dogu Studio live user session, and more." width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The test automation platform Dogu has been updated to version 1.11.0!🚀 In this update, the routine feature, which is one of the powerful test automation functionalities that allows you to define and seamlessly integrate your automated testing workflows with CI/CD, has received significant enhancements.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://dogutech.io/" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://res.cloudinary.com/practicaldev/image/fetch/s--L27UhPEG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dogutech.io/resources/images/meta.png" height="420" class="m-0" width="800"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://dogutech.io/" rel="noopener noreferrer" class="c-link"&gt;
          Dogu Technologies - Seamless Test Automation Platform
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          Revolutionize your testing workflow with our game and application test automation platform. Execute automated tests using Dogu and optimize your software quality assurance.
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
        dogutech.io
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Routine is a core feature in Dogu that assist with test automation. Let's take a closer look at how it has been updated!😎&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨ Major updates in Routine
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Support cross-browsing automation
&lt;/h3&gt;

&lt;p&gt;When creating web-based products, it quickly becomes apparent that focusing on just one browser is not enough. Because of this, web developers often find themselves testing and developing across multiple browsers, or QA teams need to conduct tests in various browsers as well, which can negatively impact product productivity.&lt;/p&gt;

&lt;p&gt;To address this challenge, Dogu has updated its routines to allow you to perform tests simultaneously across multiple browsers using a single web testing script. Dogu initially supports &lt;strong&gt;Chrome, Safari (macOS), Firefox, and Edge browsers&lt;/strong&gt;. Worried that you don't have all the required browsers installed for testing? Don't fret! In Dogu, you can easily manage and run tests across these browsers without any hassle.&lt;/p&gt;

&lt;p&gt;Dogu supports web testing through &lt;strong&gt;Selenium&lt;/strong&gt;. You can write test scripts using Jest or Pytest and then review detailed results in the routine report.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4I8IcubD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.dogutech.io/content/images/2023/09/Frame-32--1-.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4I8IcubD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.dogutech.io/content/images/2023/09/Frame-32--1-.png" alt="Dogu v1.11.0: Cross-browsing, Mobile app and Game test with Routine, Routine GUI editor, Dogu Studio live user session, and more." width="800" height="751"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;A routine with 4 parallel web test jobs&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;* Mobile browsers will be supported in the next update.&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Support mobile app test automation
&lt;/h3&gt;

&lt;p&gt;Mobile apps are also a target for Dogu's automation testing. Script-based app test automation typically requires knowledge of Appium(ie. capabilieties...), but Dogu has reduced the learning curve by simplifying the automation process, making it easy to use.&lt;/p&gt;

&lt;p&gt;Dogu allows you to perform &lt;strong&gt;Android&lt;/strong&gt; and &lt;strong&gt;iOS&lt;/strong&gt; app testing through &lt;strong&gt;Appium (WebdriverIO)&lt;/strong&gt; within Routine. In the example test scripts, testing is performed using XPath for element identification. And in Dogu Studio, you can easily find XPath for elements within the app using the &lt;a href="https://docs.dogutech.io/device-farm/device/streaming-and-remote-control/ui-inspector?ref=blog.dogutech.io"&gt;UI Inspector&lt;/a&gt;. You can create mobile app tests using Pytest or Jest and then review detailed test reports, including logs, CPU and memory usage and more, on a test-by-test basis, all available in the routine results page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--o7CuDyeI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dzxe08blurkiugpz267o.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--o7CuDyeI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dzxe08blurkiugpz267o.gif" alt="App test automation" width="600" height="320"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Running mobile app testing using Appium&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Support game test automation
&lt;/h3&gt;

&lt;p&gt;One of Dogu's strengths is its ability to automate game testing. Through &lt;strong&gt;Gamium&lt;/strong&gt; , you can retrieve XPaths for elements within the game and write scripts using popular testing frameworks like Jest or Pytest. Furthermore, they can display test-specific statuses and results in routine reports including logs, CPU and memory usage, in-game FPS and more!&lt;/p&gt;

&lt;p&gt;You can obtain the XPath for game elements either by using the UI Inspector feature in Dogu Studio or through GamiumEditor in the Unity Engine. For more details, please refer to the &lt;a href="https://docs.dogutech.io/device-farm/device/streaming-and-remote-control/ui-inspector?ref=blog.dogutech.io"&gt;UI Inspector&lt;/a&gt; and &lt;a href="https://gamium.dogutech.io/docs/engine/unity/query-objects?ref=blog.dogutech.io"&gt;GamiumEditor&lt;/a&gt; documentation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aJWfPAAL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ugnaurgjva1ow7d9s0ww.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aJWfPAAL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ugnaurgjva1ow7d9s0ww.gif" alt="Game test automation" width="600" height="257"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Running game testing using Gamium&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  GUI Editor and Tutorial
&lt;/h3&gt;

&lt;p&gt;With the routine update, we've also enhanced the GUI editor to improve UX. In the previous v1.10.0 update, we introduced the project template feature. In this update, the features available in the routine GUI editor will vary depending on the template you choose, and the tutorials have been updated to align with the selected template.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--N_2AsE2A--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.dogutech.io/content/images/2023/09/Group-151--2-.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--N_2AsE2A--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.dogutech.io/content/images/2023/09/Group-151--2-.png" alt="Dogu v1.11.0: Cross-browsing, Mobile app and Game test with Routine, Routine GUI editor, Dogu Studio live user session, and more." width="800" height="662"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;App and Game template(top) and Web template(bottom)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The updated GUI editor has been improved to make it easy to create basic test automation routines even if you're not familiar with YAML syntax.&lt;/p&gt;

&lt;p&gt;Additionally, tutorials are provided for routines. To create a routine, you'll go through steps like Git integration and routine scripting before you can try running the routine. You can always revisit the tutorials on the routine page for guidance. With the help of these tutorials, you can implement test automation in Dogu in just a few minutes, alongside the provided examples!&lt;/p&gt;

&lt;p&gt;Through routines, you can perform cross-browser testing and cross-platform testing simultaneously across multiple browsers or devices. Furthermore, routines exhibit their full potential when integrated with CI/CD tools. For detailed examples, please refer to the &lt;a href="https://docs.dogutech.io/routine/routines/examples"&gt;guide documentation&lt;/a&gt;!&lt;/p&gt;
&lt;h2&gt;
  
  
  ✨ Dogu Studio live user session
&lt;/h2&gt;

&lt;p&gt;Dogu includes the Dogu Studio feature, which allows you to stream and remotely control devices registered in the device farm. Now, a convenience feature has been added to Dogu Studio, enabling you to see which members are currently streaming the device.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mT7PP5NK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.dogutech.io/content/images/2023/09/Screenshot-2023-09-09-at-2.30.07-PM.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mT7PP5NK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.dogutech.io/content/images/2023/09/Screenshot-2023-09-09-at-2.30.07-PM.png" alt="Dogu v1.11.0: Cross-browsing, Mobile app and Game test with Routine, Routine GUI editor, Dogu Studio live user session, and more." width="800" height="522"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Dogu Studio with members&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Wrapped up
&lt;/h2&gt;

&lt;p&gt;With this latest update, the routine feature, which allows you to perform test automation in practice, has been significantly enhanced, resulting in a substantial increase in Dogu's usability. Creating test routines with Dogu and integrating them with CI/CD to execute routines will undoubtedly boost both product productivity and quality.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://dogutech.io/" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://res.cloudinary.com/practicaldev/image/fetch/s--L27UhPEG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dogutech.io/resources/images/meta.png" height="420" class="m-0" width="800"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://dogutech.io/" rel="noopener noreferrer" class="c-link"&gt;
          Dogu Technologies - Seamless Test Automation Platform
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          Revolutionize your testing workflow with our game and application test automation platform. Execute automated tests using Dogu and optimize your software quality assurance.
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
        dogutech.io
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;If you have any questions or need assistance, feel free to reach out via email at &lt;a href="//mailto:contact@dogutech.io?ref=blog.dogutech.io"&gt;contact@dogutech.io&lt;/a&gt;, or consider joining our &lt;a href="https://join.slack.com/t/dogu-community/shared_invite/zt-1zespy16o-TgYIureSBI6ma6o_nG3gVw?ref=blog.dogutech.io"&gt;Dogu Slack Community&lt;/a&gt; where you'll find a warm welcome and support. We're always here to help!&lt;/p&gt;

&lt;p&gt;Happy Testing!&lt;/p&gt;

</description>
      <category>update</category>
      <category>testing</category>
      <category>opensource</category>
      <category>automation</category>
    </item>
    <item>
      <title>Dogu v1.10.0: Git integration with Bitbucket, CI integration with Jenkins plugin and GitHub Action, and more</title>
      <dc:creator>Daniel Ahn</dc:creator>
      <pubDate>Sat, 02 Sep 2023 08:53:41 +0000</pubDate>
      <link>https://dev.to/dogutech/dogu-v1100-git-integration-with-bitbucket-ci-integration-with-jenkins-plugin-and-github-action-and-more-i41</link>
      <guid>https://dev.to/dogutech/dogu-v1100-git-integration-with-bitbucket-ci-integration-with-jenkins-plugin-and-github-action-and-more-i41</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dQvMbf5_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.dogutech.io/content/images/2023/09/Frame-29--1-.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dQvMbf5_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.dogutech.io/content/images/2023/09/Frame-29--1-.png" alt="Dogu v1.10.0: Git integration with Bitbucket, CI integration with Jenkins plugin and GitHub Action, and more" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dogu has been updated to v1.10.0! 🚀 We're continuously sprinting ahead for efficient test automation.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/dogu-team"&gt;
        dogu-team
      &lt;/a&gt; / &lt;a href="https://github.com/dogu-team/dogu"&gt;
        dogu
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      The Unified Test Automation Platform
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;
&lt;a rel="noopener noreferrer" href="https://github.com/dogu-team/dogu.github/resources/logo.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--x6_uzgD7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/dogu-team/dogu.github/resources/logo.png" width="128px" height="128px" title="Dogu_Logo"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Dogu - Seamless Unified  Test Automation Platform
&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://github.com/dogu-team/dogu/actions/workflows/ci-e2e.yml"&gt;
    &lt;img src="https://github.com/dogu-team/dogu/actions/workflows/ci-e2e.yml/badge.svg" alt="GitHub Actions status"&gt;
  &lt;/a&gt;
  &lt;a href="https://github.com/dogu-team/dogu/releases" alt="Release"&gt;
    &lt;img alt="GitHub tag (latest SemVer pre-release)" src="https://camo.githubusercontent.com/cce989ace610a2914cf56e2ab7780f0a307a98e131ef934cb09a1f48a16976d0/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f7461672f646f67752d7465616d2f646f67753f6c6162656c3d72656c65617365"&gt;
  &lt;/a&gt;
  &lt;a href="https://hub.docker.com/r/dogutechio/dogu/tags" alt="Download" rel="nofollow"&gt;
    &lt;img alt="Docker Pulls" src="https://camo.githubusercontent.com/aec8771ff5d6c733c640151079385c4d0e8c0c464b616986901aef12490ba683/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f646f677574656368696f2f646f67753f6c6162656c3d646f776e6c6f616473"&gt;
  &lt;/a&gt;
  &lt;/p&gt;
&lt;div&gt;
    &lt;a href="https://join.slack.com/t/dogu-community/shared_invite/zt-1zespy16o-TgYIureSBI6ma6o_nG3gVw" rel="nofollow"&gt;
      &lt;img src="https://camo.githubusercontent.com/870d2945e15dde83583f64ea1f3f4471702e45bf30fa884412da74cb7731ae42/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f536c61636b2d3441313534423f7374796c653d666f722d7468652d6261646765266c6f676f3d736c61636b266c6f676f436f6c6f723d7768697465" alt="Slack"&gt;
    &lt;/a&gt;
  &lt;a href="https://blog.dogutech.io" rel="nofollow"&gt;
    &lt;img src="https://camo.githubusercontent.com/e1f40ed4a3597da5444879f0291437e1db70192c191a27bbc0202b4c759fbd93/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f626c6f672d3030373339363f7374796c653d666f722d7468652d6261646765266c6f676f3d67686f7374266c6f676f436f6c6f723d7768697465" alt="Blog"&gt;
  &lt;/a&gt;
    &lt;a href="https://www.linkedin.com/company/dogu-technologies" rel="nofollow"&gt;
      &lt;img src="https://camo.githubusercontent.com/a80d00f23720d0bc9f55481cfcd77ab79e141606829cf16ec43f8cacc7741e46/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c696e6b6564496e2d3030373742353f7374796c653d666f722d7468652d6261646765266c6f676f3d6c696e6b6564696e266c6f676f436f6c6f723d7768697465" alt="LinkedIn"&gt;
    &lt;/a&gt;
    &lt;a href="https://twitter.com/dogutechio" rel="nofollow"&gt;
      &lt;img src="https://camo.githubusercontent.com/5d03c86f6a75f7cbe80d135d9162fbf6dc46a31253cf30a8e9bb8279b4d574d3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f547769747465722d3144413146323f7374796c653d666f722d7468652d6261646765266c6f676f3d74776974746572266c6f676f436f6c6f723d7768697465" alt="Twitter"&gt;
    &lt;/a&gt;
  &lt;/div&gt;
&lt;h1&gt;
What's Dogu?&lt;/h1&gt;
&lt;p&gt;Dogu is a seamless unified test automation platform for web, mobile and game application. You can integrate various tools such as Appium, Selenium and Playwright that you have previously used with Dogu, allowing you to perform parallel processing and check test results more easy. Experience more efficient test automation with Dogu.&lt;/p&gt;
&lt;h1&gt;
Architecture&lt;/h1&gt;
&lt;p&gt;Dogu is a test automation platform that provides a seamless unified experience for web, mobile and game application. Dogu is composed of the following components.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/dogu-team/dogu.github/resources/architecture.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fZhopPM2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/dogu-team/dogu.github/resources/architecture.png" width="100%"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
Dogu Features&lt;/h1&gt;
&lt;h2&gt;
Device Farm&lt;/h2&gt;
&lt;p&gt;Build a systematic device farm with Windows, MacOS, Android, and iOS devices.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/dogu-team/dogu.github/resources/device-farm-dashboard.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oa3iKHFr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/dogu-team/dogu.github/resources/device-farm-dashboard.png" width="100%"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
Device Studio&lt;/h2&gt;
&lt;p&gt;Control devices remotely with Device Studio.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/dogu-team/dogu.github/resources/devicestudio.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UBa6PpUZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/dogu-team/dogu.github/resources/devicestudio.png" width="100%"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
Inspecting UI&lt;/h3&gt;
&lt;p&gt;Inspect UI with Device Studio.&lt;/p&gt;
&lt;div&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/dogu-team/dogu.github/resources/android-inspecting.gif"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--E8oGOn7t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://github.com/dogu-team/dogu.github/resources/android-inspecting.gif" width="32%"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/dogu-team/dogu.github/resources/ios-inspecting.gif"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Y013Qy8a--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://github.com/dogu-team/dogu.github/resources/ios-inspecting.gif" width="32%"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/dogu-team/dogu.github/resources/gamium-inspecting.gif"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Th7xaT1i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://github.com/dogu-team/dogu.github/resources/gamium-inspecting.gif" width="32%"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;h2&gt;
Test CI&lt;/h2&gt;
&lt;p&gt;Run test parallelly and periodically with routine.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/dogu-team/dogu.github/resources/routine-livestreaming.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--j3kqibpU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/dogu-team/dogu.github/resources/routine-livestreaming.png" width="100%"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
Test Report&lt;/h2&gt;
&lt;p&gt;Visualize test unit by integrating test unit framework with report.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/dogu-team/dogu.github/resources/reporting-testing-profiling.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fFik66sO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/dogu-team/dogu.github/resources/reporting-testing-profiling.png" width="100%"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
Start Dogu&lt;/h1&gt;
&lt;h3&gt;
With Self-Hosted&lt;/h3&gt;
&lt;p&gt;Use Dogu on a self-hosted. See &lt;a href="https://docs.dogutech.io/get-started/installation/self-hosted/installation" rel="nofollow"&gt;guide setting&lt;/a&gt;…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/dogu-team/dogu"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;In this latest update, numerous features have been added and improved, including Git repository integration, Jenkins and GitHub integration, and much more. Let's dive into the details!&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨ Integration with Bitbucket
&lt;/h2&gt;

&lt;p&gt;In Dogu, the Routine feature is one of the powerful capabilities for automating complex tests or performing tests in integration with CI. Routine takes the user's Git repository and allows for the execution of specific test scripts.&lt;/p&gt;

&lt;p&gt;Until now, Dogu has supported integration with GitHub and GitLab repositories. Upon receiving user feedback and requests, we have decided to extend our support to integrate with Bitbucket as well. (Thank you for your all feedbacks! 😄)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--v53Tws45--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.dogutech.io/content/images/2023/09/Screenshot-2023-09-02-at-4.09.39-PM.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--v53Tws45--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.dogutech.io/content/images/2023/09/Screenshot-2023-09-02-at-4.09.39-PM.png" alt="Dogu v1.10.0: Git integration with Bitbucket, CI integration with Jenkins plugin and GitHub Action, and more" width="800" height="478"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Bitbucket repository integrated!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Following the integration with Bitbucket, when creating or modifying routines in GUI editing mode, you'll now be able to fetch test scripts from the linked repository during the step where you execute tests!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--x0uso9-E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.dogutech.io/content/images/2023/09/Screenshot-2023-09-02-at-4.12.27-PM.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--x0uso9-E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.dogutech.io/content/images/2023/09/Screenshot-2023-09-02-at-4.12.27-PM.png" alt="Dogu v1.10.0: Git integration with Bitbucket, CI integration with Jenkins plugin and GitHub Action, and more" width="800" height="447"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Options for test scripts&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;To integrate with Bitbucket, you'll need either a Repository access token or a Project access token provided by Bitbucket. For detailed information, please refer to our documentation at &lt;a href="https://docs.dogutech.io/management/project/git-integration/bitbucket?ref=blog.dogutech.io"&gt;Bitbucket Integration&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  ✨ Jenkins plugin and GitHub Action
&lt;/h2&gt;

&lt;p&gt;As mentioned earlier, Dogu Routine is designed to seamlessly integrate routines with CI for execution. Dogu provides functionality to run routines through Jenkins plugin and GitHub Actions!&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/jenkinsci"&gt;
        jenkinsci
      &lt;/a&gt; / &lt;a href="https://github.com/jenkinsci/dogu-integration-plugin"&gt;
        dogu-integration-plugin
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
Dogu Integration Plugin&lt;/h1&gt;
&lt;h2&gt;
Description&lt;/h2&gt;
&lt;p&gt;Dogu is an cross E2E test automation platform for web, mobile and game application. You can integrate various tools such as Appium, Selenium and Playwright that you have previously used with Dogu, allowing you to perform parallel processing and check test results more easy. Experience more efficient test automation with Dogu.&lt;/p&gt;
&lt;p&gt;This plugin helps to integrate jenkins with &lt;a href="https://github.com/dogu-team/dogu"&gt;Dogu&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
Features&lt;/h2&gt;
&lt;h3&gt;
Dogu Credential&lt;/h3&gt;
&lt;p&gt;You can add Dogu access token to Jenkins credential store. &lt;a href="https://docs.dogutech.io/management/organization/settings#access-token" rel="nofollow"&gt;Dogu Organization Token&lt;/a&gt; and &lt;a href="https://docs.dogutech.io/management/project/settings#access-token" rel="nofollow"&gt;Dogu Project Token&lt;/a&gt; are supported.&lt;/p&gt;
&lt;h3&gt;
Dogu Run Routine Build Step&lt;/h3&gt;
&lt;p&gt;You can run a routine in Jenkins. You can specify the Dogu project and routine by ID.&lt;/p&gt;
&lt;h2&gt;
How it works&lt;/h2&gt;
&lt;p&gt;When you add a Dogu Credential, it will be added to the Jenkins credential store. The Dogu Run Routine Build Step will use the Dogu Credential to connect to Dogu and run the routine.&lt;/p&gt;
&lt;h2&gt;
Development&lt;/h2&gt;
&lt;h3&gt;
Getting Started&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;mvn hpi:run&lt;/li&gt;
&lt;/ol&gt;…&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/jenkinsci/dogu-integration-plugin"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;



&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/dogu-team"&gt;
        dogu-team
      &lt;/a&gt; / &lt;a href="https://github.com/dogu-team/dogu-github-action"&gt;
        dogu-github-action
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
Dogu Github Action&lt;/h1&gt;
&lt;p&gt;Integrate github action with Dogu&lt;/p&gt;
&lt;h1&gt;
Common Inputs&lt;/h1&gt;
&lt;h3&gt;
&lt;code&gt;template&lt;/code&gt;
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;run_routine&lt;/li&gt;
&lt;li&gt;upload_application&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
&lt;code&gt;api-url&lt;/code&gt; (optional)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: &lt;code&gt;https://api.dogutech.io&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;
&lt;code&gt;timeout&lt;/code&gt; (optional)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: 60 * 60 * 1000 (ms)&lt;/p&gt;
&lt;h1&gt;
Templates&lt;/h1&gt;
&lt;h3&gt;
&lt;code&gt;run_routine&lt;/code&gt;
&lt;/h3&gt;
&lt;h4&gt;
Inputs&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;project-id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;routine-id&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
&lt;code&gt;upload_application&lt;/code&gt;
&lt;/h3&gt;
&lt;h4&gt;
Inputs&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;project-id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;file-path&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;
Env&lt;/h1&gt;
&lt;h3&gt;
&lt;code&gt;DOGU_TOKEN&lt;/code&gt;
&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Organization Token&lt;/code&gt;, &lt;code&gt;Project Token&lt;/code&gt;, &lt;code&gt;User Token&lt;/code&gt; can be used.&lt;/p&gt;
&lt;h1&gt;
Example usage&lt;/h1&gt;
&lt;div class="highlight highlight-source-yaml notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;- &lt;span class="pl-ent"&gt;name&lt;/span&gt;: &lt;span class="pl-s"&gt;Upload Application&lt;/span&gt;
  &lt;span class="pl-ent"&gt;uses&lt;/span&gt;: &lt;span class="pl-s"&gt;dogu-team/dogu-github-action@v1.0&lt;/span&gt;
  &lt;span class="pl-ent"&gt;with&lt;/span&gt;:
    &lt;span class="pl-ent"&gt;template&lt;/span&gt;: &lt;span class="pl-s"&gt;upload_application&lt;/span&gt;
    &lt;span class="pl-ent"&gt;project-id&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;a5792d9b-a8e8-4ab8-b790-3a503c5a8789&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt;
    &lt;span class="pl-ent"&gt;file-path&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;/usr/project/build/app.apk&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt;
  &lt;span class="pl-ent"&gt;env&lt;/span&gt;:
    &lt;span class="pl-ent"&gt;DOGU_TOKEN&lt;/span&gt;: &lt;span class="pl-s"&gt;${{ secrets.DOGU_TOKEN }}&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-source-yaml notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;- &lt;span class="pl-ent"&gt;name&lt;/span&gt;: &lt;span class="pl-s"&gt;Run Routine&lt;/span&gt;
  &lt;span class="pl-ent"&gt;uses&lt;/span&gt;: &lt;span class="pl-s"&gt;dogu-team/dogu-github-action@v1.0&lt;/span&gt;
  &lt;span class="pl-ent"&gt;with&lt;/span&gt;:
    &lt;span class="pl-ent"&gt;template&lt;/span&gt;: &lt;span class="pl-s"&gt;run_routine&lt;/span&gt;
    &lt;span class="pl-ent"&gt;project-id&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;a5792d9b-a8e8-4ab8-b790-3a503c5a8789&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt;
    &lt;span class="pl-ent"&gt;routine-id&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;c3218f5f-02bf-43a1-9eb3-acd2753e7567&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt;
  &lt;span class="pl-ent"&gt;env&lt;/span&gt;:
    &lt;span class="pl-ent"&gt;DOGU_TOKEN&lt;/span&gt;: &lt;span class="pl-s"&gt;${{ secrets.DOGU_TOKEN }}&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/dogu-team/dogu-github-action"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;To test mobile apps or game products, you need to upload the app you want to test to your Dogu project. This is because routines use the app on devices to execute tests. To do this as part of your CI process, you can perform the following actions using the Jenkins plugin and GitHub Action:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Upload the app to your Dogu project.&lt;/li&gt;
&lt;li&gt;Trigger the execution of the defined routine.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For details, please visit &lt;a href="https://docs.dogutech.io/integration/cicd/jenkins?ref=blog.dogutech.io"&gt;Jenkins plugin&lt;/a&gt; and &lt;a href="https://docs.dogutech.io/integration/cicd/github-action?ref=blog.dogutech.io"&gt;GitHub Action&lt;/a&gt; documentations!&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨ Project template for your products
&lt;/h2&gt;

&lt;p&gt;Dogu provides test automation capabilities for web(including mobile web), mobile apps, and games. As a result, there arose a need to offer different features or GUI editors based on the user's product type within a project. For instance, a user looking to test a web service might not require a menu to upload a mobile app.&lt;/p&gt;

&lt;p&gt;After our team members contributed various valuable insights, we decided to introduce the option to choose project templates when creating a project. From now on, you can focus only on the features you need when testing your own product.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5mub-U2E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.dogutech.io/content/images/2023/09/Screenshot-2023-09-02-at-4.39.26-PM.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5mub-U2E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.dogutech.io/content/images/2023/09/Screenshot-2023-09-02-at-4.39.26-PM.png" alt="Dogu v1.10.0: Git integration with Bitbucket, CI integration with Jenkins plugin and GitHub Action, and more" width="800" height="689"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Options for project template&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1nlPN15T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.dogutech.io/content/images/2023/09/Frame-30.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1nlPN15T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.dogutech.io/content/images/2023/09/Frame-30.png" alt="Dogu v1.10.0: Git integration with Bitbucket, CI integration with Jenkins plugin and GitHub Action, and more" width="634" height="484"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Web template sidebar menu vs App template sidebar menu&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Currently, we only offer a difference in the presence of the project app uploading feature. However, there are exciting changes on the horizon, including upcoming enhancements to the GUI editing functionality within routines, tailored test result reporting, and some alterations to features and the UI. We look forward to your anticipation of these upcoming developments :)&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapped up
&lt;/h2&gt;

&lt;p&gt;Alongside the Bitbucket integration feature, Dogu is actively developing functionalities and improvements based on user feedbacks gathered from the &lt;a href="https://join.slack.com/t/dogu-community/shared_invite/zt-1zespy16o-TgYIureSBI6ma6o_nG3gVw?ref=blog.dogutech.io"&gt;Dogu Slack Community&lt;/a&gt;. Once again, we extend our gratitude for everyone's valuable feedback! With the addition of the project template feature, Dogu has gained greater scalability, and in the future, you can expect differences in UI and functionality between templates. These newly added and updated features appear to be a significant step toward Dogu's goal of becoming an &lt;strong&gt;"efficient and user-friendly test automation platform."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you have any questions or need assistance, feel free to reach out via email at &lt;a href="//mailto:contact@dogutech.io?ref=blog.dogutech.io"&gt;contact@dogutech.io&lt;/a&gt;, or consider joining our &lt;a href="https://join.slack.com/t/dogu-community/shared_invite/zt-1zespy16o-TgYIureSBI6ma6o_nG3gVw?ref=blog.dogutech.io"&gt;Dogu Slack Community&lt;/a&gt; where you'll find a warm welcome and support. We're always here to help!&lt;/p&gt;

&lt;p&gt;Happy Testing!&lt;/p&gt;

</description>
      <category>update</category>
    </item>
    <item>
      <title>How Are E2E Tests Performed for Test Automation Product? - Dogu E2E Testing Implementation</title>
      <dc:creator>Daniel Ahn</dc:creator>
      <pubDate>Mon, 14 Aug 2023 08:08:26 +0000</pubDate>
      <link>https://dev.to/dogutech/how-are-e2e-tests-performed-for-test-automation-product-dogu-e2e-testing-implementation-jhm</link>
      <guid>https://dev.to/dogutech/how-are-e2e-tests-performed-for-test-automation-product-dogu-e2e-testing-implementation-jhm</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This post is translated to English from &lt;a href="https://blog.dogutech.io/dogu-e2e-testing-implementation-ko" rel="noopener noreferrer"&gt;original post&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.dogutech.io%2Fcontent%2Fimages%2F2023%2F08%2Fferenc-almasi-pW3TdRsH8yM-unsplash-1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.dogutech.io%2Fcontent%2Fimages%2F2023%2F08%2Fferenc-almasi-pW3TdRsH8yM-unsplash-1.jpg" alt="How Are E2E Tests Performed for Test Automation Product? - Dogu E2E Testing Implementation"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When Dogu was not yet an open-source product, we connected our office equipment to GitHub Runner and set it up to execute E2E tests whenever a commit was made, fetching the code from the Runner device. At that time, our test case count was relatively low. However, when we started open-sourcing Dogu, we temporarily paused the E2E tests as we detached the private GitHub Runner. After about a month and a half following the open-sourcing, we reconfigured the E2E tests, and we'd like to share that journey.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/dogu-team" rel="noopener noreferrer"&gt;
        dogu-team
      &lt;/a&gt; / &lt;a href="https://github.com/dogu-team/dogu" rel="noopener noreferrer"&gt;
        dogu
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Dogu is unified test automation platform for cross platform game and app
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;
&lt;a rel="noopener noreferrer" href="https://github.com/dogu-team/dogu.github/resources/logo.png"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fdogu-team%2Fdogu.github%2Fresources%2Flogo.png" width="128px" height="128px" title="Dogu_Logo"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Dogu - Seamless Unified  Test Automation Platform
&lt;/p&gt;

&lt;p&gt;
We are preparing for re-building project to open source
&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;What's Dogu?&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;Dogu is a seamless unified test automation platform for web, mobile and game application. You can integrate various tools such as Appium, Selenium and Playwright that you have previously used with Dogu, allowing you to perform parallel processing and check test results more easy. Experience more efficient test automation with Dogu.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Architecture&lt;/h1&gt;

&lt;/div&gt;

&lt;p&gt;Dogu is a test automation platform that provides a seamless unified experience for web, mobile and game application. Dogu is composed of the following components.&lt;/p&gt;

&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/dogu-team/dogu.github/resources/architecture.png"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fdogu-team%2Fdogu.github%2Fresources%2Farchitecture.png" width="100%"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Test CI Architecture&lt;/h3&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/dogu-team/dogu.github/resources/architecture-test-automation-flow.png"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fdogu-team%2Fdogu.github%2Fresources%2Farchitecture-test-automation-flow.png" width="100%"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Dogu Features&lt;/h1&gt;

&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Device Farm&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;Build a systematic device farm with Windows, MacOS, Android, and iOS devices.&lt;br&gt;
Real devices and emulators are supported.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/dogu-team/dogu.github/resources/device-farm-dashboard.png"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fdogu-team%2Fdogu.github%2Fresources%2Fdevice-farm-dashboard.png" width="100%"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Device Studio&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Control devices remotely in Device Studio.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/dogu-team/dogu.github/resources/devicestudio.png"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fdogu-team%2Fdogu.github%2Fresources%2Fdevicestudio.png" width="100%"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Inspecting UI&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;Inspect UI with Device Studio.&lt;/p&gt;
&lt;div&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/dogu-team/dogu.github/resources/android-inspecting.gif"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fdogu-team%2Fdogu.github%2Fresources%2Fandroid-inspecting.gif" width="32%"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/dogu-team/dogu.github/resources/ios-inspecting.gif"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fdogu-team%2Fdogu.github%2Fresources%2Fios-inspecting.gif" width="32%"&gt;&lt;/a&gt;  
  &lt;a rel="noopener noreferrer" href="https://github.com/dogu-team/dogu.github/resources/gamium-inspecting.gif"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fdogu-team%2Fdogu.github%2Fresources%2Fgamium-inspecting.gif" width="32%"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Test CI&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Run test parallelly and periodically with routine.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/dogu-team/dogu.github/resources/routine-livestreaming.png"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fdogu-team%2Fdogu.github%2Fresources%2Froutine-livestreaming.png" width="100%"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Test Report&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Visualize test unit by…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/dogu-team/dogu" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Previously, E2E testing for Dogu was lacking, but efforts were made to improve it after open-sourcing. Transitioned from using private GitHub Runner to utilizing Dogu for E2E testing. Set up the test environment connection for local testing. Leveraged Dogu routine functionality for simultaneous execution on multiple platforms. Employed &lt;a href="https://github.com/dogu-team/dogu-github-action?ref=blog.dogutech.io" rel="noopener noreferrer"&gt;dogu-github-action&lt;/a&gt; for automated E2E test integration. Enhanced efficiency and reduced developer workload through CI integration, leading to improved product quality.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing for Dogu
&lt;/h2&gt;

&lt;p&gt;Before open-sourcing, E2E testing covered a smaller portion compared to the product's features. (The Dogu team focused more on feature development initially..🥲) We decided to implement QA within the team before releasing, and during the approximately one and a half months when E2E was paused, release days felt like entering a battlefield. It was a war with testing, where we had to manually test many features, and we had three different platforms to test.&lt;/p&gt;

&lt;p&gt;"□□□ should be tested on a MaZc ARM64 device, and for △△△, please test it on a Windows x64 device."&lt;br&gt;&lt;br&gt;
"Who will handle testing on Mac x64?"&lt;br&gt;&lt;br&gt;
...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.dogutech.io%2Fcontent%2Fimages%2F2023%2F08%2FScreenshot-2023-08-09-at-6.54.17-PM-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.dogutech.io%2Fcontent%2Fimages%2F2023%2F08%2FScreenshot-2023-08-09-at-6.54.17-PM-1.png" alt="Test cases for Dogu(written with Korean)"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Such extensive and repetitive testing on release days, coupled with the need for quick fixes upon issue discovery, led to a constant busy cycle. Does this sound familiar? This is evidence of the need for automated E2E testing! 😎&lt;/p&gt;

&lt;p&gt;During this period, someone from outside posed the question, "How do you test Dogu?" At that time, Dogu lacked many features for testing. We reached a conclusion that we needed to use Dogu extensively ourselves to understand its helpful aspects and areas for improvement, leading us to the idea of "Using Dogu to perform Dogu E2E testing!" So, with minimal effort, we decided to reintegrate E2E into CI.&lt;/p&gt;
&lt;h2&gt;
  
  
  Challenges Faced...
&lt;/h2&gt;

&lt;p&gt;Although E2E testing seemed easily attainable, the process didn't always align with our expectations...😭 We encountered numerous minor issues, but a few significant challenges were particularly hindering.&lt;/p&gt;
&lt;h3&gt;
  
  
  Running Locally
&lt;/h3&gt;

&lt;p&gt;Our previous approach involved building Docker images after each commit, uploading them to a cloud repository, fetching them onto server equipment, and then executing them on E2E devices. However, due to cost and time concerns, we decided to revert to the pre-open-source approach of fetching E2E devices locally for testing, instead of relying on the cloud.&lt;/p&gt;

&lt;p&gt;However, post open-sourcing Dogu, &lt;a href="https://docs.github.com/en/actions/hosting-your-own-runners/managing-self-hosted-runners/about-self-hosted-runners?ref=blog.dogutech.io#self-hosted-runner-security" rel="noopener noreferrer"&gt;GitHub Docs&lt;/a&gt; recommended using private repositories, prompting us to remove most of our private GitHub Runners. To adhere to this guidance while testing Dogu through Dogu, we connected E2E devices to the internal test Dogu environment using Dogu itself. We tuned the Dogu Agent app used for connecting the test environment to the E2E device, enabling Dogu Agent execution for E2E on the local E2E device. This was necessary due to potential conflicts when two Dogu Agents recognize the device simultaneously during Dogu E2E tests involving device streaming functionality.&lt;/p&gt;
&lt;h3&gt;
  
  
  Controlling Multiple Clients Simultaneously
&lt;/h3&gt;

&lt;p&gt;Dogu uses a web browser and a desktop app for device farm setup. We needed to launch both clients on the E2E test device. While our automation testing features included remote testing and routines, they were insufficient for testing across multiple devices. Remote testing allowed users to test scripts on locally connected devices to Dogu before committing to the repository. However, testing multiple devices and running two clients simultaneously were not yet possible.&lt;/p&gt;

&lt;p&gt;Hence, we opted for a routine that allows concurrent execution across multiple devices and is scalable. Routines could be written in GUI or YAML, and actions provided by routines allowed for executing scripts across various environments (platforms). Dogu E2E tests were configured to run on macOS ARM64, macOS x64, and Windows devices within a single routine. We also added Git integration to Dogu to facilitate local execution.&lt;/p&gt;

&lt;p&gt;Below is an example YAML format used to test Dogu with the routine!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;e2e&lt;/span&gt;
&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;workflow_dispatch&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;e2e-macos&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;group&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;e2e-macos&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;env&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;printenv&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;fix diverged main&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;git reset --hard origin/main&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Checkout&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dogu-actions/checkout&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;clean&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;create dotEnv&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;~/.dogu_bin/env-generator gen-all e2e&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Run newbie&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;yarn newbie:cicd&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Run newbie:python&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;export PATH=/opt/homebrew/bin:/usr/local/Cellar/poetry/1.5.1/bin:$PATH &amp;amp;&amp;amp; yarn newbie:python&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build Projects&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;printenv &amp;amp;&amp;amp; yarn workspace dogu run build&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Run influx, pgsql, redis, nexus, turn-server&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;yarn workspace console-web-server run start:e2e-background&lt;/span&gt;
        &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;PATH&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/usr/local/bin:$PATH&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Newbie nm-space&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;yarn workspace dogu run newbie:nm-space&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build nm-space&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;cd nm-space &amp;amp;&amp;amp; yarn workspace nm-space run build&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Download, Build third-party&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;export PATH=/opt/homebrew/bin:/usr/local/Cellar/cmake/3.27.0/bin:/usr/local/go/bin:$PATH &amp;amp;&amp;amp; yarn third-party:download:build     &lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Run e2e&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;yarn workspace e2e run util:install-chromedriver &amp;amp;&amp;amp; yarn workspace e2e run start:ci&lt;/span&gt;

    &lt;span class="na"&gt;record&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;e2e-windows&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;group&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;e2e-windows&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Printenv&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;set&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Checkout&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dogu-actions/checkout&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;clean&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;create dotEnv&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;$HOME/.dogu_bin/env-generator gen-all e2e&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Run newbie&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;yarn newbie:cicd&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Run newbie:python&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;yarn newbie:python&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build Projects&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;set &amp;amp;&amp;amp; yarn workspace dogu run build&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Run influx, pgsql, redis, nexus, turn-server&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;yarn workspace console-web-server run start:e2e-background&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Newbie nm-space&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;yarn workspace dogu run newbie:nm-space&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build nm-space&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;cd nm-space &amp;amp;&amp;amp; yarn workspace nm-space run build&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Download, Build third-party&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;yarn third-party:download:build&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Run e2e&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;yarn workspace e2e run util:install-chromedriver &amp;amp;&amp;amp; yarn workspace e2e run start:ci&lt;/span&gt;
    &lt;span class="na"&gt;record&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Integration with CI
&lt;/h3&gt;

&lt;p&gt;Now we were prepared! Simply executing the Dogu routine after each commit was all it took. However, we needed to enable running the Dogu routine within GitHub Action. To achieve this, we created a GitHub Custom Action to run the Dogu routine in GitHub Action. This led to the creation of the &lt;a href="https://github.com/dogu-team/dogu-github-action?ref=blog.dogutech.io" rel="noopener noreferrer"&gt;dogu-github-action&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;While it currently doesn't retrieve logs or similar information from Dogu, it waits until the routine is finished. Once completed, it provides the routine result URL, and it meets minimal requirements for handling cancellations of routines or GitHub Actions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Writing Test Scripts
&lt;/h2&gt;

&lt;p&gt;Dogu E2E test scripts were written using our team's internally developed testing framework called &lt;code&gt;Dest&lt;/code&gt; and Selenium, Playwright. Dogu web uses Selenium, while Dogu Agent is a desktop app built with Electron, so we tried Playwright for scripting. (We plan to switch to Jest or Pytest as &lt;code&gt;Dest&lt;/code&gt; won't be further developed!)&lt;/p&gt;

&lt;p&gt;Existing E2E scripts were written based on previous specifications, covering around 30 test cases. We enhanced the scripts to cover more than 130 cases. Using unique or reliably identifiable attributes like &lt;code&gt;id&lt;/code&gt;, rather than relying solely on Full XPath, we designed the XPath for scripting to address changes in web UI or the addition of new elements.&lt;/p&gt;

&lt;p&gt;Now, many of Dogu's features are tested through E2E, with tests executed with each commit! This brings us more comfort during development. E2E tests can identify abnormal behavior resulting from code changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Happy Testing!
&lt;/h2&gt;

&lt;p&gt;Let's take a look at recent E2E test results. All tests passed except on macOS ARM64 device.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.dogutech.io%2Fcontent%2Fimages%2F2023%2F08%2FScreenshot-2023-08-09-at-10.36.24-PM-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.dogutech.io%2Fcontent%2Fimages%2F2023%2F08%2FScreenshot-2023-08-09-at-10.36.24-PM-1.png" alt="All of test cases passed on Macbook M1 device"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We need to investigate the cause of the failure on Mac mini device.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.dogutech.io%2Fcontent%2Fimages%2F2023%2F08%2FScreenshot-2023-08-09-at-10.40.01-PM-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.dogutech.io%2Fcontent%2Fimages%2F2023%2F08%2FScreenshot-2023-08-09-at-10.40.01-PM-1.png" alt="Failed test case and logs"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From the logs, it seems we couldn't find an element matching &lt;code&gt;//*access-id="add-host-form-name"&lt;/code&gt; XPath. This information is insufficient to determine the issue and actions performed. To address this, we recorded device operations during the routine using &lt;code&gt;record: true&lt;/code&gt;, allowing us to review the recorded video and gain insight into the exact actions taken.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.dogutech.io%2Fcontent%2Fimages%2F2023%2F08%2FScreenshot-2023-08-09-at-10.44.39-PM-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.dogutech.io%2Fcontent%2Fimages%2F2023%2F08%2FScreenshot-2023-08-09-at-10.44.39-PM-1.png" alt="Video in routine tests report"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This recording capability greatly facilitates debugging. Even if E2E tests fail, debugging time is significantly reduced, making it easier to identify and rectify issues.&lt;/p&gt;

&lt;h2&gt;
  
  
  In Conclusion...
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.dogutech.io%2Fcontent%2Fimages%2F2023%2F08%2FScreenshot-2023-08-16-at-9.11.36-PM.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.dogutech.io%2Fcontent%2Fimages%2F2023%2F08%2FScreenshot-2023-08-16-at-9.11.36-PM.png" alt="Dogu E2E Passing!"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, E2E tests are performed not just on release days but with every commit or PR, reducing the need for last-minute preparations on release days. With Dogu routines and test script writing, tasks that previously required manual repetition, from user registration to feature testing and testing across platforms, have become much easier!&lt;/p&gt;

&lt;p&gt;However, E2E testing still doesn't cover all cases, which is one of the downsides. While some functions like iOS streaming and remote testing are still manually performed, E2E now handles many of the previously repetitive tests (e.g., user registration, member addition, streaming, etc.), making development more streamlined.&lt;/p&gt;

&lt;p&gt;Are you still manually repeating tests? It might be worthwhile to explore setting up an automated testing environment to improve testing efficiency!&lt;/p&gt;

</description>
      <category>story</category>
      <category>testautomation</category>
    </item>
    <item>
      <title>Are you tired of connecting your android device every time? Then build your own DeviceFarm🏭.</title>
      <dc:creator>ByoungWook Park</dc:creator>
      <pubDate>Fri, 28 Jul 2023 06:46:38 +0000</pubDate>
      <link>https://dev.to/dogutech/are-you-tired-of-connecting-your-android-device-every-time-then-build-your-own-devicefarm-432o</link>
      <guid>https://dev.to/dogutech/are-you-tired-of-connecting-your-android-device-every-time-then-build-your-own-devicefarm-432o</guid>
      <description>&lt;p&gt;Are you developing a mobile app? If you're developing a mobile app, you're likely carrying an Android or iOS device and a USB cable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Journey to install the app
&lt;/h2&gt;

&lt;p&gt;To do Android testing, you will need a USB-C or USB-B cable compatible with your PC. And you need to set up USB Debugging on your Android device. And you need to connect your Android device to your PC. Now install the app with the adb install command.&lt;br&gt;
What if I want to connect another device? You will need to purchase a new cable for the device and repeat the above process.&lt;br&gt;
What if you change your seat? You should also carry your test device and cables with you.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExZGpnNWp2bjZ1czJybmdsdHVrZnNkZW9tbGY3MmswNXdobGJwNjJsZCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/K25PVRA032Ues/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExZGpnNWp2bjZ1czJybmdsdHVrZnNkZW9tbGY3MmswNXdobGJwNjJsZCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/K25PVRA032Ues/giphy.gif" width="460" height="276"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Set it up once and always leave it ready.
&lt;/h2&gt;

&lt;p&gt;The above USB connection is very cumbersome, but it is an unavoidable process to test the app before distributing it. You can't get rid of the above process, but what if you only do it at initial setup and make it ready?&lt;br&gt;
In this case, you can use Device Farm.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you use Cloud Device Farm
&lt;/h2&gt;

&lt;p&gt;Currently, there are many Cloud Device Farms(Browserstack, Lambdatest, Perfecto, Headspin, testsigma). You can use Cloud Device Farm like this. However, this Cloud Device Farm is not suitable for this case.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you do not want to expose your test app, there is a possibility that the app can be exposed if you install and test the app on the Cloud Device device.&lt;/li&gt;
&lt;li&gt;If you don't want to spend a lot of money on testing, Cloud Device Farm can be expensive.&lt;/li&gt;
&lt;li&gt;If you access the Cloud Device from a physically distant distance, there may be a latency in accessing the Cloud Device Farm and controlling the device.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Build your own Device Farm
&lt;/h2&gt;

&lt;p&gt;Building DeviceFarm on-premise can solve the above problems.&lt;br&gt;
Here's an open source project to build Device Farm on-premise. =&amp;gt; &lt;a href="https://github.com/dogu-team/dogu"&gt;Dogu&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All devices are yours, so you don't have to worry about leaking test apps.&lt;/li&gt;
&lt;li&gt;Building DeviceFarm via the Dogu Community version is free of charge.&lt;/li&gt;
&lt;li&gt;Selenium, Appium integration is possible. You can test anytime, anywhere through devices connected to the device farm you built.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>opensource</category>
      <category>testing</category>
      <category>automation</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Why should game testing be automated?</title>
      <dc:creator>ByoungWook Park</dc:creator>
      <pubDate>Thu, 18 May 2023 06:49:23 +0000</pubDate>
      <link>https://dev.to/dogutech/why-should-game-testing-be-automated-dfb</link>
      <guid>https://dev.to/dogutech/why-should-game-testing-be-automated-dfb</guid>
      <description>&lt;p&gt;I had aspirations of becoming a game server developer, but to my surprise, I was assigned to a understaffed game platform team at my first job. That was the reality. It was there that I learned how to make games compatible with Android and iOS, and how to deploy and manage them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Story
&lt;/h2&gt;

&lt;p&gt;At first, learning new tasks was exciting. However, managing and maintaining project code to accommodate various operating systems and monitoring performance proved to be challenging. Every time we added new features, I had to write separate code and perform tests for both Android and iOS. Moreover, ensuring device compatibility posed an even more complex problem. We had to measure FPS and memory usage on various devices under the same conditions. Even though the game gained some popularity, developers, including myself, had to manually measure FPS and memory usage. This process seemed to take hours to complete. We had to build and install for game profiling, repeatedly measure under the same settings. What was even more unfortunate was that most game projects were large in scale, resulting in a significant amount of time spent on building and installation.&lt;/p&gt;

&lt;p&gt;As time went on, I grew weary of this process. "Why am I the only one doing this task? Shouldn't the content developers be the ones measuring, considering they know what parts to measure and how?" I started to feel discontent and wondered about this. That's when a colleague, who was familiar with web and mobile development, introduced me to a tool called Appium. They suggested trying game test automation.&lt;/p&gt;

&lt;p&gt;I was unaware of the existence of Appium and Selenium. Previously, I only knew about macro tools like AutoHotkey. However, I discovered that Appium and Selenium provided the ability to query and interact with UI based on XPath. When I first encountered this idea, I realized it could be applied to games as well. Fortunately, the game project had its own UI system, and each UI element had a unique identifier (ID). So, we added a TCP socket server to the game, used a Node.js client to send packets, and implemented the ability to query UI, click, and drag. Additionally, we added the functionality to execute interpretable scripts at runtime.&lt;/p&gt;

&lt;h2&gt;
  
  
  Results
&lt;/h2&gt;

&lt;p&gt;The results were successful. The features we developed were suitable for mobile projects, allowing us to automatically perform multiple rounds of measurements for FPS, memory, and more on Android and iOS devices whenever new content was added. We no longer had to waste valuable time for developers and the quality assurance (QA) team. As a result, we could invest that saved time in other interesting tasks.&lt;/p&gt;

&lt;p&gt;However, there was still a sense of regret. The reports of this system were scattered across various places. They were distributed across tools like Jenkins and Kibana, requiring us to find the button to start the tests and check the results in different locations. Moreover, we needed diverse information, but Kibana only provided charts to some extent.&lt;/p&gt;

&lt;p&gt;Developing the automation system took a lot of time. While we completed core functionalities like game control, the need for reporting and device management arose, requiring additional development. However, there was a sense of dissatisfaction in proceeding. This automation system could only be applied to that specific project, making it difficult to apply to other projects. Furthermore, it couldn't solve problems that other game companies or projects might encounter. This led us to develop a solution that could be used across all companies.&lt;/p&gt;

&lt;p&gt;That's why we developed Gamium and Dogu solutions. Gamium provides the ability to control games with scripts and, when connected to the Dogu solution, enables reporting and device management in the browser without space constraints. We no longer have to search or roam around to find devices that are causing issues.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gamium
&lt;/h2&gt;

&lt;p&gt;We have released &lt;a href="https://github.com/dogu-team/gamium?ref=blog.dogutech.io"&gt;Gamium&lt;/a&gt; as an open-source tool. It supports various game engines and client languages, hoping to solve repetitive and tedious tasks quickly in many projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dogu Solution
&lt;/h2&gt;

&lt;p&gt;If you're satisfied with applying Gamium, give the &lt;a href="https://github.com/dogu-team/dogu"&gt;Dogu&lt;/a&gt; solution a try. Dogu solution allows you to remotely control devices within the organization, classify devices, and execute desired test scripts on specific devices. We are confident that this product can be of great help to projects.&lt;/p&gt;

</description>
      <category>gamium</category>
      <category>story</category>
      <category>development</category>
      <category>testautomation</category>
    </item>
  </channel>
</rss>
