Web subsharding (#112505)

diff --git a/.ci.yaml b/.ci.yaml
index 6999d3b..07bfb46 100644
--- a/.ci.yaml
+++ b/.ci.yaml
@@ -1249,7 +1249,7 @@
           {"dependency": "goldctl", "version": "git_revision:3a77d0b12c697a840ca0c7705208e8622dc94603"}
         ]
       shard: web_tool_tests
-      subshard: web
+      subshard: "1_1"
       tags: >
         ["framework", "hostonly", "shard", "linux"]
     runIf:
@@ -3055,7 +3055,7 @@
           {"dependency": "goldctl", "version": "git_revision:3a77d0b12c697a840ca0c7705208e8622dc94603"}
         ]
       shard: web_tool_tests
-      subshard: web
+      subshard: "1_1"
       tags: >
         ["framework", "hostonly", "shard", "mac"]
     runIf:
@@ -4291,7 +4291,8 @@
       - bin/**
       - .ci.yaml
 
-  - name: Windows web_tool_tests
+  - name: Windows web_tool_tests_1_2
+    bringup: true
     recipe: flutter/flutter_drone
     timeout: 60
     properties:
@@ -4303,7 +4304,7 @@
           {"dependency": "goldctl", "version": "git_revision:3a77d0b12c697a840ca0c7705208e8622dc94603"}
         ]
       shard: web_tool_tests
-      subshard: web
+      subshard: "1_2"
       tags: >
         ["framework", "hostonly", "shard", "windows"]
     runIf:
@@ -4312,6 +4313,28 @@
       - bin/**
       - .ci.yaml
 
+  - name: Windows web_tool_tests_2_2
+    bringup: true
+    recipe: flutter/flutter_drone
+    timeout: 60
+    properties:
+      dependencies: >-
+        [
+          {"dependency": "android_sdk", "version": "version:33v6"},
+          {"dependency": "chrome_and_driver", "version": "version:96.2"},
+          {"dependency": "open_jdk", "version": "version:11"},
+          {"dependency": "goldctl", "version": "git_revision:3a77d0b12c697a840ca0c7705208e8622dc94603"}
+        ]
+      shard: web_tool_tests
+      subshard: "2_2"
+      tags: >
+        ["framework", "hostonly", "shard"]
+    runIf:
+    - dev/**
+    - packages/flutter_tools/**
+    - bin/**
+    - .ci.yaml
+
   - name: Windows windows_home_scroll_perf__timeline_summary
     recipe: devicelab/devicelab_drone
     timeout: 60
diff --git a/dev/bots/test.dart b/dev/bots/test.dart
index 3934be8..c353e4a 100644
--- a/dev/bots/test.dart
+++ b/dev/bots/test.dart
@@ -429,10 +429,18 @@
 }
 
 Future<void> _runWebToolTests() async {
+  final List<File> allFiles = Directory(path.join(_toolsPath, 'test', 'web.shard'))
+      .listSync(recursive: true).whereType<File>().toList();
+  final List<String> allTests = <String>[];
+  for (final File file in allFiles) {
+    if (file.path.endsWith('_test.dart')) {
+      allTests.add(file.path);
+    }
+  }
   await _runDartTest(
     _toolsPath,
     forceSingleCore: true,
-    testPaths: <String>[path.join('test', 'web.shard')],
+    testPaths: _selectIndexOfTotalSubshard<String>(allTests),
     includeLocalEngineEnv: true,
   );
 }