diff --git a/ui_automator/test_reporter.py b/ui_automator/test_reporter.py
index 194b26c..eae676d 100644
--- a/ui_automator/test_reporter.py
+++ b/ui_automator/test_reporter.py
@@ -25,7 +25,7 @@
 import logging
 import os
 import time
-from typing import TypedDict, NotRequired
+from typing import NotRequired, TypedDict
 import unittest
 
 from absl.testing import xml_reporter
@@ -53,6 +53,7 @@
 
 class ReportInfo(TypedDict):
   """Type guard for summary of running unit tests."""
+
   gha_version: NotRequired[str | None]
   gms_core_version: NotRequired[str | None]
   hub_version: NotRequired[str | None]
@@ -315,8 +316,21 @@
     ])
 
     f = open(summary_file_path, 'w', encoding='utf-8')
+    data_indents = (
+        # Set indents to the maximum length of values in report info if any.
+        # Add 2 extra spaces to separate data and next header.
+        # If the value is less than default column indents, use the default.
+        max(max(map(len, report_info.values())) + 2, _SUMMARY_COL_INDENTS)
+        if report_info
+        else _SUMMARY_COL_INDENTS
+    )
     for row in rows:
-      f.writelines(element.ljust(_SUMMARY_COL_INDENTS) for element in row)
+      for i, element in enumerate(row):
+        if i % 2 == 0:
+          # Writes header.
+          f.write(element.ljust(_SUMMARY_COL_INDENTS))
+        else:
+          f.write(element.ljust(data_indents))
       f.write('\n')
 
     f.writelines(['\n', '\n'])
diff --git a/ui_automator/test_reporter_test.py b/ui_automator/test_reporter_test.py
index 3cc6678..fdfc214 100644
--- a/ui_automator/test_reporter_test.py
+++ b/ui_automator/test_reporter_test.py
@@ -210,7 +210,7 @@
             duration=test_reporter.duration_formatter(run_time),
             total_runs=3,
             total_successful_runs=2,
-            **fake_report_info,
+            report_info=fake_report_info,
         )
     )
     res_of_test_commission = ['FAIL', 'PASS', 'PASS']
diff --git a/ui_automator/ui_automator.py b/ui_automator/ui_automator.py
index 96801a9..8a3e7c2 100644
--- a/ui_automator/ui_automator.py
+++ b/ui_automator/ui_automator.py
@@ -81,6 +81,14 @@
     default=None,
     help=_REGRESSION_TESTS_FLAG_USAGE_GUIDE,
 )
+_DUT = flags.DEFINE_list(
+    name='dut',
+    default=None,
+    help=(
+        'Use --dut {model},{type},{protocol} to include this field in'
+        ' test report. e.g. `--dut X123123123,LIGHT,Matter`.'
+    ),
+)
 
 
 class RegTestSuiteType(enum.Enum):
@@ -398,6 +406,9 @@
           self._connected_device, 'com.google.android.gms'
       )
 
+    if _DUT.value:
+      temp_info['dut'] = f"<{', '.join(_DUT.value)}>"
+
     report_info: test_reporter.ReportInfo = {**temp_info}
 
     return report_info
diff --git a/ui_automator/ui_automator_test.py b/ui_automator/ui_automator_test.py
index 7706d74..02fb559 100644
--- a/ui_automator/ui_automator_test.py
+++ b/ui_automator/ui_automator_test.py
@@ -1013,7 +1013,7 @@
 
     report_info = self.ui_automator.get_report_info()
 
-    self.assertIsNotNone(report_info)
+    self.assertEqual(len(report_info), 2)
     self.assertEqual(report_info.get('gha_version'), '0.0.0')
     self.assertEqual(report_info.get('gms_core_version'), '0.0.1')
 
@@ -1060,6 +1060,21 @@
     )
     mock_open.assert_called_once()
 
+  @flagsaver.flagsaver((ui_automator._DUT, ['model', 'type', 'protocol']))
+  def test_get_report_info_includes_dut_value_from_flag_input(self):
+    report_info = self.ui_automator.get_report_info()
+
+    self.assertEqual(len(report_info), 1)
+    self.assertEqual(report_info.get('dut'), '<model, type, protocol>')
+
+  @flagsaver.flagsaver((ui_automator._DUT, None))
+  def test_get_report_info_returns_empty_dict_without_dut_flag_input(
+      self,
+  ):
+    report_info = self.ui_automator.get_report_info()
+
+    self.assertDictEqual(report_info, {})
+
 
 if __name__ == '__main__':
   unittest.main()
diff --git a/ui_automator/unit_test_utils.py b/ui_automator/unit_test_utils.py
index 7bde017..4989738 100644
--- a/ui_automator/unit_test_utils.py
+++ b/ui_automator/unit_test_utils.py
@@ -57,24 +57,36 @@
   ).isoformat()
 
 
-def make_summary(**kwargs) -> str:
+def make_summary(
+    test_date: str | None = None,
+    duration: str | None = None,
+    total_runs: int = 0,
+    total_successful_runs: int = 0,
+    report_info: dict[str, str] | None = None,
+) -> str:
   """Makes test summary produced by `test_reporter` for unit tests.
 
   Args:
-    **kwargs: Fields written in test summary.
+    test_date: Test time for running regression tests.
+    duration: The duration for running regression tests.
+    total_runs: The number of runs for regression tests.
+    total_successful_runs: The number of successful runs for regression tests.
+    report_info: Versions and device info displayed in generated txt report.
+      Versions includes GHA, GMSCore, hub and device firmware. Device info is in
+      <model, type, protocol> format, e.g. <X123123, LIGHT, Matter>.
 
   Returns:
     Test summary.
   """
-  dut = kwargs.get('dut', 'n/a')
-  gha = kwargs.get('gha_version', 'n/a')
-  test_date = kwargs.get('test_date', 'n/a')
-  gms_core = kwargs.get('gms_core_version', 'n/a')
-  duration = kwargs.get('duration', 0)
-  hub = kwargs.get('hub_version', 'n/a')
-  total_runs = kwargs.get('total_runs', 0)
-  device = kwargs.get('device_firmware', 'n/a')
-  total_successful_runs = kwargs.get('total_successful_runs', 0)
+  dut = report_info.get('dut', 'n/a') if report_info else 'n/a'
+  gha = report_info.get('gha_version', 'n/a') if report_info else 'n/a'
+  test_date = test_date or 'n/a'
+  duration = duration or 'n/a'
+  gms_core = (
+      report_info.get('gms_core_version', 'n/a') if report_info else 'n/a'
+  )
+  hub = report_info.get('hub_version', 'n/a') if report_info else 'n/a'
+  device = report_info.get('device_firmware', 'n/a') if report_info else 'n/a'
   success_rate = round(100.0 * float(total_successful_runs) / float(total_runs))
   rows: list[list[str]] = []
   rows.append(['Summary', '', 'Version Info', ''])
@@ -87,8 +99,17 @@
       f'{success_rate}%({total_successful_runs}/{total_runs})',
   ])
   summary = []
+  data_indents = (
+      max(max(map(len, report_info.values())) + 2, 25) if report_info else 25
+  )
   for row in rows:
-    summary.append(''.join(element.ljust(25) for element in row))
+    for i, element in enumerate(row):
+      if i % 2 == 0:
+        # Writes header.
+        summary.append(element.ljust(25))
+      else:
+        # Writes data, add 2 extra spaces to separate data and next header.
+        summary.append(element.ljust(data_indents))
     summary.append('\n')
 
   return ''.join(summary)
