diff --git a/tests/components/t6615/common.yaml b/tests/components/t6615/common.yaml
new file mode 100644
index 0000000000..3ad715ae2b
--- /dev/null
+++ b/tests/components/t6615/common.yaml
@@ -0,0 +1,10 @@
+uart:
+  - id: uart_t6615
+    tx_pin: ${tx_pin}
+    rx_pin: ${rx_pin}
+    baud_rate: 19200
+
+sensor:
+  - platform: t6615
+    co2:
+      name: CO2 Sensor
diff --git a/tests/components/t6615/test.esp32-ard.yaml b/tests/components/t6615/test.esp32-ard.yaml
index 2cfaa0ae5b..f486544afa 100644
--- a/tests/components/t6615/test.esp32-ard.yaml
+++ b/tests/components/t6615/test.esp32-ard.yaml
@@ -1,10 +1,5 @@
-uart:
-  - id: uart_t6615
-    tx_pin: 17
-    rx_pin: 16
-    baud_rate: 19200
+substitutions:
+  tx_pin: GPIO17
+  rx_pin: GPIO16
 
-sensor:
-  - platform: t6615
-    co2:
-      name: CO2 Sensor
+<<: !include common.yaml
diff --git a/tests/components/t6615/test.esp32-c3-ard.yaml b/tests/components/t6615/test.esp32-c3-ard.yaml
index e8690c770f..b516342f3b 100644
--- a/tests/components/t6615/test.esp32-c3-ard.yaml
+++ b/tests/components/t6615/test.esp32-c3-ard.yaml
@@ -1,10 +1,5 @@
-uart:
-  - id: uart_t6615
-    tx_pin: 4
-    rx_pin: 5
-    baud_rate: 19200
+substitutions:
+  tx_pin: GPIO4
+  rx_pin: GPIO5
 
-sensor:
-  - platform: t6615
-    co2:
-      name: CO2 Sensor
+<<: !include common.yaml
diff --git a/tests/components/t6615/test.esp32-c3-idf.yaml b/tests/components/t6615/test.esp32-c3-idf.yaml
index e8690c770f..b516342f3b 100644
--- a/tests/components/t6615/test.esp32-c3-idf.yaml
+++ b/tests/components/t6615/test.esp32-c3-idf.yaml
@@ -1,10 +1,5 @@
-uart:
-  - id: uart_t6615
-    tx_pin: 4
-    rx_pin: 5
-    baud_rate: 19200
+substitutions:
+  tx_pin: GPIO4
+  rx_pin: GPIO5
 
-sensor:
-  - platform: t6615
-    co2:
-      name: CO2 Sensor
+<<: !include common.yaml
diff --git a/tests/components/t6615/test.esp32-idf.yaml b/tests/components/t6615/test.esp32-idf.yaml
index 2cfaa0ae5b..f486544afa 100644
--- a/tests/components/t6615/test.esp32-idf.yaml
+++ b/tests/components/t6615/test.esp32-idf.yaml
@@ -1,10 +1,5 @@
-uart:
-  - id: uart_t6615
-    tx_pin: 17
-    rx_pin: 16
-    baud_rate: 19200
+substitutions:
+  tx_pin: GPIO17
+  rx_pin: GPIO16
 
-sensor:
-  - platform: t6615
-    co2:
-      name: CO2 Sensor
+<<: !include common.yaml
diff --git a/tests/components/t6615/test.esp8266-ard.yaml b/tests/components/t6615/test.esp8266-ard.yaml
index e8690c770f..b516342f3b 100644
--- a/tests/components/t6615/test.esp8266-ard.yaml
+++ b/tests/components/t6615/test.esp8266-ard.yaml
@@ -1,10 +1,5 @@
-uart:
-  - id: uart_t6615
-    tx_pin: 4
-    rx_pin: 5
-    baud_rate: 19200
+substitutions:
+  tx_pin: GPIO4
+  rx_pin: GPIO5
 
-sensor:
-  - platform: t6615
-    co2:
-      name: CO2 Sensor
+<<: !include common.yaml
diff --git a/tests/components/t6615/test.rp2040-ard.yaml b/tests/components/t6615/test.rp2040-ard.yaml
index e8690c770f..b516342f3b 100644
--- a/tests/components/t6615/test.rp2040-ard.yaml
+++ b/tests/components/t6615/test.rp2040-ard.yaml
@@ -1,10 +1,5 @@
-uart:
-  - id: uart_t6615
-    tx_pin: 4
-    rx_pin: 5
-    baud_rate: 19200
+substitutions:
+  tx_pin: GPIO4
+  rx_pin: GPIO5
 
-sensor:
-  - platform: t6615
-    co2:
-      name: CO2 Sensor
+<<: !include common.yaml
diff --git a/tests/components/tc74/common.yaml b/tests/components/tc74/common.yaml
new file mode 100644
index 0000000000..88f5c91e12
--- /dev/null
+++ b/tests/components/tc74/common.yaml
@@ -0,0 +1,8 @@
+i2c:
+  - id: i2c_tc74
+    scl: ${scl_pin}
+    sda: ${sda_pin}
+
+sensor:
+  - platform: tc74
+    name: TC74 Temperature
diff --git a/tests/components/tc74/test.esp32-ard.yaml b/tests/components/tc74/test.esp32-ard.yaml
index ef9b40e184..63c3bd6afd 100644
--- a/tests/components/tc74/test.esp32-ard.yaml
+++ b/tests/components/tc74/test.esp32-ard.yaml
@@ -1,8 +1,5 @@
-i2c:
-  - id: i2c_tc74
-    scl: 16
-    sda: 17
+substitutions:
+  scl_pin: GPIO16
+  sda_pin: GPIO17
 
-sensor:
-  - platform: tc74
-    name: TC74 Temperature
+<<: !include common.yaml
diff --git a/tests/components/tc74/test.esp32-c3-ard.yaml b/tests/components/tc74/test.esp32-c3-ard.yaml
index e1a373fbf4..ee2c29ca4e 100644
--- a/tests/components/tc74/test.esp32-c3-ard.yaml
+++ b/tests/components/tc74/test.esp32-c3-ard.yaml
@@ -1,8 +1,5 @@
-i2c:
-  - id: i2c_tc74
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tc74
-    name: TC74 Temperature
+<<: !include common.yaml
diff --git a/tests/components/tc74/test.esp32-c3-idf.yaml b/tests/components/tc74/test.esp32-c3-idf.yaml
index e1a373fbf4..ee2c29ca4e 100644
--- a/tests/components/tc74/test.esp32-c3-idf.yaml
+++ b/tests/components/tc74/test.esp32-c3-idf.yaml
@@ -1,8 +1,5 @@
-i2c:
-  - id: i2c_tc74
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tc74
-    name: TC74 Temperature
+<<: !include common.yaml
diff --git a/tests/components/tc74/test.esp32-idf.yaml b/tests/components/tc74/test.esp32-idf.yaml
index ef9b40e184..63c3bd6afd 100644
--- a/tests/components/tc74/test.esp32-idf.yaml
+++ b/tests/components/tc74/test.esp32-idf.yaml
@@ -1,8 +1,5 @@
-i2c:
-  - id: i2c_tc74
-    scl: 16
-    sda: 17
+substitutions:
+  scl_pin: GPIO16
+  sda_pin: GPIO17
 
-sensor:
-  - platform: tc74
-    name: TC74 Temperature
+<<: !include common.yaml
diff --git a/tests/components/tc74/test.esp8266-ard.yaml b/tests/components/tc74/test.esp8266-ard.yaml
index e1a373fbf4..ee2c29ca4e 100644
--- a/tests/components/tc74/test.esp8266-ard.yaml
+++ b/tests/components/tc74/test.esp8266-ard.yaml
@@ -1,8 +1,5 @@
-i2c:
-  - id: i2c_tc74
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tc74
-    name: TC74 Temperature
+<<: !include common.yaml
diff --git a/tests/components/tc74/test.rp2040-ard.yaml b/tests/components/tc74/test.rp2040-ard.yaml
index e1a373fbf4..ee2c29ca4e 100644
--- a/tests/components/tc74/test.rp2040-ard.yaml
+++ b/tests/components/tc74/test.rp2040-ard.yaml
@@ -1,8 +1,5 @@
-i2c:
-  - id: i2c_tc74
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tc74
-    name: TC74 Temperature
+<<: !include common.yaml
diff --git a/tests/components/tca9548a/common.yaml b/tests/components/tca9548a/common.yaml
new file mode 100644
index 0000000000..67e812e08b
--- /dev/null
+++ b/tests/components/tca9548a/common.yaml
@@ -0,0 +1,15 @@
+i2c:
+  - id: i2c_tca9548a
+    scl: ${scl_pin}
+    sda: ${sda_pin}
+
+tca9548a:
+  - id: multiplex0
+    address: 0x70
+    channels:
+      - bus_id: multiplex0_chan0
+        channel: 0
+    i2c_id: i2c_tca9548a
+  - id: multiplex1
+    address: 0x71
+    i2c_id: multiplex0_chan0
diff --git a/tests/components/tca9548a/test.esp32-ard.yaml b/tests/components/tca9548a/test.esp32-ard.yaml
index 7edb83c821..63c3bd6afd 100644
--- a/tests/components/tca9548a/test.esp32-ard.yaml
+++ b/tests/components/tca9548a/test.esp32-ard.yaml
@@ -1,15 +1,5 @@
-i2c:
-  - id: i2c_tca9548a
-    scl: 16
-    sda: 17
+substitutions:
+  scl_pin: GPIO16
+  sda_pin: GPIO17
 
-tca9548a:
-  - id: multiplex0
-    address: 0x70
-    channels:
-      - bus_id: multiplex0_chan0
-        channel: 0
-    i2c_id: i2c_tca9548a
-  - id: multiplex1
-    address: 0x71
-    i2c_id: multiplex0_chan0
+<<: !include common.yaml
diff --git a/tests/components/tca9548a/test.esp32-c3-ard.yaml b/tests/components/tca9548a/test.esp32-c3-ard.yaml
index 2294530d14..ee2c29ca4e 100644
--- a/tests/components/tca9548a/test.esp32-c3-ard.yaml
+++ b/tests/components/tca9548a/test.esp32-c3-ard.yaml
@@ -1,15 +1,5 @@
-i2c:
-  - id: i2c_tca9548a
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-tca9548a:
-  - id: multiplex0
-    address: 0x70
-    channels:
-      - bus_id: multiplex0_chan0
-        channel: 0
-    i2c_id: i2c_tca9548a
-  - id: multiplex1
-    address: 0x71
-    i2c_id: multiplex0_chan0
+<<: !include common.yaml
diff --git a/tests/components/tca9548a/test.esp32-c3-idf.yaml b/tests/components/tca9548a/test.esp32-c3-idf.yaml
index 2294530d14..ee2c29ca4e 100644
--- a/tests/components/tca9548a/test.esp32-c3-idf.yaml
+++ b/tests/components/tca9548a/test.esp32-c3-idf.yaml
@@ -1,15 +1,5 @@
-i2c:
-  - id: i2c_tca9548a
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-tca9548a:
-  - id: multiplex0
-    address: 0x70
-    channels:
-      - bus_id: multiplex0_chan0
-        channel: 0
-    i2c_id: i2c_tca9548a
-  - id: multiplex1
-    address: 0x71
-    i2c_id: multiplex0_chan0
+<<: !include common.yaml
diff --git a/tests/components/tca9548a/test.esp32-idf.yaml b/tests/components/tca9548a/test.esp32-idf.yaml
index 7edb83c821..63c3bd6afd 100644
--- a/tests/components/tca9548a/test.esp32-idf.yaml
+++ b/tests/components/tca9548a/test.esp32-idf.yaml
@@ -1,15 +1,5 @@
-i2c:
-  - id: i2c_tca9548a
-    scl: 16
-    sda: 17
+substitutions:
+  scl_pin: GPIO16
+  sda_pin: GPIO17
 
-tca9548a:
-  - id: multiplex0
-    address: 0x70
-    channels:
-      - bus_id: multiplex0_chan0
-        channel: 0
-    i2c_id: i2c_tca9548a
-  - id: multiplex1
-    address: 0x71
-    i2c_id: multiplex0_chan0
+<<: !include common.yaml
diff --git a/tests/components/tca9548a/test.esp8266-ard.yaml b/tests/components/tca9548a/test.esp8266-ard.yaml
index 2294530d14..ee2c29ca4e 100644
--- a/tests/components/tca9548a/test.esp8266-ard.yaml
+++ b/tests/components/tca9548a/test.esp8266-ard.yaml
@@ -1,15 +1,5 @@
-i2c:
-  - id: i2c_tca9548a
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-tca9548a:
-  - id: multiplex0
-    address: 0x70
-    channels:
-      - bus_id: multiplex0_chan0
-        channel: 0
-    i2c_id: i2c_tca9548a
-  - id: multiplex1
-    address: 0x71
-    i2c_id: multiplex0_chan0
+<<: !include common.yaml
diff --git a/tests/components/tca9548a/test.rp2040-ard.yaml b/tests/components/tca9548a/test.rp2040-ard.yaml
index 2294530d14..ee2c29ca4e 100644
--- a/tests/components/tca9548a/test.rp2040-ard.yaml
+++ b/tests/components/tca9548a/test.rp2040-ard.yaml
@@ -1,15 +1,5 @@
-i2c:
-  - id: i2c_tca9548a
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-tca9548a:
-  - id: multiplex0
-    address: 0x70
-    channels:
-      - bus_id: multiplex0_chan0
-        channel: 0
-    i2c_id: i2c_tca9548a
-  - id: multiplex1
-    address: 0x71
-    i2c_id: multiplex0_chan0
+<<: !include common.yaml
diff --git a/tests/components/tca9555/common.yaml b/tests/components/tca9555/common.yaml
new file mode 100644
index 0000000000..0fc3086786
--- /dev/null
+++ b/tests/components/tca9555/common.yaml
@@ -0,0 +1,27 @@
+i2c:
+  - id: i2c_tca9555
+    scl: ${scl_pin}
+    sda: ${sda_pin}
+
+tca9555:
+  - id: tca9555_hub
+    address: 0x21
+
+binary_sensor:
+  - platform: gpio
+    id: tca9555_binary_sensor
+    name: TCA9555 Binary Sensor
+    pin:
+      tca9555: tca9555_hub
+      number: 1
+      mode: INPUT
+      inverted: true
+
+output:
+  - platform: gpio
+    id: tca9555_output
+    pin:
+      tca9555: tca9555_hub
+      number: 0
+      mode: OUTPUT
+      inverted: false
diff --git a/tests/components/tca9555/test.esp32-ard.yaml b/tests/components/tca9555/test.esp32-ard.yaml
index e0c046b443..63c3bd6afd 100644
--- a/tests/components/tca9555/test.esp32-ard.yaml
+++ b/tests/components/tca9555/test.esp32-ard.yaml
@@ -1,27 +1,5 @@
-i2c:
-  - id: i2c_tca9555
-    scl: 16
-    sda: 17
+substitutions:
+  scl_pin: GPIO16
+  sda_pin: GPIO17
 
-tca9555:
-  - id: tca9555_hub
-    address: 0x21
-
-binary_sensor:
-  - platform: gpio
-    id: tca9555_binary_sensor
-    name: TCA9555 Binary Sensor
-    pin:
-      tca9555: tca9555_hub
-      number: 1
-      mode: INPUT
-      inverted: true
-
-output:
-  - platform: gpio
-    id: tca9555_output
-    pin:
-      tca9555: tca9555_hub
-      number: 0
-      mode: OUTPUT
-      inverted: false
+<<: !include common.yaml
diff --git a/tests/components/tca9555/test.esp32-c3-ard.yaml b/tests/components/tca9555/test.esp32-c3-ard.yaml
index 5c49b27640..ee2c29ca4e 100644
--- a/tests/components/tca9555/test.esp32-c3-ard.yaml
+++ b/tests/components/tca9555/test.esp32-c3-ard.yaml
@@ -1,27 +1,5 @@
-i2c:
-  - id: i2c_tca9555
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-tca9555:
-  - id: tca9555_hub
-    address: 0x21
-
-binary_sensor:
-  - platform: gpio
-    id: tca9555_binary_sensor
-    name: TCA9555 Binary Sensor
-    pin:
-      tca9555: tca9555_hub
-      number: 1
-      mode: INPUT
-      inverted: true
-
-output:
-  - platform: gpio
-    id: tca9555_output
-    pin:
-      tca9555: tca9555_hub
-      number: 0
-      mode: OUTPUT
-      inverted: false
+<<: !include common.yaml
diff --git a/tests/components/tca9555/test.esp32-c3-idf.yaml b/tests/components/tca9555/test.esp32-c3-idf.yaml
index 5c49b27640..ee2c29ca4e 100644
--- a/tests/components/tca9555/test.esp32-c3-idf.yaml
+++ b/tests/components/tca9555/test.esp32-c3-idf.yaml
@@ -1,27 +1,5 @@
-i2c:
-  - id: i2c_tca9555
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-tca9555:
-  - id: tca9555_hub
-    address: 0x21
-
-binary_sensor:
-  - platform: gpio
-    id: tca9555_binary_sensor
-    name: TCA9555 Binary Sensor
-    pin:
-      tca9555: tca9555_hub
-      number: 1
-      mode: INPUT
-      inverted: true
-
-output:
-  - platform: gpio
-    id: tca9555_output
-    pin:
-      tca9555: tca9555_hub
-      number: 0
-      mode: OUTPUT
-      inverted: false
+<<: !include common.yaml
diff --git a/tests/components/tca9555/test.esp32-idf.yaml b/tests/components/tca9555/test.esp32-idf.yaml
index e0c046b443..63c3bd6afd 100644
--- a/tests/components/tca9555/test.esp32-idf.yaml
+++ b/tests/components/tca9555/test.esp32-idf.yaml
@@ -1,27 +1,5 @@
-i2c:
-  - id: i2c_tca9555
-    scl: 16
-    sda: 17
+substitutions:
+  scl_pin: GPIO16
+  sda_pin: GPIO17
 
-tca9555:
-  - id: tca9555_hub
-    address: 0x21
-
-binary_sensor:
-  - platform: gpio
-    id: tca9555_binary_sensor
-    name: TCA9555 Binary Sensor
-    pin:
-      tca9555: tca9555_hub
-      number: 1
-      mode: INPUT
-      inverted: true
-
-output:
-  - platform: gpio
-    id: tca9555_output
-    pin:
-      tca9555: tca9555_hub
-      number: 0
-      mode: OUTPUT
-      inverted: false
+<<: !include common.yaml
diff --git a/tests/components/tca9555/test.esp8266-ard.yaml b/tests/components/tca9555/test.esp8266-ard.yaml
index 5c49b27640..ee2c29ca4e 100644
--- a/tests/components/tca9555/test.esp8266-ard.yaml
+++ b/tests/components/tca9555/test.esp8266-ard.yaml
@@ -1,27 +1,5 @@
-i2c:
-  - id: i2c_tca9555
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-tca9555:
-  - id: tca9555_hub
-    address: 0x21
-
-binary_sensor:
-  - platform: gpio
-    id: tca9555_binary_sensor
-    name: TCA9555 Binary Sensor
-    pin:
-      tca9555: tca9555_hub
-      number: 1
-      mode: INPUT
-      inverted: true
-
-output:
-  - platform: gpio
-    id: tca9555_output
-    pin:
-      tca9555: tca9555_hub
-      number: 0
-      mode: OUTPUT
-      inverted: false
+<<: !include common.yaml
diff --git a/tests/components/tca9555/test.rp2040-ard.yaml b/tests/components/tca9555/test.rp2040-ard.yaml
index 5c49b27640..ee2c29ca4e 100644
--- a/tests/components/tca9555/test.rp2040-ard.yaml
+++ b/tests/components/tca9555/test.rp2040-ard.yaml
@@ -1,27 +1,5 @@
-i2c:
-  - id: i2c_tca9555
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-tca9555:
-  - id: tca9555_hub
-    address: 0x21
-
-binary_sensor:
-  - platform: gpio
-    id: tca9555_binary_sensor
-    name: TCA9555 Binary Sensor
-    pin:
-      tca9555: tca9555_hub
-      number: 1
-      mode: INPUT
-      inverted: true
-
-output:
-  - platform: gpio
-    id: tca9555_output
-    pin:
-      tca9555: tca9555_hub
-      number: 0
-      mode: OUTPUT
-      inverted: false
+<<: !include common.yaml
diff --git a/tests/components/tcl112/common.yaml b/tests/components/tcl112/common.yaml
new file mode 100644
index 0000000000..0e43de4a4a
--- /dev/null
+++ b/tests/components/tcl112/common.yaml
@@ -0,0 +1,15 @@
+remote_transmitter:
+  pin: ${pin}
+  carrier_duty_percent: 50%
+
+sensor:
+  - platform: template
+    id: tcl112_sensor
+    lambda: "return 21;"
+
+climate:
+  - platform: tcl112
+    name: TCL112 Climate with Sensor
+    supports_heat: true
+    supports_cool: true
+    sensor: tcl112_sensor
diff --git a/tests/components/tcl112/test.esp32-ard.yaml b/tests/components/tcl112/test.esp32-ard.yaml
index 03c0e84fe5..7b012aa64c 100644
--- a/tests/components/tcl112/test.esp32-ard.yaml
+++ b/tests/components/tcl112/test.esp32-ard.yaml
@@ -1,15 +1,4 @@
-remote_transmitter:
-  pin: 2
-  carrier_duty_percent: 50%
+substitutions:
+  pin: GPIO2
 
-sensor:
-  - platform: template
-    id: tcl112_sensor
-    lambda: "return 21;"
-
-climate:
-  - platform: tcl112
-    name: TCL112 Climate with Sensor
-    supports_heat: true
-    supports_cool: true
-    sensor: tcl112_sensor
+<<: !include common.yaml
diff --git a/tests/components/tcl112/test.esp32-c3-ard.yaml b/tests/components/tcl112/test.esp32-c3-ard.yaml
index 03c0e84fe5..7b012aa64c 100644
--- a/tests/components/tcl112/test.esp32-c3-ard.yaml
+++ b/tests/components/tcl112/test.esp32-c3-ard.yaml
@@ -1,15 +1,4 @@
-remote_transmitter:
-  pin: 2
-  carrier_duty_percent: 50%
+substitutions:
+  pin: GPIO2
 
-sensor:
-  - platform: template
-    id: tcl112_sensor
-    lambda: "return 21;"
-
-climate:
-  - platform: tcl112
-    name: TCL112 Climate with Sensor
-    supports_heat: true
-    supports_cool: true
-    sensor: tcl112_sensor
+<<: !include common.yaml
diff --git a/tests/components/tcl112/test.esp32-c3-idf.yaml b/tests/components/tcl112/test.esp32-c3-idf.yaml
index 03c0e84fe5..7b012aa64c 100644
--- a/tests/components/tcl112/test.esp32-c3-idf.yaml
+++ b/tests/components/tcl112/test.esp32-c3-idf.yaml
@@ -1,15 +1,4 @@
-remote_transmitter:
-  pin: 2
-  carrier_duty_percent: 50%
+substitutions:
+  pin: GPIO2
 
-sensor:
-  - platform: template
-    id: tcl112_sensor
-    lambda: "return 21;"
-
-climate:
-  - platform: tcl112
-    name: TCL112 Climate with Sensor
-    supports_heat: true
-    supports_cool: true
-    sensor: tcl112_sensor
+<<: !include common.yaml
diff --git a/tests/components/tcl112/test.esp32-idf.yaml b/tests/components/tcl112/test.esp32-idf.yaml
index 03c0e84fe5..7b012aa64c 100644
--- a/tests/components/tcl112/test.esp32-idf.yaml
+++ b/tests/components/tcl112/test.esp32-idf.yaml
@@ -1,15 +1,4 @@
-remote_transmitter:
-  pin: 2
-  carrier_duty_percent: 50%
+substitutions:
+  pin: GPIO2
 
-sensor:
-  - platform: template
-    id: tcl112_sensor
-    lambda: "return 21;"
-
-climate:
-  - platform: tcl112
-    name: TCL112 Climate with Sensor
-    supports_heat: true
-    supports_cool: true
-    sensor: tcl112_sensor
+<<: !include common.yaml
diff --git a/tests/components/tcl112/test.esp8266-ard.yaml b/tests/components/tcl112/test.esp8266-ard.yaml
index 0a85536928..f5097fcf5f 100644
--- a/tests/components/tcl112/test.esp8266-ard.yaml
+++ b/tests/components/tcl112/test.esp8266-ard.yaml
@@ -1,15 +1,4 @@
-remote_transmitter:
-  pin: 5
-  carrier_duty_percent: 50%
+substitutions:
+  pin: GPIO5
 
-sensor:
-  - platform: template
-    id: tcl112_sensor
-    lambda: "return 21;"
-
-climate:
-  - platform: tcl112
-    name: TCL112 Climate with Sensor
-    supports_heat: true
-    supports_cool: true
-    sensor: tcl112_sensor
+<<: !include common.yaml
diff --git a/tests/components/tcs34725/common.yaml b/tests/components/tcs34725/common.yaml
new file mode 100644
index 0000000000..5296988fa5
--- /dev/null
+++ b/tests/components/tcs34725/common.yaml
@@ -0,0 +1,21 @@
+i2c:
+  - id: i2c_tcs34725
+    scl: ${scl_pin}
+    sda: ${sda_pin}
+
+sensor:
+  - platform: tcs34725
+    red_channel:
+      name: Red Channel
+    green_channel:
+      name: Green Channel
+    blue_channel:
+      name: Blue Channel
+    clear_channel:
+      name: Clear Channel
+    illuminance:
+      name: Illuminance
+    color_temperature:
+      name: Color Temperature
+    integration_time: 614ms
+    gain: 60x
diff --git a/tests/components/tcs34725/test.esp32-ard.yaml b/tests/components/tcs34725/test.esp32-ard.yaml
index 86ef82962e..63c3bd6afd 100644
--- a/tests/components/tcs34725/test.esp32-ard.yaml
+++ b/tests/components/tcs34725/test.esp32-ard.yaml
@@ -1,21 +1,5 @@
-i2c:
-  - id: i2c_tcs34725
-    scl: 16
-    sda: 17
+substitutions:
+  scl_pin: GPIO16
+  sda_pin: GPIO17
 
-sensor:
-  - platform: tcs34725
-    red_channel:
-      name: Red Channel
-    green_channel:
-      name: Green Channel
-    blue_channel:
-      name: Blue Channel
-    clear_channel:
-      name: Clear Channel
-    illuminance:
-      name: Illuminance
-    color_temperature:
-      name: Color Temperature
-    integration_time: 614ms
-    gain: 60x
+<<: !include common.yaml
diff --git a/tests/components/tcs34725/test.esp32-c3-ard.yaml b/tests/components/tcs34725/test.esp32-c3-ard.yaml
index 9b459c9104..ee2c29ca4e 100644
--- a/tests/components/tcs34725/test.esp32-c3-ard.yaml
+++ b/tests/components/tcs34725/test.esp32-c3-ard.yaml
@@ -1,21 +1,5 @@
-i2c:
-  - id: i2c_tcs34725
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tcs34725
-    red_channel:
-      name: Red Channel
-    green_channel:
-      name: Green Channel
-    blue_channel:
-      name: Blue Channel
-    clear_channel:
-      name: Clear Channel
-    illuminance:
-      name: Illuminance
-    color_temperature:
-      name: Color Temperature
-    integration_time: 614ms
-    gain: 60x
+<<: !include common.yaml
diff --git a/tests/components/tcs34725/test.esp32-c3-idf.yaml b/tests/components/tcs34725/test.esp32-c3-idf.yaml
index 9b459c9104..ee2c29ca4e 100644
--- a/tests/components/tcs34725/test.esp32-c3-idf.yaml
+++ b/tests/components/tcs34725/test.esp32-c3-idf.yaml
@@ -1,21 +1,5 @@
-i2c:
-  - id: i2c_tcs34725
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tcs34725
-    red_channel:
-      name: Red Channel
-    green_channel:
-      name: Green Channel
-    blue_channel:
-      name: Blue Channel
-    clear_channel:
-      name: Clear Channel
-    illuminance:
-      name: Illuminance
-    color_temperature:
-      name: Color Temperature
-    integration_time: 614ms
-    gain: 60x
+<<: !include common.yaml
diff --git a/tests/components/tcs34725/test.esp32-idf.yaml b/tests/components/tcs34725/test.esp32-idf.yaml
index 86ef82962e..63c3bd6afd 100644
--- a/tests/components/tcs34725/test.esp32-idf.yaml
+++ b/tests/components/tcs34725/test.esp32-idf.yaml
@@ -1,21 +1,5 @@
-i2c:
-  - id: i2c_tcs34725
-    scl: 16
-    sda: 17
+substitutions:
+  scl_pin: GPIO16
+  sda_pin: GPIO17
 
-sensor:
-  - platform: tcs34725
-    red_channel:
-      name: Red Channel
-    green_channel:
-      name: Green Channel
-    blue_channel:
-      name: Blue Channel
-    clear_channel:
-      name: Clear Channel
-    illuminance:
-      name: Illuminance
-    color_temperature:
-      name: Color Temperature
-    integration_time: 614ms
-    gain: 60x
+<<: !include common.yaml
diff --git a/tests/components/tcs34725/test.esp8266-ard.yaml b/tests/components/tcs34725/test.esp8266-ard.yaml
index 9b459c9104..ee2c29ca4e 100644
--- a/tests/components/tcs34725/test.esp8266-ard.yaml
+++ b/tests/components/tcs34725/test.esp8266-ard.yaml
@@ -1,21 +1,5 @@
-i2c:
-  - id: i2c_tcs34725
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tcs34725
-    red_channel:
-      name: Red Channel
-    green_channel:
-      name: Green Channel
-    blue_channel:
-      name: Blue Channel
-    clear_channel:
-      name: Clear Channel
-    illuminance:
-      name: Illuminance
-    color_temperature:
-      name: Color Temperature
-    integration_time: 614ms
-    gain: 60x
+<<: !include common.yaml
diff --git a/tests/components/tcs34725/test.rp2040-ard.yaml b/tests/components/tcs34725/test.rp2040-ard.yaml
index 9b459c9104..ee2c29ca4e 100644
--- a/tests/components/tcs34725/test.rp2040-ard.yaml
+++ b/tests/components/tcs34725/test.rp2040-ard.yaml
@@ -1,21 +1,5 @@
-i2c:
-  - id: i2c_tcs34725
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tcs34725
-    red_channel:
-      name: Red Channel
-    green_channel:
-      name: Green Channel
-    blue_channel:
-      name: Blue Channel
-    clear_channel:
-      name: Clear Channel
-    illuminance:
-      name: Illuminance
-    color_temperature:
-      name: Color Temperature
-    integration_time: 614ms
-    gain: 60x
+<<: !include common.yaml
diff --git a/tests/components/tee501/common.yaml b/tests/components/tee501/common.yaml
new file mode 100644
index 0000000000..c01ab7e37a
--- /dev/null
+++ b/tests/components/tee501/common.yaml
@@ -0,0 +1,9 @@
+i2c:
+  - id: i2c_tee501
+    scl: ${scl_pin}
+    sda: ${sda_pin}
+
+sensor:
+  - platform: tee501
+    name: TEE501 Temperature
+    address: 0x48
diff --git a/tests/components/tee501/test.esp32-ard.yaml b/tests/components/tee501/test.esp32-ard.yaml
index acf6fed4bf..63c3bd6afd 100644
--- a/tests/components/tee501/test.esp32-ard.yaml
+++ b/tests/components/tee501/test.esp32-ard.yaml
@@ -1,9 +1,5 @@
-i2c:
-  - id: i2c_tee501
-    scl: 16
-    sda: 17
+substitutions:
+  scl_pin: GPIO16
+  sda_pin: GPIO17
 
-sensor:
-  - platform: tee501
-    name: TEE501 Temperature
-    address: 0x48
+<<: !include common.yaml
diff --git a/tests/components/tee501/test.esp32-c3-ard.yaml b/tests/components/tee501/test.esp32-c3-ard.yaml
index 11991a6153..ee2c29ca4e 100644
--- a/tests/components/tee501/test.esp32-c3-ard.yaml
+++ b/tests/components/tee501/test.esp32-c3-ard.yaml
@@ -1,9 +1,5 @@
-i2c:
-  - id: i2c_tee501
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tee501
-    name: TEE501 Temperature
-    address: 0x48
+<<: !include common.yaml
diff --git a/tests/components/tee501/test.esp32-c3-idf.yaml b/tests/components/tee501/test.esp32-c3-idf.yaml
index 11991a6153..ee2c29ca4e 100644
--- a/tests/components/tee501/test.esp32-c3-idf.yaml
+++ b/tests/components/tee501/test.esp32-c3-idf.yaml
@@ -1,9 +1,5 @@
-i2c:
-  - id: i2c_tee501
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tee501
-    name: TEE501 Temperature
-    address: 0x48
+<<: !include common.yaml
diff --git a/tests/components/tee501/test.esp32-idf.yaml b/tests/components/tee501/test.esp32-idf.yaml
index acf6fed4bf..63c3bd6afd 100644
--- a/tests/components/tee501/test.esp32-idf.yaml
+++ b/tests/components/tee501/test.esp32-idf.yaml
@@ -1,9 +1,5 @@
-i2c:
-  - id: i2c_tee501
-    scl: 16
-    sda: 17
+substitutions:
+  scl_pin: GPIO16
+  sda_pin: GPIO17
 
-sensor:
-  - platform: tee501
-    name: TEE501 Temperature
-    address: 0x48
+<<: !include common.yaml
diff --git a/tests/components/tee501/test.esp8266-ard.yaml b/tests/components/tee501/test.esp8266-ard.yaml
index 11991a6153..ee2c29ca4e 100644
--- a/tests/components/tee501/test.esp8266-ard.yaml
+++ b/tests/components/tee501/test.esp8266-ard.yaml
@@ -1,9 +1,5 @@
-i2c:
-  - id: i2c_tee501
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tee501
-    name: TEE501 Temperature
-    address: 0x48
+<<: !include common.yaml
diff --git a/tests/components/tee501/test.rp2040-ard.yaml b/tests/components/tee501/test.rp2040-ard.yaml
index 11991a6153..ee2c29ca4e 100644
--- a/tests/components/tee501/test.rp2040-ard.yaml
+++ b/tests/components/tee501/test.rp2040-ard.yaml
@@ -1,9 +1,5 @@
-i2c:
-  - id: i2c_tee501
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tee501
-    name: TEE501 Temperature
-    address: 0x48
+<<: !include common.yaml
diff --git a/tests/components/teleinfo/common.yaml b/tests/components/teleinfo/common.yaml
new file mode 100644
index 0000000000..90b684e977
--- /dev/null
+++ b/tests/components/teleinfo/common.yaml
@@ -0,0 +1,42 @@
+uart:
+  - id: uart_teleinfo
+    tx_pin: ${tx_pin}
+    rx_pin: ${rx_pin}
+    baud_rate: 1200
+    parity: EVEN
+
+button:
+  - platform: template
+    name: Poller component suspend test
+    on_press:
+      - component.suspend: test_teleinfo
+      - delay: 20s
+      - component.update: test_teleinfo
+      - delay: 20s
+      - component.resume: test_teleinfo
+      - delay: 20s
+      - component.resume:
+          id: test_teleinfo
+          update_interval: 2s
+      - delay: 20s
+      - component.resume:
+          id: test_teleinfo
+          update_interval: !lambda return 2500;
+
+teleinfo:
+  id: test_teleinfo
+  historical_mode: true
+  update_interval: 60s
+
+sensor:
+  - platform: teleinfo
+    name: hchc
+    tag_name: HCHC
+    teleinfo_id: test_teleinfo
+    unit_of_measurement: Wh
+
+text_sensor:
+  - platform: teleinfo
+    name: optarif
+    tag_name: OPTARIF
+    teleinfo_id: test_teleinfo
diff --git a/tests/components/teleinfo/test.esp32-ard.yaml b/tests/components/teleinfo/test.esp32-ard.yaml
index a5bd176143..f486544afa 100644
--- a/tests/components/teleinfo/test.esp32-ard.yaml
+++ b/tests/components/teleinfo/test.esp32-ard.yaml
@@ -1,42 +1,5 @@
-uart:
-  - id: uart_teleinfo
-    tx_pin: 17
-    rx_pin: 16
-    baud_rate: 1200
-    parity: EVEN
+substitutions:
+  tx_pin: GPIO17
+  rx_pin: GPIO16
 
-button:
-  - platform: template
-    name: Poller component suspend test
-    on_press:
-      - component.suspend: test_teleinfo
-      - delay: 20s
-      - component.update: test_teleinfo
-      - delay: 20s
-      - component.resume: test_teleinfo
-      - delay: 20s
-      - component.resume:
-          id: test_teleinfo
-          update_interval: 2s
-      - delay: 20s
-      - component.resume:
-          id: test_teleinfo
-          update_interval: !lambda return 2500;
-
-teleinfo:
-  id: test_teleinfo
-  historical_mode: true
-  update_interval: 60s
-
-sensor:
-  - platform: teleinfo
-    name: hchc
-    tag_name: HCHC
-    teleinfo_id: test_teleinfo
-    unit_of_measurement: Wh
-
-text_sensor:
-  - platform: teleinfo
-    name: optarif
-    tag_name: OPTARIF
-    teleinfo_id: test_teleinfo
+<<: !include common.yaml
diff --git a/tests/components/teleinfo/test.esp32-c3-ard.yaml b/tests/components/teleinfo/test.esp32-c3-ard.yaml
index 55641e1e01..b516342f3b 100644
--- a/tests/components/teleinfo/test.esp32-c3-ard.yaml
+++ b/tests/components/teleinfo/test.esp32-c3-ard.yaml
@@ -1,42 +1,5 @@
-uart:
-  - id: uart_teleinfo
-    tx_pin: 4
-    rx_pin: 5
-    baud_rate: 1200
-    parity: EVEN
+substitutions:
+  tx_pin: GPIO4
+  rx_pin: GPIO5
 
-button:
-  - platform: template
-    name: Poller component suspend test
-    on_press:
-      - component.suspend: test_teleinfo
-      - delay: 20s
-      - component.update: test_teleinfo
-      - delay: 20s
-      - component.resume: test_teleinfo
-      - delay: 20s
-      - component.resume:
-          id: test_teleinfo
-          update_interval: 2s
-      - delay: 20s
-      - component.resume:
-          id: test_teleinfo
-          update_interval: !lambda return 2500;
-
-teleinfo:
-  id: test_teleinfo
-  historical_mode: true
-  update_interval: 60s
-
-sensor:
-  - platform: teleinfo
-    name: hchc
-    tag_name: HCHC
-    teleinfo_id: test_teleinfo
-    unit_of_measurement: Wh
-
-text_sensor:
-  - platform: teleinfo
-    name: optarif
-    tag_name: OPTARIF
-    teleinfo_id: test_teleinfo
+<<: !include common.yaml
diff --git a/tests/components/teleinfo/test.esp32-c3-idf.yaml b/tests/components/teleinfo/test.esp32-c3-idf.yaml
index 55641e1e01..b516342f3b 100644
--- a/tests/components/teleinfo/test.esp32-c3-idf.yaml
+++ b/tests/components/teleinfo/test.esp32-c3-idf.yaml
@@ -1,42 +1,5 @@
-uart:
-  - id: uart_teleinfo
-    tx_pin: 4
-    rx_pin: 5
-    baud_rate: 1200
-    parity: EVEN
+substitutions:
+  tx_pin: GPIO4
+  rx_pin: GPIO5
 
-button:
-  - platform: template
-    name: Poller component suspend test
-    on_press:
-      - component.suspend: test_teleinfo
-      - delay: 20s
-      - component.update: test_teleinfo
-      - delay: 20s
-      - component.resume: test_teleinfo
-      - delay: 20s
-      - component.resume:
-          id: test_teleinfo
-          update_interval: 2s
-      - delay: 20s
-      - component.resume:
-          id: test_teleinfo
-          update_interval: !lambda return 2500;
-
-teleinfo:
-  id: test_teleinfo
-  historical_mode: true
-  update_interval: 60s
-
-sensor:
-  - platform: teleinfo
-    name: hchc
-    tag_name: HCHC
-    teleinfo_id: test_teleinfo
-    unit_of_measurement: Wh
-
-text_sensor:
-  - platform: teleinfo
-    name: optarif
-    tag_name: OPTARIF
-    teleinfo_id: test_teleinfo
+<<: !include common.yaml
diff --git a/tests/components/teleinfo/test.esp32-idf.yaml b/tests/components/teleinfo/test.esp32-idf.yaml
index a5bd176143..f486544afa 100644
--- a/tests/components/teleinfo/test.esp32-idf.yaml
+++ b/tests/components/teleinfo/test.esp32-idf.yaml
@@ -1,42 +1,5 @@
-uart:
-  - id: uart_teleinfo
-    tx_pin: 17
-    rx_pin: 16
-    baud_rate: 1200
-    parity: EVEN
+substitutions:
+  tx_pin: GPIO17
+  rx_pin: GPIO16
 
-button:
-  - platform: template
-    name: Poller component suspend test
-    on_press:
-      - component.suspend: test_teleinfo
-      - delay: 20s
-      - component.update: test_teleinfo
-      - delay: 20s
-      - component.resume: test_teleinfo
-      - delay: 20s
-      - component.resume:
-          id: test_teleinfo
-          update_interval: 2s
-      - delay: 20s
-      - component.resume:
-          id: test_teleinfo
-          update_interval: !lambda return 2500;
-
-teleinfo:
-  id: test_teleinfo
-  historical_mode: true
-  update_interval: 60s
-
-sensor:
-  - platform: teleinfo
-    name: hchc
-    tag_name: HCHC
-    teleinfo_id: test_teleinfo
-    unit_of_measurement: Wh
-
-text_sensor:
-  - platform: teleinfo
-    name: optarif
-    tag_name: OPTARIF
-    teleinfo_id: test_teleinfo
+<<: !include common.yaml
diff --git a/tests/components/teleinfo/test.esp8266-ard.yaml b/tests/components/teleinfo/test.esp8266-ard.yaml
index 55641e1e01..b516342f3b 100644
--- a/tests/components/teleinfo/test.esp8266-ard.yaml
+++ b/tests/components/teleinfo/test.esp8266-ard.yaml
@@ -1,42 +1,5 @@
-uart:
-  - id: uart_teleinfo
-    tx_pin: 4
-    rx_pin: 5
-    baud_rate: 1200
-    parity: EVEN
+substitutions:
+  tx_pin: GPIO4
+  rx_pin: GPIO5
 
-button:
-  - platform: template
-    name: Poller component suspend test
-    on_press:
-      - component.suspend: test_teleinfo
-      - delay: 20s
-      - component.update: test_teleinfo
-      - delay: 20s
-      - component.resume: test_teleinfo
-      - delay: 20s
-      - component.resume:
-          id: test_teleinfo
-          update_interval: 2s
-      - delay: 20s
-      - component.resume:
-          id: test_teleinfo
-          update_interval: !lambda return 2500;
-
-teleinfo:
-  id: test_teleinfo
-  historical_mode: true
-  update_interval: 60s
-
-sensor:
-  - platform: teleinfo
-    name: hchc
-    tag_name: HCHC
-    teleinfo_id: test_teleinfo
-    unit_of_measurement: Wh
-
-text_sensor:
-  - platform: teleinfo
-    name: optarif
-    tag_name: OPTARIF
-    teleinfo_id: test_teleinfo
+<<: !include common.yaml
diff --git a/tests/components/teleinfo/test.rp2040-ard.yaml b/tests/components/teleinfo/test.rp2040-ard.yaml
index 55641e1e01..b516342f3b 100644
--- a/tests/components/teleinfo/test.rp2040-ard.yaml
+++ b/tests/components/teleinfo/test.rp2040-ard.yaml
@@ -1,42 +1,5 @@
-uart:
-  - id: uart_teleinfo
-    tx_pin: 4
-    rx_pin: 5
-    baud_rate: 1200
-    parity: EVEN
+substitutions:
+  tx_pin: GPIO4
+  rx_pin: GPIO5
 
-button:
-  - platform: template
-    name: Poller component suspend test
-    on_press:
-      - component.suspend: test_teleinfo
-      - delay: 20s
-      - component.update: test_teleinfo
-      - delay: 20s
-      - component.resume: test_teleinfo
-      - delay: 20s
-      - component.resume:
-          id: test_teleinfo
-          update_interval: 2s
-      - delay: 20s
-      - component.resume:
-          id: test_teleinfo
-          update_interval: !lambda return 2500;
-
-teleinfo:
-  id: test_teleinfo
-  historical_mode: true
-  update_interval: 60s
-
-sensor:
-  - platform: teleinfo
-    name: hchc
-    tag_name: HCHC
-    teleinfo_id: test_teleinfo
-    unit_of_measurement: Wh
-
-text_sensor:
-  - platform: teleinfo
-    name: optarif
-    tag_name: OPTARIF
-    teleinfo_id: test_teleinfo
+<<: !include common.yaml
diff --git a/tests/components/tlc59208f/common.yaml b/tests/components/tlc59208f/common.yaml
new file mode 100644
index 0000000000..49460dcefc
--- /dev/null
+++ b/tests/components/tlc59208f/common.yaml
@@ -0,0 +1,50 @@
+i2c:
+  - id: i2c_tlc59208f
+    scl: ${scl_pin}
+    sda: ${sda_pin}
+
+tlc59208f:
+  - address: 0x20
+    id: tlc59208f_1
+  - address: 0x22
+    id: tlc59208f_2
+  - address: 0x24
+    id: tlc59208f_3
+
+output:
+  - platform: tlc59208f
+    id: tlc_0
+    channel: 0
+    tlc59208f_id: tlc59208f_1
+  - platform: tlc59208f
+    id: tlc_1
+    channel: 1
+    tlc59208f_id: tlc59208f_1
+  - platform: tlc59208f
+    id: tlc_2
+    channel: 2
+    tlc59208f_id: tlc59208f_1
+  - platform: tlc59208f
+    id: tlc_3
+    channel: 0
+    tlc59208f_id: tlc59208f_2
+  - platform: tlc59208f
+    id: tlc_4
+    channel: 1
+    tlc59208f_id: tlc59208f_2
+  - platform: tlc59208f
+    id: tlc_5
+    channel: 2
+    tlc59208f_id: tlc59208f_2
+  - platform: tlc59208f
+    id: tlc_6
+    channel: 0
+    tlc59208f_id: tlc59208f_3
+  - platform: tlc59208f
+    id: tlc_7
+    channel: 1
+    tlc59208f_id: tlc59208f_3
+  - platform: tlc59208f
+    id: tlc_8
+    channel: 2
+    tlc59208f_id: tlc59208f_3
diff --git a/tests/components/tlc59208f/test.esp32-ard.yaml b/tests/components/tlc59208f/test.esp32-ard.yaml
index 2639de3b3d..63c3bd6afd 100644
--- a/tests/components/tlc59208f/test.esp32-ard.yaml
+++ b/tests/components/tlc59208f/test.esp32-ard.yaml
@@ -1,50 +1,5 @@
-i2c:
-  - id: i2c_tlc59208f
-    scl: 16
-    sda: 17
+substitutions:
+  scl_pin: GPIO16
+  sda_pin: GPIO17
 
-tlc59208f:
-  - address: 0x20
-    id: tlc59208f_1
-  - address: 0x22
-    id: tlc59208f_2
-  - address: 0x24
-    id: tlc59208f_3
-
-output:
-  - platform: tlc59208f
-    id: tlc_0
-    channel: 0
-    tlc59208f_id: tlc59208f_1
-  - platform: tlc59208f
-    id: tlc_1
-    channel: 1
-    tlc59208f_id: tlc59208f_1
-  - platform: tlc59208f
-    id: tlc_2
-    channel: 2
-    tlc59208f_id: tlc59208f_1
-  - platform: tlc59208f
-    id: tlc_3
-    channel: 0
-    tlc59208f_id: tlc59208f_2
-  - platform: tlc59208f
-    id: tlc_4
-    channel: 1
-    tlc59208f_id: tlc59208f_2
-  - platform: tlc59208f
-    id: tlc_5
-    channel: 2
-    tlc59208f_id: tlc59208f_2
-  - platform: tlc59208f
-    id: tlc_6
-    channel: 0
-    tlc59208f_id: tlc59208f_3
-  - platform: tlc59208f
-    id: tlc_7
-    channel: 1
-    tlc59208f_id: tlc59208f_3
-  - platform: tlc59208f
-    id: tlc_8
-    channel: 2
-    tlc59208f_id: tlc59208f_3
+<<: !include common.yaml
diff --git a/tests/components/tlc59208f/test.esp32-c3-ard.yaml b/tests/components/tlc59208f/test.esp32-c3-ard.yaml
index 923ea4b4a4..ee2c29ca4e 100644
--- a/tests/components/tlc59208f/test.esp32-c3-ard.yaml
+++ b/tests/components/tlc59208f/test.esp32-c3-ard.yaml
@@ -1,50 +1,5 @@
-i2c:
-  - id: i2c_tlc59208f
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-tlc59208f:
-  - address: 0x20
-    id: tlc59208f_1
-  - address: 0x22
-    id: tlc59208f_2
-  - address: 0x24
-    id: tlc59208f_3
-
-output:
-  - platform: tlc59208f
-    id: tlc_0
-    channel: 0
-    tlc59208f_id: tlc59208f_1
-  - platform: tlc59208f
-    id: tlc_1
-    channel: 1
-    tlc59208f_id: tlc59208f_1
-  - platform: tlc59208f
-    id: tlc_2
-    channel: 2
-    tlc59208f_id: tlc59208f_1
-  - platform: tlc59208f
-    id: tlc_3
-    channel: 0
-    tlc59208f_id: tlc59208f_2
-  - platform: tlc59208f
-    id: tlc_4
-    channel: 1
-    tlc59208f_id: tlc59208f_2
-  - platform: tlc59208f
-    id: tlc_5
-    channel: 2
-    tlc59208f_id: tlc59208f_2
-  - platform: tlc59208f
-    id: tlc_6
-    channel: 0
-    tlc59208f_id: tlc59208f_3
-  - platform: tlc59208f
-    id: tlc_7
-    channel: 1
-    tlc59208f_id: tlc59208f_3
-  - platform: tlc59208f
-    id: tlc_8
-    channel: 2
-    tlc59208f_id: tlc59208f_3
+<<: !include common.yaml
diff --git a/tests/components/tlc59208f/test.esp32-c3-idf.yaml b/tests/components/tlc59208f/test.esp32-c3-idf.yaml
index 923ea4b4a4..ee2c29ca4e 100644
--- a/tests/components/tlc59208f/test.esp32-c3-idf.yaml
+++ b/tests/components/tlc59208f/test.esp32-c3-idf.yaml
@@ -1,50 +1,5 @@
-i2c:
-  - id: i2c_tlc59208f
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-tlc59208f:
-  - address: 0x20
-    id: tlc59208f_1
-  - address: 0x22
-    id: tlc59208f_2
-  - address: 0x24
-    id: tlc59208f_3
-
-output:
-  - platform: tlc59208f
-    id: tlc_0
-    channel: 0
-    tlc59208f_id: tlc59208f_1
-  - platform: tlc59208f
-    id: tlc_1
-    channel: 1
-    tlc59208f_id: tlc59208f_1
-  - platform: tlc59208f
-    id: tlc_2
-    channel: 2
-    tlc59208f_id: tlc59208f_1
-  - platform: tlc59208f
-    id: tlc_3
-    channel: 0
-    tlc59208f_id: tlc59208f_2
-  - platform: tlc59208f
-    id: tlc_4
-    channel: 1
-    tlc59208f_id: tlc59208f_2
-  - platform: tlc59208f
-    id: tlc_5
-    channel: 2
-    tlc59208f_id: tlc59208f_2
-  - platform: tlc59208f
-    id: tlc_6
-    channel: 0
-    tlc59208f_id: tlc59208f_3
-  - platform: tlc59208f
-    id: tlc_7
-    channel: 1
-    tlc59208f_id: tlc59208f_3
-  - platform: tlc59208f
-    id: tlc_8
-    channel: 2
-    tlc59208f_id: tlc59208f_3
+<<: !include common.yaml
diff --git a/tests/components/tlc59208f/test.esp32-idf.yaml b/tests/components/tlc59208f/test.esp32-idf.yaml
index 2639de3b3d..63c3bd6afd 100644
--- a/tests/components/tlc59208f/test.esp32-idf.yaml
+++ b/tests/components/tlc59208f/test.esp32-idf.yaml
@@ -1,50 +1,5 @@
-i2c:
-  - id: i2c_tlc59208f
-    scl: 16
-    sda: 17
+substitutions:
+  scl_pin: GPIO16
+  sda_pin: GPIO17
 
-tlc59208f:
-  - address: 0x20
-    id: tlc59208f_1
-  - address: 0x22
-    id: tlc59208f_2
-  - address: 0x24
-    id: tlc59208f_3
-
-output:
-  - platform: tlc59208f
-    id: tlc_0
-    channel: 0
-    tlc59208f_id: tlc59208f_1
-  - platform: tlc59208f
-    id: tlc_1
-    channel: 1
-    tlc59208f_id: tlc59208f_1
-  - platform: tlc59208f
-    id: tlc_2
-    channel: 2
-    tlc59208f_id: tlc59208f_1
-  - platform: tlc59208f
-    id: tlc_3
-    channel: 0
-    tlc59208f_id: tlc59208f_2
-  - platform: tlc59208f
-    id: tlc_4
-    channel: 1
-    tlc59208f_id: tlc59208f_2
-  - platform: tlc59208f
-    id: tlc_5
-    channel: 2
-    tlc59208f_id: tlc59208f_2
-  - platform: tlc59208f
-    id: tlc_6
-    channel: 0
-    tlc59208f_id: tlc59208f_3
-  - platform: tlc59208f
-    id: tlc_7
-    channel: 1
-    tlc59208f_id: tlc59208f_3
-  - platform: tlc59208f
-    id: tlc_8
-    channel: 2
-    tlc59208f_id: tlc59208f_3
+<<: !include common.yaml
diff --git a/tests/components/tlc59208f/test.esp8266-ard.yaml b/tests/components/tlc59208f/test.esp8266-ard.yaml
index 923ea4b4a4..ee2c29ca4e 100644
--- a/tests/components/tlc59208f/test.esp8266-ard.yaml
+++ b/tests/components/tlc59208f/test.esp8266-ard.yaml
@@ -1,50 +1,5 @@
-i2c:
-  - id: i2c_tlc59208f
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-tlc59208f:
-  - address: 0x20
-    id: tlc59208f_1
-  - address: 0x22
-    id: tlc59208f_2
-  - address: 0x24
-    id: tlc59208f_3
-
-output:
-  - platform: tlc59208f
-    id: tlc_0
-    channel: 0
-    tlc59208f_id: tlc59208f_1
-  - platform: tlc59208f
-    id: tlc_1
-    channel: 1
-    tlc59208f_id: tlc59208f_1
-  - platform: tlc59208f
-    id: tlc_2
-    channel: 2
-    tlc59208f_id: tlc59208f_1
-  - platform: tlc59208f
-    id: tlc_3
-    channel: 0
-    tlc59208f_id: tlc59208f_2
-  - platform: tlc59208f
-    id: tlc_4
-    channel: 1
-    tlc59208f_id: tlc59208f_2
-  - platform: tlc59208f
-    id: tlc_5
-    channel: 2
-    tlc59208f_id: tlc59208f_2
-  - platform: tlc59208f
-    id: tlc_6
-    channel: 0
-    tlc59208f_id: tlc59208f_3
-  - platform: tlc59208f
-    id: tlc_7
-    channel: 1
-    tlc59208f_id: tlc59208f_3
-  - platform: tlc59208f
-    id: tlc_8
-    channel: 2
-    tlc59208f_id: tlc59208f_3
+<<: !include common.yaml
diff --git a/tests/components/tlc59208f/test.rp2040-ard.yaml b/tests/components/tlc59208f/test.rp2040-ard.yaml
index 923ea4b4a4..ee2c29ca4e 100644
--- a/tests/components/tlc59208f/test.rp2040-ard.yaml
+++ b/tests/components/tlc59208f/test.rp2040-ard.yaml
@@ -1,50 +1,5 @@
-i2c:
-  - id: i2c_tlc59208f
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-tlc59208f:
-  - address: 0x20
-    id: tlc59208f_1
-  - address: 0x22
-    id: tlc59208f_2
-  - address: 0x24
-    id: tlc59208f_3
-
-output:
-  - platform: tlc59208f
-    id: tlc_0
-    channel: 0
-    tlc59208f_id: tlc59208f_1
-  - platform: tlc59208f
-    id: tlc_1
-    channel: 1
-    tlc59208f_id: tlc59208f_1
-  - platform: tlc59208f
-    id: tlc_2
-    channel: 2
-    tlc59208f_id: tlc59208f_1
-  - platform: tlc59208f
-    id: tlc_3
-    channel: 0
-    tlc59208f_id: tlc59208f_2
-  - platform: tlc59208f
-    id: tlc_4
-    channel: 1
-    tlc59208f_id: tlc59208f_2
-  - platform: tlc59208f
-    id: tlc_5
-    channel: 2
-    tlc59208f_id: tlc59208f_2
-  - platform: tlc59208f
-    id: tlc_6
-    channel: 0
-    tlc59208f_id: tlc59208f_3
-  - platform: tlc59208f
-    id: tlc_7
-    channel: 1
-    tlc59208f_id: tlc59208f_3
-  - platform: tlc59208f
-    id: tlc_8
-    channel: 2
-    tlc59208f_id: tlc59208f_3
+<<: !include common.yaml
diff --git a/tests/components/tm1621/common.yaml b/tests/components/tm1621/common.yaml
new file mode 100644
index 0000000000..77f7ae74fe
--- /dev/null
+++ b/tests/components/tm1621/common.yaml
@@ -0,0 +1,12 @@
+display:
+  - platform: tm1621
+    id: tm1621_display
+    cs_pin: ${cs_pin}
+    data_pin: ${data_pin}
+    read_pin: ${read_pin}
+    write_pin: ${write_pin}
+    lambda: |-
+      it.printf(0, "%.1f", 20.0);
+      it.display_celsius(true);
+      it.printf(1, "%.1f", 20.0);
+      it.display_humidity(true);
diff --git a/tests/components/tm1621/test.esp32-ard.yaml b/tests/components/tm1621/test.esp32-ard.yaml
index 8eab46f000..0441e4bffe 100644
--- a/tests/components/tm1621/test.esp32-ard.yaml
+++ b/tests/components/tm1621/test.esp32-ard.yaml
@@ -1,12 +1,7 @@
-display:
-  - platform: tm1621
-    id: tm1621_display
-    cs_pin: 15
-    data_pin: 14
-    read_pin: 12
-    write_pin: 13
-    lambda: |-
-      it.printf(0, "%.1f", 20.0);
-      it.display_celsius(true);
-      it.printf(1, "%.1f", 20.0);
-      it.display_humidity(true);
+substitutions:
+  cs_pin: GPIO16
+  data_pin: GPIO17
+  read_pin: GPIO12
+  write_pin: GPIO13
+
+<<: !include common.yaml
diff --git a/tests/components/tm1621/test.esp32-c3-ard.yaml b/tests/components/tm1621/test.esp32-c3-ard.yaml
index cddd64f31f..562ced7485 100644
--- a/tests/components/tm1621/test.esp32-c3-ard.yaml
+++ b/tests/components/tm1621/test.esp32-c3-ard.yaml
@@ -1,12 +1,7 @@
-display:
-  - platform: tm1621
-    id: tm1621_display
-    cs_pin: 7
-    data_pin: 4
-    read_pin: 5
-    write_pin: 6
-    lambda: |-
-      it.printf(0, "%.1f", 20.0);
-      it.display_celsius(true);
-      it.printf(1, "%.1f", 20.0);
-      it.display_humidity(true);
+substitutions:
+  cs_pin: GPIO6
+  data_pin: GPIO7
+  read_pin: GPIO2
+  write_pin: GPIO3
+
+<<: !include common.yaml
diff --git a/tests/components/tm1621/test.esp32-c3-idf.yaml b/tests/components/tm1621/test.esp32-c3-idf.yaml
index cddd64f31f..562ced7485 100644
--- a/tests/components/tm1621/test.esp32-c3-idf.yaml
+++ b/tests/components/tm1621/test.esp32-c3-idf.yaml
@@ -1,12 +1,7 @@
-display:
-  - platform: tm1621
-    id: tm1621_display
-    cs_pin: 7
-    data_pin: 4
-    read_pin: 5
-    write_pin: 6
-    lambda: |-
-      it.printf(0, "%.1f", 20.0);
-      it.display_celsius(true);
-      it.printf(1, "%.1f", 20.0);
-      it.display_humidity(true);
+substitutions:
+  cs_pin: GPIO6
+  data_pin: GPIO7
+  read_pin: GPIO2
+  write_pin: GPIO3
+
+<<: !include common.yaml
diff --git a/tests/components/tm1621/test.esp32-idf.yaml b/tests/components/tm1621/test.esp32-idf.yaml
index 8eab46f000..0441e4bffe 100644
--- a/tests/components/tm1621/test.esp32-idf.yaml
+++ b/tests/components/tm1621/test.esp32-idf.yaml
@@ -1,12 +1,7 @@
-display:
-  - platform: tm1621
-    id: tm1621_display
-    cs_pin: 15
-    data_pin: 14
-    read_pin: 12
-    write_pin: 13
-    lambda: |-
-      it.printf(0, "%.1f", 20.0);
-      it.display_celsius(true);
-      it.printf(1, "%.1f", 20.0);
-      it.display_humidity(true);
+substitutions:
+  cs_pin: GPIO16
+  data_pin: GPIO17
+  read_pin: GPIO12
+  write_pin: GPIO13
+
+<<: !include common.yaml
diff --git a/tests/components/tm1621/test.esp8266-ard.yaml b/tests/components/tm1621/test.esp8266-ard.yaml
index 8eab46f000..ee7b62ce35 100644
--- a/tests/components/tm1621/test.esp8266-ard.yaml
+++ b/tests/components/tm1621/test.esp8266-ard.yaml
@@ -1,12 +1,7 @@
-display:
-  - platform: tm1621
-    id: tm1621_display
-    cs_pin: 15
-    data_pin: 14
-    read_pin: 12
-    write_pin: 13
-    lambda: |-
-      it.printf(0, "%.1f", 20.0);
-      it.display_celsius(true);
-      it.printf(1, "%.1f", 20.0);
-      it.display_humidity(true);
+substitutions:
+  cs_pin: GPIO15
+  data_pin: GPIO14
+  read_pin: GPIO12
+  write_pin: GPIO13
+
+<<: !include common.yaml
diff --git a/tests/components/tm1621/test.rp2040-ard.yaml b/tests/components/tm1621/test.rp2040-ard.yaml
index cddd64f31f..562ced7485 100644
--- a/tests/components/tm1621/test.rp2040-ard.yaml
+++ b/tests/components/tm1621/test.rp2040-ard.yaml
@@ -1,12 +1,7 @@
-display:
-  - platform: tm1621
-    id: tm1621_display
-    cs_pin: 7
-    data_pin: 4
-    read_pin: 5
-    write_pin: 6
-    lambda: |-
-      it.printf(0, "%.1f", 20.0);
-      it.display_celsius(true);
-      it.printf(1, "%.1f", 20.0);
-      it.display_humidity(true);
+substitutions:
+  cs_pin: GPIO6
+  data_pin: GPIO7
+  read_pin: GPIO2
+  write_pin: GPIO3
+
+<<: !include common.yaml
diff --git a/tests/components/tm1637/common.yaml b/tests/components/tm1637/common.yaml
new file mode 100644
index 0000000000..8d01e29877
--- /dev/null
+++ b/tests/components/tm1637/common.yaml
@@ -0,0 +1,7 @@
+display:
+  - platform: tm1637
+    clk_pin: ${clk_pin}
+    dio_pin: ${dio_pin}
+    intensity: 3
+    lambda: |-
+      it.print("1234");
diff --git a/tests/components/tm1637/test.esp32-ard.yaml b/tests/components/tm1637/test.esp32-ard.yaml
index bf5f331cca..2c5786c47c 100644
--- a/tests/components/tm1637/test.esp32-ard.yaml
+++ b/tests/components/tm1637/test.esp32-ard.yaml
@@ -1,7 +1,5 @@
-display:
-  - platform: tm1637
-    clk_pin: 15
-    dio_pin: 14
-    intensity: 3
-    lambda: |-
-      it.print("1234");
+substitutions:
+  clk_pin: GPIO14
+  dio_pin: GPIO13
+
+<<: !include common.yaml
diff --git a/tests/components/tm1637/test.esp32-c3-ard.yaml b/tests/components/tm1637/test.esp32-c3-ard.yaml
index fa4c95b443..96f6708a3b 100644
--- a/tests/components/tm1637/test.esp32-c3-ard.yaml
+++ b/tests/components/tm1637/test.esp32-c3-ard.yaml
@@ -1,7 +1,5 @@
-display:
-  - platform: tm1637
-    clk_pin: 5
-    dio_pin: 4
-    intensity: 3
-    lambda: |-
-      it.print("1234");
+substitutions:
+  clk_pin: GPIO4
+  dio_pin: GPIO3
+
+<<: !include common.yaml
diff --git a/tests/components/tm1637/test.esp32-c3-idf.yaml b/tests/components/tm1637/test.esp32-c3-idf.yaml
index fa4c95b443..96f6708a3b 100644
--- a/tests/components/tm1637/test.esp32-c3-idf.yaml
+++ b/tests/components/tm1637/test.esp32-c3-idf.yaml
@@ -1,7 +1,5 @@
-display:
-  - platform: tm1637
-    clk_pin: 5
-    dio_pin: 4
-    intensity: 3
-    lambda: |-
-      it.print("1234");
+substitutions:
+  clk_pin: GPIO4
+  dio_pin: GPIO3
+
+<<: !include common.yaml
diff --git a/tests/components/tm1637/test.esp32-idf.yaml b/tests/components/tm1637/test.esp32-idf.yaml
index bf5f331cca..2c5786c47c 100644
--- a/tests/components/tm1637/test.esp32-idf.yaml
+++ b/tests/components/tm1637/test.esp32-idf.yaml
@@ -1,7 +1,5 @@
-display:
-  - platform: tm1637
-    clk_pin: 15
-    dio_pin: 14
-    intensity: 3
-    lambda: |-
-      it.print("1234");
+substitutions:
+  clk_pin: GPIO14
+  dio_pin: GPIO13
+
+<<: !include common.yaml
diff --git a/tests/components/tm1637/test.esp8266-ard.yaml b/tests/components/tm1637/test.esp8266-ard.yaml
index fa4c95b443..2c5786c47c 100644
--- a/tests/components/tm1637/test.esp8266-ard.yaml
+++ b/tests/components/tm1637/test.esp8266-ard.yaml
@@ -1,7 +1,5 @@
-display:
-  - platform: tm1637
-    clk_pin: 5
-    dio_pin: 4
-    intensity: 3
-    lambda: |-
-      it.print("1234");
+substitutions:
+  clk_pin: GPIO14
+  dio_pin: GPIO13
+
+<<: !include common.yaml
diff --git a/tests/components/tm1637/test.rp2040-ard.yaml b/tests/components/tm1637/test.rp2040-ard.yaml
index fa4c95b443..96f6708a3b 100644
--- a/tests/components/tm1637/test.rp2040-ard.yaml
+++ b/tests/components/tm1637/test.rp2040-ard.yaml
@@ -1,7 +1,5 @@
-display:
-  - platform: tm1637
-    clk_pin: 5
-    dio_pin: 4
-    intensity: 3
-    lambda: |-
-      it.print("1234");
+substitutions:
+  clk_pin: GPIO4
+  dio_pin: GPIO3
+
+<<: !include common.yaml
diff --git a/tests/components/tmp102/common.yaml b/tests/components/tmp102/common.yaml
new file mode 100644
index 0000000000..afc4a27fad
--- /dev/null
+++ b/tests/components/tmp102/common.yaml
@@ -0,0 +1,8 @@
+i2c:
+  - id: i2c_tmp102
+    scl: ${scl_pin}
+    sda: ${sda_pin}
+
+sensor:
+  - platform: tmp102
+    name: TMP102 Temperature
diff --git a/tests/components/tmp102/test.esp32-ard.yaml b/tests/components/tmp102/test.esp32-ard.yaml
index 840bf7edb3..63c3bd6afd 100644
--- a/tests/components/tmp102/test.esp32-ard.yaml
+++ b/tests/components/tmp102/test.esp32-ard.yaml
@@ -1,8 +1,5 @@
-i2c:
-  - id: i2c_tmp102
-    scl: 16
-    sda: 17
+substitutions:
+  scl_pin: GPIO16
+  sda_pin: GPIO17
 
-sensor:
-  - platform: tmp102
-    name: TMP102 Temperature
+<<: !include common.yaml
diff --git a/tests/components/tmp102/test.esp32-c3-ard.yaml b/tests/components/tmp102/test.esp32-c3-ard.yaml
index c1d35fca3f..ee2c29ca4e 100644
--- a/tests/components/tmp102/test.esp32-c3-ard.yaml
+++ b/tests/components/tmp102/test.esp32-c3-ard.yaml
@@ -1,8 +1,5 @@
-i2c:
-  - id: i2c_tmp102
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tmp102
-    name: TMP102 Temperature
+<<: !include common.yaml
diff --git a/tests/components/tmp102/test.esp32-c3-idf.yaml b/tests/components/tmp102/test.esp32-c3-idf.yaml
index c1d35fca3f..ee2c29ca4e 100644
--- a/tests/components/tmp102/test.esp32-c3-idf.yaml
+++ b/tests/components/tmp102/test.esp32-c3-idf.yaml
@@ -1,8 +1,5 @@
-i2c:
-  - id: i2c_tmp102
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tmp102
-    name: TMP102 Temperature
+<<: !include common.yaml
diff --git a/tests/components/tmp102/test.esp32-idf.yaml b/tests/components/tmp102/test.esp32-idf.yaml
index 840bf7edb3..63c3bd6afd 100644
--- a/tests/components/tmp102/test.esp32-idf.yaml
+++ b/tests/components/tmp102/test.esp32-idf.yaml
@@ -1,8 +1,5 @@
-i2c:
-  - id: i2c_tmp102
-    scl: 16
-    sda: 17
+substitutions:
+  scl_pin: GPIO16
+  sda_pin: GPIO17
 
-sensor:
-  - platform: tmp102
-    name: TMP102 Temperature
+<<: !include common.yaml
diff --git a/tests/components/tmp102/test.esp8266-ard.yaml b/tests/components/tmp102/test.esp8266-ard.yaml
index c1d35fca3f..ee2c29ca4e 100644
--- a/tests/components/tmp102/test.esp8266-ard.yaml
+++ b/tests/components/tmp102/test.esp8266-ard.yaml
@@ -1,8 +1,5 @@
-i2c:
-  - id: i2c_tmp102
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tmp102
-    name: TMP102 Temperature
+<<: !include common.yaml
diff --git a/tests/components/tmp102/test.rp2040-ard.yaml b/tests/components/tmp102/test.rp2040-ard.yaml
index c1d35fca3f..ee2c29ca4e 100644
--- a/tests/components/tmp102/test.rp2040-ard.yaml
+++ b/tests/components/tmp102/test.rp2040-ard.yaml
@@ -1,8 +1,5 @@
-i2c:
-  - id: i2c_tmp102
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tmp102
-    name: TMP102 Temperature
+<<: !include common.yaml
diff --git a/tests/components/tmp1075/common.yaml b/tests/components/tmp1075/common.yaml
new file mode 100644
index 0000000000..4c4c6c6f35
--- /dev/null
+++ b/tests/components/tmp1075/common.yaml
@@ -0,0 +1,16 @@
+i2c:
+  - id: i2c_tmp1075
+    scl: ${scl_pin}
+    sda: ${sda_pin}
+
+sensor:
+  - platform: tmp1075
+    name: Temperature TMP1075
+    conversion_rate: 27.5ms
+    alert:
+      limit_low: 50
+      limit_high: 75
+      fault_count: 1
+      polarity: active_high
+      function: comparator
+    update_interval: 10s
diff --git a/tests/components/tmp1075/test.esp32-ard.yaml b/tests/components/tmp1075/test.esp32-ard.yaml
index 6c50d0da77..63c3bd6afd 100644
--- a/tests/components/tmp1075/test.esp32-ard.yaml
+++ b/tests/components/tmp1075/test.esp32-ard.yaml
@@ -1,16 +1,5 @@
-i2c:
-  - id: i2c_tmp1075
-    scl: 16
-    sda: 17
+substitutions:
+  scl_pin: GPIO16
+  sda_pin: GPIO17
 
-sensor:
-  - platform: tmp1075
-    name: Temperature TMP1075
-    conversion_rate: 27.5ms
-    alert:
-      limit_low: 50
-      limit_high: 75
-      fault_count: 1
-      polarity: active_high
-      function: comparator
-    update_interval: 10s
+<<: !include common.yaml
diff --git a/tests/components/tmp1075/test.esp32-c3-ard.yaml b/tests/components/tmp1075/test.esp32-c3-ard.yaml
index 99433aa655..ee2c29ca4e 100644
--- a/tests/components/tmp1075/test.esp32-c3-ard.yaml
+++ b/tests/components/tmp1075/test.esp32-c3-ard.yaml
@@ -1,16 +1,5 @@
-i2c:
-  - id: i2c_tmp1075
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tmp1075
-    name: Temperature TMP1075
-    conversion_rate: 27.5ms
-    alert:
-      limit_low: 50
-      limit_high: 75
-      fault_count: 1
-      polarity: active_high
-      function: comparator
-    update_interval: 10s
+<<: !include common.yaml
diff --git a/tests/components/tmp1075/test.esp32-c3-idf.yaml b/tests/components/tmp1075/test.esp32-c3-idf.yaml
index 99433aa655..ee2c29ca4e 100644
--- a/tests/components/tmp1075/test.esp32-c3-idf.yaml
+++ b/tests/components/tmp1075/test.esp32-c3-idf.yaml
@@ -1,16 +1,5 @@
-i2c:
-  - id: i2c_tmp1075
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tmp1075
-    name: Temperature TMP1075
-    conversion_rate: 27.5ms
-    alert:
-      limit_low: 50
-      limit_high: 75
-      fault_count: 1
-      polarity: active_high
-      function: comparator
-    update_interval: 10s
+<<: !include common.yaml
diff --git a/tests/components/tmp1075/test.esp32-idf.yaml b/tests/components/tmp1075/test.esp32-idf.yaml
index 6c50d0da77..63c3bd6afd 100644
--- a/tests/components/tmp1075/test.esp32-idf.yaml
+++ b/tests/components/tmp1075/test.esp32-idf.yaml
@@ -1,16 +1,5 @@
-i2c:
-  - id: i2c_tmp1075
-    scl: 16
-    sda: 17
+substitutions:
+  scl_pin: GPIO16
+  sda_pin: GPIO17
 
-sensor:
-  - platform: tmp1075
-    name: Temperature TMP1075
-    conversion_rate: 27.5ms
-    alert:
-      limit_low: 50
-      limit_high: 75
-      fault_count: 1
-      polarity: active_high
-      function: comparator
-    update_interval: 10s
+<<: !include common.yaml
diff --git a/tests/components/tmp1075/test.esp8266-ard.yaml b/tests/components/tmp1075/test.esp8266-ard.yaml
index 99433aa655..ee2c29ca4e 100644
--- a/tests/components/tmp1075/test.esp8266-ard.yaml
+++ b/tests/components/tmp1075/test.esp8266-ard.yaml
@@ -1,16 +1,5 @@
-i2c:
-  - id: i2c_tmp1075
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tmp1075
-    name: Temperature TMP1075
-    conversion_rate: 27.5ms
-    alert:
-      limit_low: 50
-      limit_high: 75
-      fault_count: 1
-      polarity: active_high
-      function: comparator
-    update_interval: 10s
+<<: !include common.yaml
diff --git a/tests/components/tmp1075/test.rp2040-ard.yaml b/tests/components/tmp1075/test.rp2040-ard.yaml
index 99433aa655..ee2c29ca4e 100644
--- a/tests/components/tmp1075/test.rp2040-ard.yaml
+++ b/tests/components/tmp1075/test.rp2040-ard.yaml
@@ -1,16 +1,5 @@
-i2c:
-  - id: i2c_tmp1075
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tmp1075
-    name: Temperature TMP1075
-    conversion_rate: 27.5ms
-    alert:
-      limit_low: 50
-      limit_high: 75
-      fault_count: 1
-      polarity: active_high
-      function: comparator
-    update_interval: 10s
+<<: !include common.yaml
diff --git a/tests/components/tmp117/common.yaml b/tests/components/tmp117/common.yaml
new file mode 100644
index 0000000000..f4a5688933
--- /dev/null
+++ b/tests/components/tmp117/common.yaml
@@ -0,0 +1,9 @@
+i2c:
+  - id: i2c_tmp117
+    scl: ${scl_pin}
+    sda: ${sda_pin}
+
+sensor:
+  - platform: tmp117
+    name: TMP117 Temperature
+    update_interval: 5s
diff --git a/tests/components/tmp117/test.esp32-ard.yaml b/tests/components/tmp117/test.esp32-ard.yaml
index 03e0dd4e8e..63c3bd6afd 100644
--- a/tests/components/tmp117/test.esp32-ard.yaml
+++ b/tests/components/tmp117/test.esp32-ard.yaml
@@ -1,9 +1,5 @@
-i2c:
-  - id: i2c_tmp117
-    scl: 16
-    sda: 17
+substitutions:
+  scl_pin: GPIO16
+  sda_pin: GPIO17
 
-sensor:
-  - platform: tmp117
-    name: TMP117 Temperature
-    update_interval: 5s
+<<: !include common.yaml
diff --git a/tests/components/tmp117/test.esp32-c3-ard.yaml b/tests/components/tmp117/test.esp32-c3-ard.yaml
index 61fc2cc03d..ee2c29ca4e 100644
--- a/tests/components/tmp117/test.esp32-c3-ard.yaml
+++ b/tests/components/tmp117/test.esp32-c3-ard.yaml
@@ -1,9 +1,5 @@
-i2c:
-  - id: i2c_tmp117
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tmp117
-    name: TMP117 Temperature
-    update_interval: 5s
+<<: !include common.yaml
diff --git a/tests/components/tmp117/test.esp32-c3-idf.yaml b/tests/components/tmp117/test.esp32-c3-idf.yaml
index 61fc2cc03d..ee2c29ca4e 100644
--- a/tests/components/tmp117/test.esp32-c3-idf.yaml
+++ b/tests/components/tmp117/test.esp32-c3-idf.yaml
@@ -1,9 +1,5 @@
-i2c:
-  - id: i2c_tmp117
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tmp117
-    name: TMP117 Temperature
-    update_interval: 5s
+<<: !include common.yaml
diff --git a/tests/components/tmp117/test.esp32-idf.yaml b/tests/components/tmp117/test.esp32-idf.yaml
index 03e0dd4e8e..63c3bd6afd 100644
--- a/tests/components/tmp117/test.esp32-idf.yaml
+++ b/tests/components/tmp117/test.esp32-idf.yaml
@@ -1,9 +1,5 @@
-i2c:
-  - id: i2c_tmp117
-    scl: 16
-    sda: 17
+substitutions:
+  scl_pin: GPIO16
+  sda_pin: GPIO17
 
-sensor:
-  - platform: tmp117
-    name: TMP117 Temperature
-    update_interval: 5s
+<<: !include common.yaml
diff --git a/tests/components/tmp117/test.esp8266-ard.yaml b/tests/components/tmp117/test.esp8266-ard.yaml
index 61fc2cc03d..ee2c29ca4e 100644
--- a/tests/components/tmp117/test.esp8266-ard.yaml
+++ b/tests/components/tmp117/test.esp8266-ard.yaml
@@ -1,9 +1,5 @@
-i2c:
-  - id: i2c_tmp117
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tmp117
-    name: TMP117 Temperature
-    update_interval: 5s
+<<: !include common.yaml
diff --git a/tests/components/tmp117/test.rp2040-ard.yaml b/tests/components/tmp117/test.rp2040-ard.yaml
index 61fc2cc03d..ee2c29ca4e 100644
--- a/tests/components/tmp117/test.rp2040-ard.yaml
+++ b/tests/components/tmp117/test.rp2040-ard.yaml
@@ -1,9 +1,5 @@
-i2c:
-  - id: i2c_tmp117
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tmp117
-    name: TMP117 Temperature
-    update_interval: 5s
+<<: !include common.yaml
diff --git a/tests/components/tof10120/common.yaml b/tests/components/tof10120/common.yaml
new file mode 100644
index 0000000000..67643323d9
--- /dev/null
+++ b/tests/components/tof10120/common.yaml
@@ -0,0 +1,9 @@
+i2c:
+  - id: i2c_tof10120
+    scl: ${scl_pin}
+    sda: ${sda_pin}
+
+sensor:
+  - platform: tof10120
+    name: Distance sensor
+    update_interval: 5s
diff --git a/tests/components/tof10120/test.esp32-ard.yaml b/tests/components/tof10120/test.esp32-ard.yaml
index 74541ecde8..63c3bd6afd 100644
--- a/tests/components/tof10120/test.esp32-ard.yaml
+++ b/tests/components/tof10120/test.esp32-ard.yaml
@@ -1,9 +1,5 @@
-i2c:
-  - id: i2c_tof10120
-    scl: 16
-    sda: 17
+substitutions:
+  scl_pin: GPIO16
+  sda_pin: GPIO17
 
-sensor:
-  - platform: tof10120
-    name: Distance sensor
-    update_interval: 5s
+<<: !include common.yaml
diff --git a/tests/components/tof10120/test.esp32-c3-ard.yaml b/tests/components/tof10120/test.esp32-c3-ard.yaml
index 01cde0df6a..ee2c29ca4e 100644
--- a/tests/components/tof10120/test.esp32-c3-ard.yaml
+++ b/tests/components/tof10120/test.esp32-c3-ard.yaml
@@ -1,9 +1,5 @@
-i2c:
-  - id: i2c_tof10120
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tof10120
-    name: Distance sensor
-    update_interval: 5s
+<<: !include common.yaml
diff --git a/tests/components/tof10120/test.esp32-c3-idf.yaml b/tests/components/tof10120/test.esp32-c3-idf.yaml
index 01cde0df6a..ee2c29ca4e 100644
--- a/tests/components/tof10120/test.esp32-c3-idf.yaml
+++ b/tests/components/tof10120/test.esp32-c3-idf.yaml
@@ -1,9 +1,5 @@
-i2c:
-  - id: i2c_tof10120
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tof10120
-    name: Distance sensor
-    update_interval: 5s
+<<: !include common.yaml
diff --git a/tests/components/tof10120/test.esp32-idf.yaml b/tests/components/tof10120/test.esp32-idf.yaml
index 74541ecde8..63c3bd6afd 100644
--- a/tests/components/tof10120/test.esp32-idf.yaml
+++ b/tests/components/tof10120/test.esp32-idf.yaml
@@ -1,9 +1,5 @@
-i2c:
-  - id: i2c_tof10120
-    scl: 16
-    sda: 17
+substitutions:
+  scl_pin: GPIO16
+  sda_pin: GPIO17
 
-sensor:
-  - platform: tof10120
-    name: Distance sensor
-    update_interval: 5s
+<<: !include common.yaml
diff --git a/tests/components/tof10120/test.esp8266-ard.yaml b/tests/components/tof10120/test.esp8266-ard.yaml
index 01cde0df6a..ee2c29ca4e 100644
--- a/tests/components/tof10120/test.esp8266-ard.yaml
+++ b/tests/components/tof10120/test.esp8266-ard.yaml
@@ -1,9 +1,5 @@
-i2c:
-  - id: i2c_tof10120
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tof10120
-    name: Distance sensor
-    update_interval: 5s
+<<: !include common.yaml
diff --git a/tests/components/tof10120/test.rp2040-ard.yaml b/tests/components/tof10120/test.rp2040-ard.yaml
index 01cde0df6a..ee2c29ca4e 100644
--- a/tests/components/tof10120/test.rp2040-ard.yaml
+++ b/tests/components/tof10120/test.rp2040-ard.yaml
@@ -1,9 +1,5 @@
-i2c:
-  - id: i2c_tof10120
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tof10120
-    name: Distance sensor
-    update_interval: 5s
+<<: !include common.yaml
diff --git a/tests/components/toshiba/common.yaml b/tests/components/toshiba/common.yaml
new file mode 100644
index 0000000000..79a833980e
--- /dev/null
+++ b/tests/components/toshiba/common.yaml
@@ -0,0 +1,7 @@
+remote_transmitter:
+  pin: ${pin}
+  carrier_duty_percent: 50%
+
+climate:
+  - platform: toshiba
+    name: Toshiba Climate
diff --git a/tests/components/toshiba/test.esp32-ard.yaml b/tests/components/toshiba/test.esp32-ard.yaml
index c134c7f5bd..7b012aa64c 100644
--- a/tests/components/toshiba/test.esp32-ard.yaml
+++ b/tests/components/toshiba/test.esp32-ard.yaml
@@ -1,7 +1,4 @@
-remote_transmitter:
-  pin: 2
-  carrier_duty_percent: 50%
+substitutions:
+  pin: GPIO2
 
-climate:
-  - platform: toshiba
-    name: Toshiba Climate
+<<: !include common.yaml
diff --git a/tests/components/toshiba/test.esp32-c3-ard.yaml b/tests/components/toshiba/test.esp32-c3-ard.yaml
index c134c7f5bd..7b012aa64c 100644
--- a/tests/components/toshiba/test.esp32-c3-ard.yaml
+++ b/tests/components/toshiba/test.esp32-c3-ard.yaml
@@ -1,7 +1,4 @@
-remote_transmitter:
-  pin: 2
-  carrier_duty_percent: 50%
+substitutions:
+  pin: GPIO2
 
-climate:
-  - platform: toshiba
-    name: Toshiba Climate
+<<: !include common.yaml
diff --git a/tests/components/toshiba/test.esp32-c3-idf.yaml b/tests/components/toshiba/test.esp32-c3-idf.yaml
index c134c7f5bd..7b012aa64c 100644
--- a/tests/components/toshiba/test.esp32-c3-idf.yaml
+++ b/tests/components/toshiba/test.esp32-c3-idf.yaml
@@ -1,7 +1,4 @@
-remote_transmitter:
-  pin: 2
-  carrier_duty_percent: 50%
+substitutions:
+  pin: GPIO2
 
-climate:
-  - platform: toshiba
-    name: Toshiba Climate
+<<: !include common.yaml
diff --git a/tests/components/toshiba/test.esp32-idf.yaml b/tests/components/toshiba/test.esp32-idf.yaml
index c134c7f5bd..7b012aa64c 100644
--- a/tests/components/toshiba/test.esp32-idf.yaml
+++ b/tests/components/toshiba/test.esp32-idf.yaml
@@ -1,7 +1,4 @@
-remote_transmitter:
-  pin: 2
-  carrier_duty_percent: 50%
+substitutions:
+  pin: GPIO2
 
-climate:
-  - platform: toshiba
-    name: Toshiba Climate
+<<: !include common.yaml
diff --git a/tests/components/toshiba/test.esp8266-ard.yaml b/tests/components/toshiba/test.esp8266-ard.yaml
index 8730a5d4ab..f5097fcf5f 100644
--- a/tests/components/toshiba/test.esp8266-ard.yaml
+++ b/tests/components/toshiba/test.esp8266-ard.yaml
@@ -1,7 +1,4 @@
-remote_transmitter:
-  pin: 5
-  carrier_duty_percent: 50%
+substitutions:
+  pin: GPIO5
 
-climate:
-  - platform: toshiba
-    name: Toshiba Climate
+<<: !include common.yaml
diff --git a/tests/components/total_daily_energy/common.yaml b/tests/components/total_daily_energy/common.yaml
new file mode 100644
index 0000000000..ae4d30408b
--- /dev/null
+++ b/tests/components/total_daily_energy/common.yaml
@@ -0,0 +1,32 @@
+wifi:
+  ssid: MySSID
+  password: password1
+
+time:
+  - platform: sntp
+    id: sntp_time
+
+sensor:
+  - platform: hlw8012
+    sel_pin: ${sel_pin}
+    cf_pin: ${cf_pin}
+    cf1_pin: ${cf1_pin}
+    current:
+      name: HLW8012 Current
+    voltage:
+      name: HLW8012 Voltage
+    power:
+      name: HLW8012 Power
+      id: hlw8012_power
+    energy:
+      name: HLW8012 Energy
+      id: hlw8012_energy
+    update_interval: 15s
+    current_resistor: 0.001 ohm
+    voltage_divider: 2351
+    change_mode_every: "never"
+    initial_mode: VOLTAGE
+    model: hlw8012
+  - platform: total_daily_energy
+    name: HLW8012 Total Daily Energy
+    power_id: hlw8012_power
diff --git a/tests/components/total_daily_energy/test.esp32-ard.yaml b/tests/components/total_daily_energy/test.esp32-ard.yaml
index 34d452aae5..8b42b21b54 100644
--- a/tests/components/total_daily_energy/test.esp32-ard.yaml
+++ b/tests/components/total_daily_energy/test.esp32-ard.yaml
@@ -1,32 +1,6 @@
-wifi:
-  ssid: MySSID
-  password: password1
+substitutions:
+  sel_pin: GPIO12
+  cf_pin: GPIO13
+  cf1_pin: GPIO14
 
-time:
-  - platform: sntp
-    id: sntp_time
-
-sensor:
-  - platform: hlw8012
-    sel_pin: 15
-    cf_pin: 14
-    cf1_pin: 13
-    current:
-      name: HLW8012 Current
-    voltage:
-      name: HLW8012 Voltage
-    power:
-      name: HLW8012 Power
-      id: hlw8012_power
-    energy:
-      name: HLW8012 Energy
-      id: hlw8012_energy
-    update_interval: 15s
-    current_resistor: 0.001 ohm
-    voltage_divider: 2351
-    change_mode_every: "never"
-    initial_mode: VOLTAGE
-    model: hlw8012
-  - platform: total_daily_energy
-    name: HLW8012 Total Daily Energy
-    power_id: hlw8012_power
+<<: !include common.yaml
diff --git a/tests/components/total_daily_energy/test.esp32-c3-ard.yaml b/tests/components/total_daily_energy/test.esp32-c3-ard.yaml
index 71afa45ed5..8b0d069ce2 100644
--- a/tests/components/total_daily_energy/test.esp32-c3-ard.yaml
+++ b/tests/components/total_daily_energy/test.esp32-c3-ard.yaml
@@ -1,32 +1,6 @@
-wifi:
-  ssid: MySSID
-  password: password1
+substitutions:
+  sel_pin: GPIO2
+  cf_pin: GPIO3
+  cf1_pin: GPIO4
 
-time:
-  - platform: sntp
-    id: sntp_time
-
-sensor:
-  - platform: hlw8012
-    sel_pin: 5
-    cf_pin: 4
-    cf1_pin: 3
-    current:
-      name: HLW8012 Current
-    voltage:
-      name: HLW8012 Voltage
-    power:
-      name: HLW8012 Power
-      id: hlw8012_power
-    energy:
-      name: HLW8012 Energy
-      id: hlw8012_energy
-    update_interval: 15s
-    current_resistor: 0.001 ohm
-    voltage_divider: 2351
-    change_mode_every: "never"
-    initial_mode: VOLTAGE
-    model: hlw8012
-  - platform: total_daily_energy
-    name: HLW8012 Total Daily Energy
-    power_id: hlw8012_power
+<<: !include common.yaml
diff --git a/tests/components/total_daily_energy/test.esp32-c3-idf.yaml b/tests/components/total_daily_energy/test.esp32-c3-idf.yaml
index 71afa45ed5..8b0d069ce2 100644
--- a/tests/components/total_daily_energy/test.esp32-c3-idf.yaml
+++ b/tests/components/total_daily_energy/test.esp32-c3-idf.yaml
@@ -1,32 +1,6 @@
-wifi:
-  ssid: MySSID
-  password: password1
+substitutions:
+  sel_pin: GPIO2
+  cf_pin: GPIO3
+  cf1_pin: GPIO4
 
-time:
-  - platform: sntp
-    id: sntp_time
-
-sensor:
-  - platform: hlw8012
-    sel_pin: 5
-    cf_pin: 4
-    cf1_pin: 3
-    current:
-      name: HLW8012 Current
-    voltage:
-      name: HLW8012 Voltage
-    power:
-      name: HLW8012 Power
-      id: hlw8012_power
-    energy:
-      name: HLW8012 Energy
-      id: hlw8012_energy
-    update_interval: 15s
-    current_resistor: 0.001 ohm
-    voltage_divider: 2351
-    change_mode_every: "never"
-    initial_mode: VOLTAGE
-    model: hlw8012
-  - platform: total_daily_energy
-    name: HLW8012 Total Daily Energy
-    power_id: hlw8012_power
+<<: !include common.yaml
diff --git a/tests/components/total_daily_energy/test.esp32-idf.yaml b/tests/components/total_daily_energy/test.esp32-idf.yaml
index 34d452aae5..8b42b21b54 100644
--- a/tests/components/total_daily_energy/test.esp32-idf.yaml
+++ b/tests/components/total_daily_energy/test.esp32-idf.yaml
@@ -1,32 +1,6 @@
-wifi:
-  ssid: MySSID
-  password: password1
+substitutions:
+  sel_pin: GPIO12
+  cf_pin: GPIO13
+  cf1_pin: GPIO14
 
-time:
-  - platform: sntp
-    id: sntp_time
-
-sensor:
-  - platform: hlw8012
-    sel_pin: 15
-    cf_pin: 14
-    cf1_pin: 13
-    current:
-      name: HLW8012 Current
-    voltage:
-      name: HLW8012 Voltage
-    power:
-      name: HLW8012 Power
-      id: hlw8012_power
-    energy:
-      name: HLW8012 Energy
-      id: hlw8012_energy
-    update_interval: 15s
-    current_resistor: 0.001 ohm
-    voltage_divider: 2351
-    change_mode_every: "never"
-    initial_mode: VOLTAGE
-    model: hlw8012
-  - platform: total_daily_energy
-    name: HLW8012 Total Daily Energy
-    power_id: hlw8012_power
+<<: !include common.yaml
diff --git a/tests/components/total_daily_energy/test.esp8266-ard.yaml b/tests/components/total_daily_energy/test.esp8266-ard.yaml
index 34d452aae5..8b42b21b54 100644
--- a/tests/components/total_daily_energy/test.esp8266-ard.yaml
+++ b/tests/components/total_daily_energy/test.esp8266-ard.yaml
@@ -1,32 +1,6 @@
-wifi:
-  ssid: MySSID
-  password: password1
+substitutions:
+  sel_pin: GPIO12
+  cf_pin: GPIO13
+  cf1_pin: GPIO14
 
-time:
-  - platform: sntp
-    id: sntp_time
-
-sensor:
-  - platform: hlw8012
-    sel_pin: 15
-    cf_pin: 14
-    cf1_pin: 13
-    current:
-      name: HLW8012 Current
-    voltage:
-      name: HLW8012 Voltage
-    power:
-      name: HLW8012 Power
-      id: hlw8012_power
-    energy:
-      name: HLW8012 Energy
-      id: hlw8012_energy
-    update_interval: 15s
-    current_resistor: 0.001 ohm
-    voltage_divider: 2351
-    change_mode_every: "never"
-    initial_mode: VOLTAGE
-    model: hlw8012
-  - platform: total_daily_energy
-    name: HLW8012 Total Daily Energy
-    power_id: hlw8012_power
+<<: !include common.yaml
diff --git a/tests/components/total_daily_energy/test.rp2040-ard.yaml b/tests/components/total_daily_energy/test.rp2040-ard.yaml
index 71afa45ed5..8b0d069ce2 100644
--- a/tests/components/total_daily_energy/test.rp2040-ard.yaml
+++ b/tests/components/total_daily_energy/test.rp2040-ard.yaml
@@ -1,32 +1,6 @@
-wifi:
-  ssid: MySSID
-  password: password1
+substitutions:
+  sel_pin: GPIO2
+  cf_pin: GPIO3
+  cf1_pin: GPIO4
 
-time:
-  - platform: sntp
-    id: sntp_time
-
-sensor:
-  - platform: hlw8012
-    sel_pin: 5
-    cf_pin: 4
-    cf1_pin: 3
-    current:
-      name: HLW8012 Current
-    voltage:
-      name: HLW8012 Voltage
-    power:
-      name: HLW8012 Power
-      id: hlw8012_power
-    energy:
-      name: HLW8012 Energy
-      id: hlw8012_energy
-    update_interval: 15s
-    current_resistor: 0.001 ohm
-    voltage_divider: 2351
-    change_mode_every: "never"
-    initial_mode: VOLTAGE
-    model: hlw8012
-  - platform: total_daily_energy
-    name: HLW8012 Total Daily Energy
-    power_id: hlw8012_power
+<<: !include common.yaml
diff --git a/tests/components/tsl2561/common.yaml b/tests/components/tsl2561/common.yaml
new file mode 100644
index 0000000000..d2b4f75df3
--- /dev/null
+++ b/tests/components/tsl2561/common.yaml
@@ -0,0 +1,13 @@
+i2c:
+  - id: i2c_tsl2561
+    scl: ${scl_pin}
+    sda: ${sda_pin}
+
+sensor:
+  - platform: tsl2561
+    name: TSL2561 Ambient Light
+    address: 0x39
+    is_cs_package: true
+    integration_time: 402ms
+    gain: 16x
+    update_interval: 15s
diff --git a/tests/components/tsl2561/test.esp32-ard.yaml b/tests/components/tsl2561/test.esp32-ard.yaml
index 8d43c62414..63c3bd6afd 100644
--- a/tests/components/tsl2561/test.esp32-ard.yaml
+++ b/tests/components/tsl2561/test.esp32-ard.yaml
@@ -1,13 +1,5 @@
-i2c:
-  - id: i2c_tsl2561
-    scl: 16
-    sda: 17
+substitutions:
+  scl_pin: GPIO16
+  sda_pin: GPIO17
 
-sensor:
-  - platform: tsl2561
-    name: TSL2561 Ambient Light
-    address: 0x39
-    is_cs_package: true
-    integration_time: 402ms
-    gain: 16x
-    update_interval: 15s
+<<: !include common.yaml
diff --git a/tests/components/tsl2561/test.esp32-c3-ard.yaml b/tests/components/tsl2561/test.esp32-c3-ard.yaml
index 1ea768c5d9..ee2c29ca4e 100644
--- a/tests/components/tsl2561/test.esp32-c3-ard.yaml
+++ b/tests/components/tsl2561/test.esp32-c3-ard.yaml
@@ -1,13 +1,5 @@
-i2c:
-  - id: i2c_tsl2561
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tsl2561
-    name: TSL2561 Ambient Light
-    address: 0x39
-    is_cs_package: true
-    integration_time: 402ms
-    gain: 16x
-    update_interval: 15s
+<<: !include common.yaml
diff --git a/tests/components/tsl2561/test.esp32-c3-idf.yaml b/tests/components/tsl2561/test.esp32-c3-idf.yaml
index 1ea768c5d9..ee2c29ca4e 100644
--- a/tests/components/tsl2561/test.esp32-c3-idf.yaml
+++ b/tests/components/tsl2561/test.esp32-c3-idf.yaml
@@ -1,13 +1,5 @@
-i2c:
-  - id: i2c_tsl2561
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tsl2561
-    name: TSL2561 Ambient Light
-    address: 0x39
-    is_cs_package: true
-    integration_time: 402ms
-    gain: 16x
-    update_interval: 15s
+<<: !include common.yaml
diff --git a/tests/components/tsl2561/test.esp32-idf.yaml b/tests/components/tsl2561/test.esp32-idf.yaml
index 8d43c62414..63c3bd6afd 100644
--- a/tests/components/tsl2561/test.esp32-idf.yaml
+++ b/tests/components/tsl2561/test.esp32-idf.yaml
@@ -1,13 +1,5 @@
-i2c:
-  - id: i2c_tsl2561
-    scl: 16
-    sda: 17
+substitutions:
+  scl_pin: GPIO16
+  sda_pin: GPIO17
 
-sensor:
-  - platform: tsl2561
-    name: TSL2561 Ambient Light
-    address: 0x39
-    is_cs_package: true
-    integration_time: 402ms
-    gain: 16x
-    update_interval: 15s
+<<: !include common.yaml
diff --git a/tests/components/tsl2561/test.esp8266-ard.yaml b/tests/components/tsl2561/test.esp8266-ard.yaml
index 1ea768c5d9..ee2c29ca4e 100644
--- a/tests/components/tsl2561/test.esp8266-ard.yaml
+++ b/tests/components/tsl2561/test.esp8266-ard.yaml
@@ -1,13 +1,5 @@
-i2c:
-  - id: i2c_tsl2561
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tsl2561
-    name: TSL2561 Ambient Light
-    address: 0x39
-    is_cs_package: true
-    integration_time: 402ms
-    gain: 16x
-    update_interval: 15s
+<<: !include common.yaml
diff --git a/tests/components/tsl2561/test.rp2040-ard.yaml b/tests/components/tsl2561/test.rp2040-ard.yaml
index 1ea768c5d9..ee2c29ca4e 100644
--- a/tests/components/tsl2561/test.rp2040-ard.yaml
+++ b/tests/components/tsl2561/test.rp2040-ard.yaml
@@ -1,13 +1,5 @@
-i2c:
-  - id: i2c_tsl2561
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tsl2561
-    name: TSL2561 Ambient Light
-    address: 0x39
-    is_cs_package: true
-    integration_time: 402ms
-    gain: 16x
-    update_interval: 15s
+<<: !include common.yaml
diff --git a/tests/components/tsl2591/common.yaml b/tests/components/tsl2591/common.yaml
new file mode 100644
index 0000000000..d58c46fb48
--- /dev/null
+++ b/tests/components/tsl2591/common.yaml
@@ -0,0 +1,25 @@
+i2c:
+  - id: i2c_tsl2591
+    scl: ${scl_pin}
+    sda: ${sda_pin}
+
+sensor:
+  - platform: tsl2591
+    id: test_tsl2591
+    address: 0x29
+    integration_time: 600ms
+    gain: high
+    visible:
+      name: tsl2591 visible
+      id: tsl2591_vis
+      unit_of_measurement: pH
+    infrared:
+      name: tsl2591 infrared
+      id: tsl2591_ir
+    full_spectrum:
+      name: tsl2591 full_spectrum
+      id: tsl2591_fs
+    calculated_lux:
+      name: tsl2591 calculated_lux
+      id: tsl2591_cl
+    update_interval: 15s
diff --git a/tests/components/tsl2591/test.esp32-ard.yaml b/tests/components/tsl2591/test.esp32-ard.yaml
index 14f9311ae6..63c3bd6afd 100644
--- a/tests/components/tsl2591/test.esp32-ard.yaml
+++ b/tests/components/tsl2591/test.esp32-ard.yaml
@@ -1,25 +1,5 @@
-i2c:
-  - id: i2c_tsl2591
-    scl: 16
-    sda: 17
+substitutions:
+  scl_pin: GPIO16
+  sda_pin: GPIO17
 
-sensor:
-  - platform: tsl2591
-    id: test_tsl2591
-    address: 0x29
-    integration_time: 600ms
-    gain: high
-    visible:
-      name: tsl2591 visible
-      id: tsl2591_vis
-      unit_of_measurement: pH
-    infrared:
-      name: tsl2591 infrared
-      id: tsl2591_ir
-    full_spectrum:
-      name: tsl2591 full_spectrum
-      id: tsl2591_fs
-    calculated_lux:
-      name: tsl2591 calculated_lux
-      id: tsl2591_cl
-    update_interval: 15s
+<<: !include common.yaml
diff --git a/tests/components/tsl2591/test.esp32-c3-ard.yaml b/tests/components/tsl2591/test.esp32-c3-ard.yaml
index de57ef548a..ee2c29ca4e 100644
--- a/tests/components/tsl2591/test.esp32-c3-ard.yaml
+++ b/tests/components/tsl2591/test.esp32-c3-ard.yaml
@@ -1,25 +1,5 @@
-i2c:
-  - id: i2c_tsl2591
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tsl2591
-    id: test_tsl2591
-    address: 0x29
-    integration_time: 600ms
-    gain: high
-    visible:
-      name: tsl2591 visible
-      id: tsl2591_vis
-      unit_of_measurement: pH
-    infrared:
-      name: tsl2591 infrared
-      id: tsl2591_ir
-    full_spectrum:
-      name: tsl2591 full_spectrum
-      id: tsl2591_fs
-    calculated_lux:
-      name: tsl2591 calculated_lux
-      id: tsl2591_cl
-    update_interval: 15s
+<<: !include common.yaml
diff --git a/tests/components/tsl2591/test.esp32-c3-idf.yaml b/tests/components/tsl2591/test.esp32-c3-idf.yaml
index de57ef548a..ee2c29ca4e 100644
--- a/tests/components/tsl2591/test.esp32-c3-idf.yaml
+++ b/tests/components/tsl2591/test.esp32-c3-idf.yaml
@@ -1,25 +1,5 @@
-i2c:
-  - id: i2c_tsl2591
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tsl2591
-    id: test_tsl2591
-    address: 0x29
-    integration_time: 600ms
-    gain: high
-    visible:
-      name: tsl2591 visible
-      id: tsl2591_vis
-      unit_of_measurement: pH
-    infrared:
-      name: tsl2591 infrared
-      id: tsl2591_ir
-    full_spectrum:
-      name: tsl2591 full_spectrum
-      id: tsl2591_fs
-    calculated_lux:
-      name: tsl2591 calculated_lux
-      id: tsl2591_cl
-    update_interval: 15s
+<<: !include common.yaml
diff --git a/tests/components/tsl2591/test.esp32-idf.yaml b/tests/components/tsl2591/test.esp32-idf.yaml
index 14f9311ae6..63c3bd6afd 100644
--- a/tests/components/tsl2591/test.esp32-idf.yaml
+++ b/tests/components/tsl2591/test.esp32-idf.yaml
@@ -1,25 +1,5 @@
-i2c:
-  - id: i2c_tsl2591
-    scl: 16
-    sda: 17
+substitutions:
+  scl_pin: GPIO16
+  sda_pin: GPIO17
 
-sensor:
-  - platform: tsl2591
-    id: test_tsl2591
-    address: 0x29
-    integration_time: 600ms
-    gain: high
-    visible:
-      name: tsl2591 visible
-      id: tsl2591_vis
-      unit_of_measurement: pH
-    infrared:
-      name: tsl2591 infrared
-      id: tsl2591_ir
-    full_spectrum:
-      name: tsl2591 full_spectrum
-      id: tsl2591_fs
-    calculated_lux:
-      name: tsl2591 calculated_lux
-      id: tsl2591_cl
-    update_interval: 15s
+<<: !include common.yaml
diff --git a/tests/components/tsl2591/test.esp8266-ard.yaml b/tests/components/tsl2591/test.esp8266-ard.yaml
index de57ef548a..ee2c29ca4e 100644
--- a/tests/components/tsl2591/test.esp8266-ard.yaml
+++ b/tests/components/tsl2591/test.esp8266-ard.yaml
@@ -1,25 +1,5 @@
-i2c:
-  - id: i2c_tsl2591
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tsl2591
-    id: test_tsl2591
-    address: 0x29
-    integration_time: 600ms
-    gain: high
-    visible:
-      name: tsl2591 visible
-      id: tsl2591_vis
-      unit_of_measurement: pH
-    infrared:
-      name: tsl2591 infrared
-      id: tsl2591_ir
-    full_spectrum:
-      name: tsl2591 full_spectrum
-      id: tsl2591_fs
-    calculated_lux:
-      name: tsl2591 calculated_lux
-      id: tsl2591_cl
-    update_interval: 15s
+<<: !include common.yaml
diff --git a/tests/components/tsl2591/test.rp2040-ard.yaml b/tests/components/tsl2591/test.rp2040-ard.yaml
index de57ef548a..ee2c29ca4e 100644
--- a/tests/components/tsl2591/test.rp2040-ard.yaml
+++ b/tests/components/tsl2591/test.rp2040-ard.yaml
@@ -1,25 +1,5 @@
-i2c:
-  - id: i2c_tsl2591
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-sensor:
-  - platform: tsl2591
-    id: test_tsl2591
-    address: 0x29
-    integration_time: 600ms
-    gain: high
-    visible:
-      name: tsl2591 visible
-      id: tsl2591_vis
-      unit_of_measurement: pH
-    infrared:
-      name: tsl2591 infrared
-      id: tsl2591_ir
-    full_spectrum:
-      name: tsl2591 full_spectrum
-      id: tsl2591_fs
-    calculated_lux:
-      name: tsl2591 calculated_lux
-      id: tsl2591_cl
-    update_interval: 15s
+<<: !include common.yaml
diff --git a/tests/components/tt21100/common.yaml b/tests/components/tt21100/common.yaml
new file mode 100644
index 0000000000..a5d7970429
--- /dev/null
+++ b/tests/components/tt21100/common.yaml
@@ -0,0 +1,25 @@
+i2c:
+  - id: i2c_tt21100
+    scl: ${scl_pin}
+    sda: ${sda_pin}
+
+display:
+  - platform: ssd1306_i2c
+    id: ssd1306_display
+    model: SSD1306_128X64
+    reset_pin: ${disp_reset_pin}
+    pages:
+      - id: page1
+        lambda: |-
+          it.rectangle(0, 0, it.get_width(), it.get_height());
+
+touchscreen:
+  - platform: tt21100
+    display: ssd1306_display
+    interrupt_pin: ${interrupt_pin}
+    reset_pin: ${reset_pin}
+
+binary_sensor:
+  - platform: tt21100
+    name: Home Button
+    index: 1
diff --git a/tests/components/tt21100/test.esp32-ard.yaml b/tests/components/tt21100/test.esp32-ard.yaml
index 2419b0ad6a..05598719f9 100644
--- a/tests/components/tt21100/test.esp32-ard.yaml
+++ b/tests/components/tt21100/test.esp32-ard.yaml
@@ -1,25 +1,8 @@
-i2c:
-  - id: i2c_tt21100
-    scl: 16
-    sda: 17
+substitutions:
+  disp_reset_pin: GPIO12
+  scl_pin: GPIO13
+  sda_pin: GPIO14
+  interrupt_pin: GPIO15
+  reset_pin: GPIO16
 
-display:
-  - platform: ssd1306_i2c
-    id: ssd1306_display
-    model: SSD1306_128X64
-    reset_pin: 13
-    pages:
-      - id: page1
-        lambda: |-
-          it.rectangle(0, 0, it.get_width(), it.get_height());
-
-touchscreen:
-  - platform: tt21100
-    display: ssd1306_display
-    interrupt_pin: 14
-    reset_pin: 15
-
-binary_sensor:
-  - platform: tt21100
-    name: Home Button
-    index: 1
+<<: !include common.yaml
diff --git a/tests/components/tt21100/test.esp32-c3-ard.yaml b/tests/components/tt21100/test.esp32-c3-ard.yaml
index 17b8c8065a..36a8ce2778 100644
--- a/tests/components/tt21100/test.esp32-c3-ard.yaml
+++ b/tests/components/tt21100/test.esp32-c3-ard.yaml
@@ -1,25 +1,8 @@
-i2c:
-  - id: i2c_tt21100
-    scl: 5
-    sda: 4
+substitutions:
+  disp_reset_pin: GPIO10
+  scl_pin: GPIO0
+  sda_pin: GPIO1
+  interrupt_pin: GPIO2
+  reset_pin: GPIO3
 
-display:
-  - platform: ssd1306_i2c
-    id: ssd1306_display
-    model: SSD1306_128X64
-    reset_pin: 3
-    pages:
-      - id: page1
-        lambda: |-
-          it.rectangle(0, 0, it.get_width(), it.get_height());
-
-touchscreen:
-  - platform: tt21100
-    display: ssd1306_display
-    interrupt_pin: 6
-    reset_pin: 7
-
-binary_sensor:
-  - platform: tt21100
-    name: Home Button
-    index: 1
+<<: !include common.yaml
diff --git a/tests/components/tt21100/test.esp32-c3-idf.yaml b/tests/components/tt21100/test.esp32-c3-idf.yaml
index 17b8c8065a..36a8ce2778 100644
--- a/tests/components/tt21100/test.esp32-c3-idf.yaml
+++ b/tests/components/tt21100/test.esp32-c3-idf.yaml
@@ -1,25 +1,8 @@
-i2c:
-  - id: i2c_tt21100
-    scl: 5
-    sda: 4
+substitutions:
+  disp_reset_pin: GPIO10
+  scl_pin: GPIO0
+  sda_pin: GPIO1
+  interrupt_pin: GPIO2
+  reset_pin: GPIO3
 
-display:
-  - platform: ssd1306_i2c
-    id: ssd1306_display
-    model: SSD1306_128X64
-    reset_pin: 3
-    pages:
-      - id: page1
-        lambda: |-
-          it.rectangle(0, 0, it.get_width(), it.get_height());
-
-touchscreen:
-  - platform: tt21100
-    display: ssd1306_display
-    interrupt_pin: 6
-    reset_pin: 7
-
-binary_sensor:
-  - platform: tt21100
-    name: Home Button
-    index: 1
+<<: !include common.yaml
diff --git a/tests/components/tt21100/test.esp32-idf.yaml b/tests/components/tt21100/test.esp32-idf.yaml
index 2419b0ad6a..05598719f9 100644
--- a/tests/components/tt21100/test.esp32-idf.yaml
+++ b/tests/components/tt21100/test.esp32-idf.yaml
@@ -1,25 +1,8 @@
-i2c:
-  - id: i2c_tt21100
-    scl: 16
-    sda: 17
+substitutions:
+  disp_reset_pin: GPIO12
+  scl_pin: GPIO13
+  sda_pin: GPIO14
+  interrupt_pin: GPIO15
+  reset_pin: GPIO16
 
-display:
-  - platform: ssd1306_i2c
-    id: ssd1306_display
-    model: SSD1306_128X64
-    reset_pin: 13
-    pages:
-      - id: page1
-        lambda: |-
-          it.rectangle(0, 0, it.get_width(), it.get_height());
-
-touchscreen:
-  - platform: tt21100
-    display: ssd1306_display
-    interrupt_pin: 14
-    reset_pin: 15
-
-binary_sensor:
-  - platform: tt21100
-    name: Home Button
-    index: 1
+<<: !include common.yaml
diff --git a/tests/components/tt21100/test.esp32-s2-ard.yaml b/tests/components/tt21100/test.esp32-s2-ard.yaml
deleted file mode 100644
index 86b9e7530d..0000000000
--- a/tests/components/tt21100/test.esp32-s2-ard.yaml
+++ /dev/null
@@ -1,44 +0,0 @@
-i2c:
-  sda: GPIO8
-  scl: GPIO18
-
-spi:
-  clk_pin: 7
-  mosi_pin: 11
-  miso_pin: 9
-
-display:
-  - platform: ili9xxx
-    id: my_display
-    model: ili9341
-    cs_pin: 5
-    dc_pin: 12
-    reset_pin: 33
-    auto_clear_enabled: false
-    data_rate: 40MHz
-    dimensions: 320x240
-    update_interval: never
-    invert_colors: false
-    transform:
-      mirror_y: false
-      mirror_x: false
-      swap_xy: true
-
-touchscreen:
-  - platform: tt21100
-    address: 0x24
-    interrupt_pin: GPIO3
-    on_touch:
-      - logger.log: "Touchscreen:: Touched"
-
-binary_sensor:
-  - platform: tt21100
-    index: 0
-    name: "Home"
-
-  - platform: touchscreen
-    name: FanLo
-    x_min: 0
-    x_max: 105
-    y_min: 0
-    y_max: 80
diff --git a/tests/components/tt21100/test.esp8266-ard.yaml b/tests/components/tt21100/test.esp8266-ard.yaml
index 1393019417..05598719f9 100644
--- a/tests/components/tt21100/test.esp8266-ard.yaml
+++ b/tests/components/tt21100/test.esp8266-ard.yaml
@@ -1,25 +1,8 @@
-i2c:
-  - id: i2c_tt21100
-    scl: 5
-    sda: 4
+substitutions:
+  disp_reset_pin: GPIO12
+  scl_pin: GPIO13
+  sda_pin: GPIO14
+  interrupt_pin: GPIO15
+  reset_pin: GPIO16
 
-display:
-  - platform: ssd1306_i2c
-    id: ssd1306_display
-    model: SSD1306_128X64
-    reset_pin: 13
-    pages:
-      - id: page1
-        lambda: |-
-          it.rectangle(0, 0, it.get_width(), it.get_height());
-
-touchscreen:
-  - platform: tt21100
-    display: ssd1306_display
-    interrupt_pin: 14
-    reset_pin: 15
-
-binary_sensor:
-  - platform: tt21100
-    name: Home Button
-    index: 1
+<<: !include common.yaml
diff --git a/tests/components/tt21100/test.rp2040-ard.yaml b/tests/components/tt21100/test.rp2040-ard.yaml
index 17b8c8065a..36a8ce2778 100644
--- a/tests/components/tt21100/test.rp2040-ard.yaml
+++ b/tests/components/tt21100/test.rp2040-ard.yaml
@@ -1,25 +1,8 @@
-i2c:
-  - id: i2c_tt21100
-    scl: 5
-    sda: 4
+substitutions:
+  disp_reset_pin: GPIO10
+  scl_pin: GPIO0
+  sda_pin: GPIO1
+  interrupt_pin: GPIO2
+  reset_pin: GPIO3
 
-display:
-  - platform: ssd1306_i2c
-    id: ssd1306_display
-    model: SSD1306_128X64
-    reset_pin: 3
-    pages:
-      - id: page1
-        lambda: |-
-          it.rectangle(0, 0, it.get_width(), it.get_height());
-
-touchscreen:
-  - platform: tt21100
-    display: ssd1306_display
-    interrupt_pin: 6
-    reset_pin: 7
-
-binary_sensor:
-  - platform: tt21100
-    name: Home Button
-    index: 1
+<<: !include common.yaml
diff --git a/tests/components/ttp229_bsf/common.yaml b/tests/components/ttp229_bsf/common.yaml
new file mode 100644
index 0000000000..42c26a5d51
--- /dev/null
+++ b/tests/components/ttp229_bsf/common.yaml
@@ -0,0 +1,8 @@
+ttp229_bsf:
+  scl_pin: ${scl_pin}
+  sdo_pin: ${sdo_pin}
+
+binary_sensor:
+  - platform: ttp229_bsf
+    name: TTP229 Channel 0
+    channel: 0
diff --git a/tests/components/ttp229_bsf/test.esp32-ard.yaml b/tests/components/ttp229_bsf/test.esp32-ard.yaml
index edee6d164e..80ed75293f 100644
--- a/tests/components/ttp229_bsf/test.esp32-ard.yaml
+++ b/tests/components/ttp229_bsf/test.esp32-ard.yaml
@@ -1,8 +1,5 @@
-ttp229_bsf:
-  scl_pin: 16
-  sdo_pin: 17
+substitutions:
+  scl_pin: GPIO16
+  sdo_pin: GPIO17
 
-binary_sensor:
-  - platform: ttp229_bsf
-    name: TTP229 Channel 0
-    channel: 0
+<<: !include common.yaml
diff --git a/tests/components/ttp229_bsf/test.esp32-c3-ard.yaml b/tests/components/ttp229_bsf/test.esp32-c3-ard.yaml
index 2006061c6e..135b213edc 100644
--- a/tests/components/ttp229_bsf/test.esp32-c3-ard.yaml
+++ b/tests/components/ttp229_bsf/test.esp32-c3-ard.yaml
@@ -1,8 +1,5 @@
-ttp229_bsf:
-  scl_pin: 5
-  sdo_pin: 4
+substitutions:
+  scl_pin: GPIO5
+  sdo_pin: GPIO4
 
-binary_sensor:
-  - platform: ttp229_bsf
-    name: TTP229 Channel 0
-    channel: 0
+<<: !include common.yaml
diff --git a/tests/components/ttp229_bsf/test.esp32-c3-idf.yaml b/tests/components/ttp229_bsf/test.esp32-c3-idf.yaml
index 2006061c6e..135b213edc 100644
--- a/tests/components/ttp229_bsf/test.esp32-c3-idf.yaml
+++ b/tests/components/ttp229_bsf/test.esp32-c3-idf.yaml
@@ -1,8 +1,5 @@
-ttp229_bsf:
-  scl_pin: 5
-  sdo_pin: 4
+substitutions:
+  scl_pin: GPIO5
+  sdo_pin: GPIO4
 
-binary_sensor:
-  - platform: ttp229_bsf
-    name: TTP229 Channel 0
-    channel: 0
+<<: !include common.yaml
diff --git a/tests/components/ttp229_bsf/test.esp32-idf.yaml b/tests/components/ttp229_bsf/test.esp32-idf.yaml
index edee6d164e..80ed75293f 100644
--- a/tests/components/ttp229_bsf/test.esp32-idf.yaml
+++ b/tests/components/ttp229_bsf/test.esp32-idf.yaml
@@ -1,8 +1,5 @@
-ttp229_bsf:
-  scl_pin: 16
-  sdo_pin: 17
+substitutions:
+  scl_pin: GPIO16
+  sdo_pin: GPIO17
 
-binary_sensor:
-  - platform: ttp229_bsf
-    name: TTP229 Channel 0
-    channel: 0
+<<: !include common.yaml
diff --git a/tests/components/ttp229_bsf/test.esp8266-ard.yaml b/tests/components/ttp229_bsf/test.esp8266-ard.yaml
index 2006061c6e..135b213edc 100644
--- a/tests/components/ttp229_bsf/test.esp8266-ard.yaml
+++ b/tests/components/ttp229_bsf/test.esp8266-ard.yaml
@@ -1,8 +1,5 @@
-ttp229_bsf:
-  scl_pin: 5
-  sdo_pin: 4
+substitutions:
+  scl_pin: GPIO5
+  sdo_pin: GPIO4
 
-binary_sensor:
-  - platform: ttp229_bsf
-    name: TTP229 Channel 0
-    channel: 0
+<<: !include common.yaml
diff --git a/tests/components/ttp229_bsf/test.rp2040-ard.yaml b/tests/components/ttp229_bsf/test.rp2040-ard.yaml
index 2006061c6e..135b213edc 100644
--- a/tests/components/ttp229_bsf/test.rp2040-ard.yaml
+++ b/tests/components/ttp229_bsf/test.rp2040-ard.yaml
@@ -1,8 +1,5 @@
-ttp229_bsf:
-  scl_pin: 5
-  sdo_pin: 4
+substitutions:
+  scl_pin: GPIO5
+  sdo_pin: GPIO4
 
-binary_sensor:
-  - platform: ttp229_bsf
-    name: TTP229 Channel 0
-    channel: 0
+<<: !include common.yaml
diff --git a/tests/components/ttp229_lsf/common.yaml b/tests/components/ttp229_lsf/common.yaml
new file mode 100644
index 0000000000..5c0dbf9517
--- /dev/null
+++ b/tests/components/ttp229_lsf/common.yaml
@@ -0,0 +1,11 @@
+i2c:
+  - id: i2c_ttp229_lsf
+    scl: ${scl_pin}
+    sda: ${sda_pin}
+
+ttp229_lsf:
+
+binary_sensor:
+  - platform: ttp229_lsf
+    name: TTP229 Channel 0
+    channel: 0
diff --git a/tests/components/ttp229_lsf/test.esp32-ard.yaml b/tests/components/ttp229_lsf/test.esp32-ard.yaml
index 81fb965883..63c3bd6afd 100644
--- a/tests/components/ttp229_lsf/test.esp32-ard.yaml
+++ b/tests/components/ttp229_lsf/test.esp32-ard.yaml
@@ -1,11 +1,5 @@
-i2c:
-  - id: i2c_ttp229_lsf
-    scl: 16
-    sda: 17
+substitutions:
+  scl_pin: GPIO16
+  sda_pin: GPIO17
 
-ttp229_lsf:
-
-binary_sensor:
-  - platform: ttp229_lsf
-    name: TTP229 Channel 0
-    channel: 0
+<<: !include common.yaml
diff --git a/tests/components/ttp229_lsf/test.esp32-c3-ard.yaml b/tests/components/ttp229_lsf/test.esp32-c3-ard.yaml
index 3927aff40e..ee2c29ca4e 100644
--- a/tests/components/ttp229_lsf/test.esp32-c3-ard.yaml
+++ b/tests/components/ttp229_lsf/test.esp32-c3-ard.yaml
@@ -1,11 +1,5 @@
-i2c:
-  - id: i2c_ttp229_lsf
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-ttp229_lsf:
-
-binary_sensor:
-  - platform: ttp229_lsf
-    name: TTP229 Channel 0
-    channel: 0
+<<: !include common.yaml
diff --git a/tests/components/ttp229_lsf/test.esp32-c3-idf.yaml b/tests/components/ttp229_lsf/test.esp32-c3-idf.yaml
index 3927aff40e..ee2c29ca4e 100644
--- a/tests/components/ttp229_lsf/test.esp32-c3-idf.yaml
+++ b/tests/components/ttp229_lsf/test.esp32-c3-idf.yaml
@@ -1,11 +1,5 @@
-i2c:
-  - id: i2c_ttp229_lsf
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-ttp229_lsf:
-
-binary_sensor:
-  - platform: ttp229_lsf
-    name: TTP229 Channel 0
-    channel: 0
+<<: !include common.yaml
diff --git a/tests/components/ttp229_lsf/test.esp32-idf.yaml b/tests/components/ttp229_lsf/test.esp32-idf.yaml
index 81fb965883..63c3bd6afd 100644
--- a/tests/components/ttp229_lsf/test.esp32-idf.yaml
+++ b/tests/components/ttp229_lsf/test.esp32-idf.yaml
@@ -1,11 +1,5 @@
-i2c:
-  - id: i2c_ttp229_lsf
-    scl: 16
-    sda: 17
+substitutions:
+  scl_pin: GPIO16
+  sda_pin: GPIO17
 
-ttp229_lsf:
-
-binary_sensor:
-  - platform: ttp229_lsf
-    name: TTP229 Channel 0
-    channel: 0
+<<: !include common.yaml
diff --git a/tests/components/ttp229_lsf/test.esp8266-ard.yaml b/tests/components/ttp229_lsf/test.esp8266-ard.yaml
index 3927aff40e..ee2c29ca4e 100644
--- a/tests/components/ttp229_lsf/test.esp8266-ard.yaml
+++ b/tests/components/ttp229_lsf/test.esp8266-ard.yaml
@@ -1,11 +1,5 @@
-i2c:
-  - id: i2c_ttp229_lsf
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-ttp229_lsf:
-
-binary_sensor:
-  - platform: ttp229_lsf
-    name: TTP229 Channel 0
-    channel: 0
+<<: !include common.yaml
diff --git a/tests/components/ttp229_lsf/test.rp2040-ard.yaml b/tests/components/ttp229_lsf/test.rp2040-ard.yaml
index 3927aff40e..ee2c29ca4e 100644
--- a/tests/components/ttp229_lsf/test.rp2040-ard.yaml
+++ b/tests/components/ttp229_lsf/test.rp2040-ard.yaml
@@ -1,11 +1,5 @@
-i2c:
-  - id: i2c_ttp229_lsf
-    scl: 5
-    sda: 4
+substitutions:
+  scl_pin: GPIO5
+  sda_pin: GPIO4
 
-ttp229_lsf:
-
-binary_sensor:
-  - platform: ttp229_lsf
-    name: TTP229 Channel 0
-    channel: 0
+<<: !include common.yaml
diff --git a/tests/components/tuya/common.yaml b/tests/components/tuya/common.yaml
new file mode 100644
index 0000000000..fcf8a2d96b
--- /dev/null
+++ b/tests/components/tuya/common.yaml
@@ -0,0 +1,78 @@
+wifi:
+  ssid: MySSID
+  password: password1
+
+uart:
+  - id: uart_tuya
+    tx_pin: ${tx_pin}
+    rx_pin: ${rx_pin}
+    baud_rate: 9600
+
+tuya:
+  status_pin:
+    number: ${status_pin}
+    inverted: true
+  on_datapoint_update:
+    - sensor_datapoint: 6
+      datapoint_type: raw
+      then:
+        - logger.log: Datapoint 6 updated
+
+binary_sensor:
+  - platform: tuya
+    id: tuya_binary_sensor
+    sensor_datapoint: 1
+
+climate:
+  - platform: tuya
+    id: tuya_climate
+    switch_datapoint: 1
+    target_temperature_datapoint: 3
+    current_temperature_multiplier: 0.5
+    target_temperature_multiplier: 0.5
+    reports_fahrenheit: true
+
+cover:
+  - platform: tuya
+    id: tuya_cover
+    position_datapoint: 2
+
+light:
+  - platform: tuya
+    id: tuya_light
+    switch_datapoint: 1
+    dimmer_datapoint: 2
+    min_value_datapoint: 3
+    color_temperature_datapoint: 4
+    min_value: 1
+    max_value: 100
+    cold_white_color_temperature: 153 mireds
+    warm_white_color_temperature: 500 mireds
+    gamma_correct: 1
+
+number:
+  - platform: tuya
+    id: tuya_number
+    number_datapoint: 102
+    min_value: 0
+    max_value: 17
+    step: 1
+
+select:
+  - platform: tuya
+    id: tuya_select
+    enum_datapoint: 42
+    options:
+      0: Internal
+      1: Floor
+      2: Both
+
+sensor:
+  - platform: tuya
+    id: tuya_sensor
+    sensor_datapoint: 1
+
+switch:
+  - platform: tuya
+    id: tuya_switch
+    switch_datapoint: 1
diff --git a/tests/components/tuya/test.esp32-ard.yaml b/tests/components/tuya/test.esp32-ard.yaml
index 9105522dcd..926a46cf73 100644
--- a/tests/components/tuya/test.esp32-ard.yaml
+++ b/tests/components/tuya/test.esp32-ard.yaml
@@ -1,78 +1,6 @@
-wifi:
-  ssid: MySSID
-  password: password1
+substitutions:
+  tx_pin: GPIO17
+  rx_pin: GPIO16
+  status_pin: GPIO12
 
-uart:
-  - id: uart_tuya
-    tx_pin: 17
-    rx_pin: 16
-    baud_rate: 9600
-
-tuya:
-  status_pin:
-    number: 15
-    inverted: true
-  on_datapoint_update:
-    - sensor_datapoint: 6
-      datapoint_type: raw
-      then:
-        - logger.log: Datapoint 6 updated
-
-binary_sensor:
-  - platform: tuya
-    id: tuya_binary_sensor
-    sensor_datapoint: 1
-
-climate:
-  - platform: tuya
-    id: tuya_climate
-    switch_datapoint: 1
-    target_temperature_datapoint: 3
-    current_temperature_multiplier: 0.5
-    target_temperature_multiplier: 0.5
-    reports_fahrenheit: true
-
-cover:
-  - platform: tuya
-    id: tuya_cover
-    position_datapoint: 2
-
-light:
-  - platform: tuya
-    id: tuya_light
-    switch_datapoint: 1
-    dimmer_datapoint: 2
-    min_value_datapoint: 3
-    color_temperature_datapoint: 4
-    min_value: 1
-    max_value: 100
-    cold_white_color_temperature: 153 mireds
-    warm_white_color_temperature: 500 mireds
-    gamma_correct: 1
-
-number:
-  - platform: tuya
-    id: tuya_number
-    number_datapoint: 102
-    min_value: 0
-    max_value: 17
-    step: 1
-
-select:
-  - platform: tuya
-    id: tuya_select
-    enum_datapoint: 42
-    options:
-      0: Internal
-      1: Floor
-      2: Both
-
-sensor:
-  - platform: tuya
-    id: tuya_sensor
-    sensor_datapoint: 1
-
-switch:
-  - platform: tuya
-    id: tuya_switch
-    switch_datapoint: 1
+<<: !include common.yaml
diff --git a/tests/components/tuya/test.esp32-c3-ard.yaml b/tests/components/tuya/test.esp32-c3-ard.yaml
index 4892e807b1..c62a0b10f6 100644
--- a/tests/components/tuya/test.esp32-c3-ard.yaml
+++ b/tests/components/tuya/test.esp32-c3-ard.yaml
@@ -1,78 +1,6 @@
-wifi:
-  ssid: MySSID
-  password: password1
+substitutions:
+  tx_pin: GPIO4
+  rx_pin: GPIO5
+  status_pin: GPIO2
 
-uart:
-  - id: uart_tuya
-    tx_pin: 4
-    rx_pin: 5
-    baud_rate: 9600
-
-tuya:
-  status_pin:
-    number: 6
-    inverted: true
-  on_datapoint_update:
-    - sensor_datapoint: 6
-      datapoint_type: raw
-      then:
-        - logger.log: Datapoint 6 updated
-
-binary_sensor:
-  - platform: tuya
-    id: tuya_binary_sensor
-    sensor_datapoint: 1
-
-climate:
-  - platform: tuya
-    id: tuya_climate
-    switch_datapoint: 1
-    target_temperature_datapoint: 3
-    current_temperature_multiplier: 0.5
-    target_temperature_multiplier: 0.5
-    reports_fahrenheit: true
-
-cover:
-  - platform: tuya
-    id: tuya_cover
-    position_datapoint: 2
-
-light:
-  - platform: tuya
-    id: tuya_light
-    switch_datapoint: 1
-    dimmer_datapoint: 2
-    min_value_datapoint: 3
-    color_temperature_datapoint: 4
-    min_value: 1
-    max_value: 100
-    cold_white_color_temperature: 153 mireds
-    warm_white_color_temperature: 500 mireds
-    gamma_correct: 1
-
-number:
-  - platform: tuya
-    id: tuya_number
-    number_datapoint: 102
-    min_value: 0
-    max_value: 17
-    step: 1
-
-select:
-  - platform: tuya
-    id: tuya_select
-    enum_datapoint: 42
-    options:
-      0: Internal
-      1: Floor
-      2: Both
-
-sensor:
-  - platform: tuya
-    id: tuya_sensor
-    sensor_datapoint: 1
-
-switch:
-  - platform: tuya
-    id: tuya_switch
-    switch_datapoint: 1
+<<: !include common.yaml
diff --git a/tests/components/tuya/test.esp32-c3-idf.yaml b/tests/components/tuya/test.esp32-c3-idf.yaml
index 4892e807b1..c62a0b10f6 100644
--- a/tests/components/tuya/test.esp32-c3-idf.yaml
+++ b/tests/components/tuya/test.esp32-c3-idf.yaml
@@ -1,78 +1,6 @@
-wifi:
-  ssid: MySSID
-  password: password1
+substitutions:
+  tx_pin: GPIO4
+  rx_pin: GPIO5
+  status_pin: GPIO2
 
-uart:
-  - id: uart_tuya
-    tx_pin: 4
-    rx_pin: 5
-    baud_rate: 9600
-
-tuya:
-  status_pin:
-    number: 6
-    inverted: true
-  on_datapoint_update:
-    - sensor_datapoint: 6
-      datapoint_type: raw
-      then:
-        - logger.log: Datapoint 6 updated
-
-binary_sensor:
-  - platform: tuya
-    id: tuya_binary_sensor
-    sensor_datapoint: 1
-
-climate:
-  - platform: tuya
-    id: tuya_climate
-    switch_datapoint: 1
-    target_temperature_datapoint: 3
-    current_temperature_multiplier: 0.5
-    target_temperature_multiplier: 0.5
-    reports_fahrenheit: true
-
-cover:
-  - platform: tuya
-    id: tuya_cover
-    position_datapoint: 2
-
-light:
-  - platform: tuya
-    id: tuya_light
-    switch_datapoint: 1
-    dimmer_datapoint: 2
-    min_value_datapoint: 3
-    color_temperature_datapoint: 4
-    min_value: 1
-    max_value: 100
-    cold_white_color_temperature: 153 mireds
-    warm_white_color_temperature: 500 mireds
-    gamma_correct: 1
-
-number:
-  - platform: tuya
-    id: tuya_number
-    number_datapoint: 102
-    min_value: 0
-    max_value: 17
-    step: 1
-
-select:
-  - platform: tuya
-    id: tuya_select
-    enum_datapoint: 42
-    options:
-      0: Internal
-      1: Floor
-      2: Both
-
-sensor:
-  - platform: tuya
-    id: tuya_sensor
-    sensor_datapoint: 1
-
-switch:
-  - platform: tuya
-    id: tuya_switch
-    switch_datapoint: 1
+<<: !include common.yaml
diff --git a/tests/components/tuya/test.esp32-idf.yaml b/tests/components/tuya/test.esp32-idf.yaml
index 9105522dcd..926a46cf73 100644
--- a/tests/components/tuya/test.esp32-idf.yaml
+++ b/tests/components/tuya/test.esp32-idf.yaml
@@ -1,78 +1,6 @@
-wifi:
-  ssid: MySSID
-  password: password1
+substitutions:
+  tx_pin: GPIO17
+  rx_pin: GPIO16
+  status_pin: GPIO12
 
-uart:
-  - id: uart_tuya
-    tx_pin: 17
-    rx_pin: 16
-    baud_rate: 9600
-
-tuya:
-  status_pin:
-    number: 15
-    inverted: true
-  on_datapoint_update:
-    - sensor_datapoint: 6
-      datapoint_type: raw
-      then:
-        - logger.log: Datapoint 6 updated
-
-binary_sensor:
-  - platform: tuya
-    id: tuya_binary_sensor
-    sensor_datapoint: 1
-
-climate:
-  - platform: tuya
-    id: tuya_climate
-    switch_datapoint: 1
-    target_temperature_datapoint: 3
-    current_temperature_multiplier: 0.5
-    target_temperature_multiplier: 0.5
-    reports_fahrenheit: true
-
-cover:
-  - platform: tuya
-    id: tuya_cover
-    position_datapoint: 2
-
-light:
-  - platform: tuya
-    id: tuya_light
-    switch_datapoint: 1
-    dimmer_datapoint: 2
-    min_value_datapoint: 3
-    color_temperature_datapoint: 4
-    min_value: 1
-    max_value: 100
-    cold_white_color_temperature: 153 mireds
-    warm_white_color_temperature: 500 mireds
-    gamma_correct: 1
-
-number:
-  - platform: tuya
-    id: tuya_number
-    number_datapoint: 102
-    min_value: 0
-    max_value: 17
-    step: 1
-
-select:
-  - platform: tuya
-    id: tuya_select
-    enum_datapoint: 42
-    options:
-      0: Internal
-      1: Floor
-      2: Both
-
-sensor:
-  - platform: tuya
-    id: tuya_sensor
-    sensor_datapoint: 1
-
-switch:
-  - platform: tuya
-    id: tuya_switch
-    switch_datapoint: 1
+<<: !include common.yaml
diff --git a/tests/components/tuya/test.esp8266-ard.yaml b/tests/components/tuya/test.esp8266-ard.yaml
index 56177fb982..11d46ed50e 100644
--- a/tests/components/tuya/test.esp8266-ard.yaml
+++ b/tests/components/tuya/test.esp8266-ard.yaml
@@ -1,78 +1,6 @@
-wifi:
-  ssid: MySSID
-  password: password1
+substitutions:
+  tx_pin: GPIO4
+  rx_pin: GPIO5
+  status_pin: GPIO12
 
-uart:
-  - id: uart_tuya
-    tx_pin: 4
-    rx_pin: 5
-    baud_rate: 9600
-
-tuya:
-  status_pin:
-    number: 16
-    inverted: true
-  on_datapoint_update:
-    - sensor_datapoint: 6
-      datapoint_type: raw
-      then:
-        - logger.log: Datapoint 6 updated
-
-binary_sensor:
-  - platform: tuya
-    id: tuya_binary_sensor
-    sensor_datapoint: 1
-
-climate:
-  - platform: tuya
-    id: tuya_climate
-    switch_datapoint: 1
-    target_temperature_datapoint: 3
-    current_temperature_multiplier: 0.5
-    target_temperature_multiplier: 0.5
-    reports_fahrenheit: true
-
-cover:
-  - platform: tuya
-    id: tuya_cover
-    position_datapoint: 2
-
-light:
-  - platform: tuya
-    id: tuya_light
-    switch_datapoint: 1
-    dimmer_datapoint: 2
-    min_value_datapoint: 3
-    color_temperature_datapoint: 4
-    min_value: 1
-    max_value: 100
-    cold_white_color_temperature: 153 mireds
-    warm_white_color_temperature: 500 mireds
-    gamma_correct: 1
-
-number:
-  - platform: tuya
-    id: tuya_number
-    number_datapoint: 102
-    min_value: 0
-    max_value: 17
-    step: 1
-
-select:
-  - platform: tuya
-    id: tuya_select
-    enum_datapoint: 42
-    options:
-      0: Internal
-      1: Floor
-      2: Both
-
-sensor:
-  - platform: tuya
-    id: tuya_sensor
-    sensor_datapoint: 1
-
-switch:
-  - platform: tuya
-    id: tuya_switch
-    switch_datapoint: 1
+<<: !include common.yaml
diff --git a/tests/components/tuya/test.rp2040-ard.yaml b/tests/components/tuya/test.rp2040-ard.yaml
index 4892e807b1..11d46ed50e 100644
--- a/tests/components/tuya/test.rp2040-ard.yaml
+++ b/tests/components/tuya/test.rp2040-ard.yaml
@@ -1,78 +1,6 @@
-wifi:
-  ssid: MySSID
-  password: password1
+substitutions:
+  tx_pin: GPIO4
+  rx_pin: GPIO5
+  status_pin: GPIO12
 
-uart:
-  - id: uart_tuya
-    tx_pin: 4
-    rx_pin: 5
-    baud_rate: 9600
-
-tuya:
-  status_pin:
-    number: 6
-    inverted: true
-  on_datapoint_update:
-    - sensor_datapoint: 6
-      datapoint_type: raw
-      then:
-        - logger.log: Datapoint 6 updated
-
-binary_sensor:
-  - platform: tuya
-    id: tuya_binary_sensor
-    sensor_datapoint: 1
-
-climate:
-  - platform: tuya
-    id: tuya_climate
-    switch_datapoint: 1
-    target_temperature_datapoint: 3
-    current_temperature_multiplier: 0.5
-    target_temperature_multiplier: 0.5
-    reports_fahrenheit: true
-
-cover:
-  - platform: tuya
-    id: tuya_cover
-    position_datapoint: 2
-
-light:
-  - platform: tuya
-    id: tuya_light
-    switch_datapoint: 1
-    dimmer_datapoint: 2
-    min_value_datapoint: 3
-    color_temperature_datapoint: 4
-    min_value: 1
-    max_value: 100
-    cold_white_color_temperature: 153 mireds
-    warm_white_color_temperature: 500 mireds
-    gamma_correct: 1
-
-number:
-  - platform: tuya
-    id: tuya_number
-    number_datapoint: 102
-    min_value: 0
-    max_value: 17
-    step: 1
-
-select:
-  - platform: tuya
-    id: tuya_select
-    enum_datapoint: 42
-    options:
-      0: Internal
-      1: Floor
-      2: Both
-
-sensor:
-  - platform: tuya
-    id: tuya_sensor
-    sensor_datapoint: 1
-
-switch:
-  - platform: tuya
-    id: tuya_switch
-    switch_datapoint: 1
+<<: !include common.yaml