Bug 1194166 - Update unittest mozconfigs for all platforms, r=chmanchester,jlund
authorJames Graham <james@hoppipolla.co.uk>
Tue, 01 Sep 2015 12:48:41 +0100
changeset 262981 5c715c7f22c3
parent 262980 9dfa459ee7e5
child 262982 b6e914c70e41
push id65173
push userjames@hoppipolla.co.uk
push dateThu, 17 Sep 2015 09:51:50 +0000
treeherdermozilla-inbound@5c715c7f22c3 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerschmanchester, jlund
bugs1194166
milestone43.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1194166 - Update unittest mozconfigs for all platforms, r=chmanchester,jlund
testing/mozharness/configs/android/android_panda_releng.py
testing/mozharness/configs/android/androidarm.py
testing/mozharness/configs/android/androidarm_4_3.py
testing/mozharness/configs/android/androidx86.py
testing/mozharness/configs/b2g/emulator_automation_config.py
testing/mozharness/configs/unittests/linux_unittest.py
testing/mozharness/configs/unittests/mac_unittest.py
testing/mozharness/configs/unittests/win_unittest.py
testing/mozharness/scripts/android_emulator_unittest.py
testing/mozharness/scripts/android_panda.py
testing/mozharness/scripts/androidx86_emulator_unittest.py
testing/mozharness/scripts/b2g_desktop_unittest.py
testing/mozharness/scripts/b2g_emulator_unittest.py
testing/mozharness/scripts/desktop_unittest.py
--- a/testing/mozharness/configs/android/android_panda_releng.py
+++ b/testing/mozharness/configs/android/android_panda_releng.py
@@ -92,18 +92,19 @@ config = {
                 "--xre-path=../hostutils/xre",
                 "--utility-path=../hostutils/bin",
                 "--app=%(app_name)s",
                 "--ignore-window-size",
                 "--bootstrap",
                 "--http-port=%(http_port)s",
                 "--ssl-port=%(ssl_port)s",
                 "--symbols-path=%(symbols_path)s",
-                "reftest/tests/testing/crashtest/crashtests.list"
+                "--suite=crashtest",
             ],
+            "tests": ["reftest/tests/testing/crashtest/crashtests.list",],
             "run_filename": "remotereftest.py",
             "testsdir": "reftest"
         },
         "jittest": {
             "options": [
                 "bin/js",
                 "--remote",
                 "-j",
@@ -123,21 +124,22 @@ config = {
             "options": [
                 "--deviceIP=%(device_ip)s",
                 "--xre-path=../hostutils/xre",
                 "--utility-path=../hostutils/bin",
                 "--app=%(app_name)s",
                 "--ignore-window-size",
                 "--bootstrap",
                 "--extra-profile-file=jsreftest/tests/user.js",
-                "jsreftest/tests/jstests.list",
                 "--http-port=%(http_port)s",
                 "--ssl-port=%(ssl_port)s",
-                "--symbols-path=%(symbols_path)s"
+                "--symbols-path=%(symbols_path)s",
+                "--suite=jstestbrowser",
             ],
+            "tests": ["jsreftest/tests/jstests.list",],
             "run_filename": "remotereftest.py",
             "testsdir": "reftest"
         },
         "mochitest": {
             "options": [
                 "--dm_trans=sut",
                 "--deviceIP=%(device_ip)s",
                 "--xre-path=../hostutils/xre",
@@ -161,18 +163,19 @@ config = {
                 "--xre-path=../hostutils/xre",
                 "--utility-path=../hostutils/bin",
                 "--app=%(app_name)s",
                 "--ignore-window-size",
                 "--bootstrap",
                 "--http-port=%(http_port)s",
                 "--ssl-port=%(ssl_port)s",
                 "--symbols-path=%(symbols_path)s",
-                "reftest/tests/layout/reftests/reftest.list"
+                "--suite=reftest",
             ],
+            "tests": ["reftest/tests/layout/reftests/reftest.list"],
             "run_filename": "remotereftest.py",
             "testsdir": "reftest"
         },
         "robocop": {
             "options": [
                 "--dm_trans=sut",
                 "--deviceIP=%(device_ip)s",
                 "--xre-path=../hostutils/xre",
--- a/testing/mozharness/configs/android/androidarm.py
+++ b/testing/mozharness/configs/android/androidarm.py
@@ -135,18 +135,19 @@ config = {
                 "--deviceIP=%(device_ip)s",
                 "--devicePort=%(device_port)s",
                 "--http-port=%(http_port)s",
                 "--ssl-port=%(ssl_port)s",
                 "--httpd-path",
                 "%(modules_dir)s",
                 "--symbols-path=%(symbols_path)s",
                 "--total-chunks=16",
-                "tests/layout/reftests/reftest.list",
+                "--suite=reftest",
             ],
+            "tests": ["tests/layout/reftests/reftest.list"],
         },
         "crashtest": {
             "run_filename": "remotereftest.py",
             "testsdir": "reftest",
             "options": [
                 "--app=%(app)s",
                 "--ignore-window-size",
                 "--bootstrap",
@@ -156,18 +157,19 @@ config = {
                 "--deviceIP=%(device_ip)s",
                 "--devicePort=%(device_port)s",
                 "--http-port=%(http_port)s",
                 "--ssl-port=%(ssl_port)s",
                 "--httpd-path",
                 "%(modules_dir)s",
                 "--symbols-path=%(symbols_path)s",
                 "--total-chunks=2",
-                "tests/testing/crashtest/crashtests.list",
+                "--suite=crashtest",
             ],
+            "tests": ["tests/testing/crashtest/crashtests.list"],
         },
         "jsreftest": {
             "run_filename": "remotereftest.py",
             "testsdir": "reftest",
             "options": [
                 "--app=%(app)s",
                 "--ignore-window-size",
                 "--bootstrap",
@@ -176,20 +178,21 @@ config = {
                 "--utility-path=%(utility_path)s",
                 "--deviceIP=%(device_ip)s",
                 "--devicePort=%(device_port)s",
                 "--http-port=%(http_port)s",
                 "--ssl-port=%(ssl_port)s",
                 "--httpd-path",
                 "%(modules_dir)s",
                 "--symbols-path=%(symbols_path)s",
-                "../jsreftest/tests/jstests.list",
                 "--total-chunks=6",
                 "--extra-profile-file=jsreftest/tests/user.js",
+                "--suite=jstestbrowser",
             ],
+            "tests": ["../jsreftest/tests/jstests.list"],
         },
         "xpcshell": {
             "run_filename": "remotexpcshelltests.py",
             "testsdir": "xpcshell",
             "options": [
                 "--deviceIP=%(device_ip)s",
                 "--devicePort=%(device_port)s",
                 "--xre-path=%(xre_path)s",
@@ -310,93 +313,77 @@ config = {
             "extra_args": ["--this-chunk=3"],
         },
         "mochitest-gl-4": {
             "category": "mochitest-gl",
             "extra_args": ["--this-chunk=4"],
         },
         "reftest-1": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=16", "--this-chunk=1",
-                "tests/layout/reftests/reftest.list"]
+            "extra_args": ["--total-chunks=16", "--this-chunk=1"],
         },
         "reftest-2": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=16", "--this-chunk=2",
-                "tests/layout/reftests/reftest.list"]
+            "extra_args": ["--total-chunks=16", "--this-chunk=2"],
         },
         "reftest-3": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=16", "--this-chunk=3",
-                "tests/layout/reftests/reftest.list"]
+            "extra_args": ["--total-chunks=16", "--this-chunk=3"],
         },
         "reftest-4": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=16", "--this-chunk=4",
-                "tests/layout/reftests/reftest.list"]
+            "extra_args": ["--total-chunks=16", "--this-chunk=4"],
         },
         "reftest-5": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=16", "--this-chunk=5",
-                "tests/layout/reftests/reftest.list"]
+            "extra_args": ["--total-chunks=16", "--this-chunk=5"],
         },
         "reftest-6": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=16", "--this-chunk=6",
-                "tests/layout/reftests/reftest.list"]
+            "extra_args": ["--total-chunks=16", "--this-chunk=6"],
         },
         "reftest-7": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=16", "--this-chunk=7",
-                "tests/layout/reftests/reftest.list"]
+            "extra_args": ["--total-chunks=16", "--this-chunk=7"],
         },
         "reftest-8": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=16", "--this-chunk=8",
-                "tests/layout/reftests/reftest.list"]
+            "extra_args": ["--total-chunks=16", "--this-chunk=8"],
         },
         "reftest-9": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=16", "--this-chunk=9",
-                "tests/layout/reftests/reftest.list"]
+            "extra_args": ["--total-chunks=16", "--this-chunk=9"],
         },
         "reftest-10": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=16", "--this-chunk=10",
-                "tests/layout/reftests/reftest.list"]
+            "extra_args": ["--total-chunks=16", "--this-chunk=10"],
         },
         "reftest-11": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=16", "--this-chunk=11",
-                "tests/layout/reftests/reftest.list"]
+            "extra_args": ["--total-chunks=16", "--this-chunk=11"],
         },
         "reftest-12": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=16", "--this-chunk=12",
-                "tests/layout/reftests/reftest.list"]
+            "extra_args": ["--total-chunks=16", "--this-chunk=12"],
         },
         "reftest-13": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=16", "--this-chunk=13",
-                "tests/layout/reftests/reftest.list"]
+            "extra_args": ["--total-chunks=16", "--this-chunk=13"],
         },
         "reftest-14": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=16", "--this-chunk=14",
-                "tests/layout/reftests/reftest.list"]
+            "extra_args": ["--total-chunks=16", "--this-chunk=14"],
         },
         "reftest-15": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=16", "--this-chunk=15",
-                "tests/layout/reftests/reftest.list"]
+            "extra_args": ["--total-chunks=16", "--this-chunk=15"],
         },
         "reftest-16": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=16", "--this-chunk=16",
-                "tests/layout/reftests/reftest.list"]
+            "extra_args": ["--total-chunks=16", "--this-chunk=16"],
         },
         "crashtest-1": {
             "category": "crashtest",
             "extra_args": ["--this-chunk=1"],
         },
         "crashtest-2": {
             "category": "crashtest",
             "extra_args": ["--this-chunk=2"],
--- a/testing/mozharness/configs/android/androidarm_4_3.py
+++ b/testing/mozharness/configs/android/androidarm_4_3.py
@@ -133,18 +133,19 @@ config = {
                 "--remote-webserver=%(remote_webserver)s",
                 "--xre-path=%(xre_path)s",
                 "--utility-path=%(utility_path)s",
                 "--http-port=%(http_port)s",
                 "--ssl-port=%(ssl_port)s",
                 "--httpd-path", "%(modules_dir)s",
                 "--symbols-path=%(symbols_path)s",
                 "--total-chunks=16",
-                "tests/layout/reftests/reftest.list",
+                "--suite=reftest",
             ],
+            "tests": ["tests/layout/reftests/reftest.list",],
         },
         "crashtest": {
             "run_filename": "remotereftest.py",
             "testsdir": "reftest",
             "options": [
                 "--app=%(app)s",
                 "--ignore-window-size",
                 "--dm_trans=adb",
@@ -153,35 +154,37 @@ config = {
                 "--xre-path=%(xre_path)s",
                 "--utility-path=%(utility_path)s",
                 "--http-port=%(http_port)s",
                 "--ssl-port=%(ssl_port)s",
                 "--httpd-path",
                 "%(modules_dir)s",
                 "--symbols-path=%(symbols_path)s",
                 "--total-chunks=2",
-                "tests/testing/crashtest/crashtests.list",
+                "--suite=crashtest",
             ],
+            "tests": ["tests/testing/crashtest/crashtests.list",],
         },
         "jsreftest": {
             "run_filename": "remotereftest.py",
             "testsdir": "reftest",
             "options": [
                 "--app=%(app)s",
                 "--ignore-window-size",
                 "--dm_trans=adb",
                 "--bootstrap",
                 "--remote-webserver=%(remote_webserver)s", "--xre-path=%(xre_path)s",
                 "--utility-path=%(utility_path)s", "--http-port=%(http_port)s",
                 "--ssl-port=%(ssl_port)s", "--httpd-path", "%(modules_dir)s",
                 "--symbols-path=%(symbols_path)s",
-                "../jsreftest/tests/jstests.list",
                 "--total-chunks=6",
                 "--extra-profile-file=jsreftest/tests/user.js",
+                "--suite=jstestbrowser",
             ],
+            "tests": ["../jsreftest/tests/jstests.list",],
         },
         "xpcshell": {
             "run_filename": "remotexpcshelltests.py",
             "testsdir": "xpcshell",
             "options": [
                 "--dm_trans=adb",
                 "--xre-path=%(xre_path)s",
                 "--testing-modules-dir=%(modules_dir)s",
@@ -370,253 +373,205 @@ config = {
             "extra_args": ["--this-chunk=3"],
         },
         "mochitest-gl-4": {
             "category": "mochitest-gl",
             "extra_args": ["--this-chunk=4"],
         },
         "reftest-1": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=1",
-                "tests/layout/reftests/reftest.list"]
+            "extra_args": ["--total-chunks=48", "--this-chunk=1"],
         },
         "reftest-2": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=2",
-                "tests/layout/reftests/reftest.list"]
+            "extra_args": ["--total-chunks=48", "--this-chunk=2"],
         },
         "reftest-3": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=3",
-                "tests/layout/reftests/reftest.list"]
+            "extra_args": ["--total-chunks=48", "--this-chunk=3"],
         },
         "reftest-4": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=4",
-                "tests/layout/reftests/reftest.list"]
+            "extra_args": ["--total-chunks=48", "--this-chunk=4"],
         },
         "reftest-5": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=5",
-                "tests/layout/reftests/reftest.list"]
+            "extra_args": ["--total-chunks=48", "--this-chunk=5"],
         },
         "reftest-6": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=6",
-                "tests/layout/reftests/reftest.list"]
+            "extra_args": ["--total-chunks=48", "--this-chunk=6"],
         },
         "reftest-7": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=7",
-                "tests/layout/reftests/reftest.list"]
+            "extra_args": ["--total-chunks=48", "--this-chunk=7"],
         },
         "reftest-8": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=8",
-                "tests/layout/reftests/reftest.list"]
+            "extra_args": ["--total-chunks=48", "--this-chunk=8"],
         },
         "reftest-9": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=9",
-                "tests/layout/reftests/reftest.list"]
+            "extra_args": ["--total-chunks=48", "--this-chunk=9"],
         },
         "reftest-10": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=10",
-                "tests/layout/reftests/reftest.list"]
+            "extra_args": ["--total-chunks=48", "--this-chunk=10"],
         },
         "reftest-11": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=11",
-                "tests/layout/reftests/reftest.list"]
+            "extra_args": ["--total-chunks=48", "--this-chunk=11"],
         },
         "reftest-12": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=12",
-                "tests/layout/reftests/reftest.list"]
+            "extra_args": ["--total-chunks=48", "--this-chunk=12"],
         },
         "reftest-13": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=13",
-                "tests/layout/reftests/reftest.list"]
+            "extra_args": ["--total-chunks=48", "--this-chunk=13"],
         },
         "reftest-14": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=14",
-                "tests/layout/reftests/reftest.list"]
+            "extra_args": ["--total-chunks=48", "--this-chunk=14"],
         },
         "reftest-15": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=15",
-                "tests/layout/reftests/reftest.list"]
+            "extra_args": ["--total-chunks=48", "--this-chunk=15"],
         },
         "reftest-16": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=16",
-                "tests/layout/reftests/reftest.list"]
+            "extra_args": ["--total-chunks=48", "--this-chunk=16"],
         },
         "reftest-17": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=17",
-            "tests/layout/reftests/reftest.list"]
+            "extra args": ["--total-chunks=48", "--this-chunk=17"],
         },
        "reftest-18": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=18",
-            "tests/layout/reftests/reftest.list"]
+            "extra args": ["--total-chunks=48", "--this-chunk=18"],
         },
         "reftest-19": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=19",
-            "tests/layout/reftests/reftest.list"]
+            "extra args": ["--total-chunks=48", "--this-chunk=19"],
         },
         "reftest-20": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=20",
-            "tests/layout/reftests/reftest.list"]
+            "extra args": ["--total-chunks=48", "--this-chunk=20"],
         },
         "reftest-21": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=21",
-            "tests/layout/reftests/reftest.list"]
+            "extra args": ["--total-chunks=48", "--this-chunk=21"],
         },
         "reftest-22": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=22",
-            "tests/layout/reftests/reftest.list"]
+            "extra args": ["--total-chunks=48", "--this-chunk=22"],
         },
         "reftest-23": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=23",
-            "tests/layout/reftests/reftest.list"]
+            "extra args": ["--total-chunks=48", "--this-chunk=23"],
         },
         "reftest-24": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=24",
-            "tests/layout/reftests/reftest.list"]
+            "extra args": ["--total-chunks=48", "--this-chunk=24"],
         },
         "reftest-25": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=25",
-            "tests/layout/reftests/reftest.list"]
+            "extra args": ["--total-chunks=48", "--this-chunk=25"],
         },
         "reftest-26": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=26",
-            "tests/layout/reftests/reftest.list"]
+            "extra args": ["--total-chunks=48", "--this-chunk=26"],
         },
         "reftest-27": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=27",
-            "tests/layout/reftests/reftest.list"]
+            "extra args": ["--total-chunks=48", "--this-chunk=27"],
         },
         "reftest-28": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=28",
-            "tests/layout/reftests/reftest.list"]
+            "extra args": ["--total-chunks=48", "--this-chunk=28"],
         },
         "reftest-29": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=29",
-            "tests/layout/reftests/reftest.list"]
+            "extra args": ["--total-chunks=48", "--this-chunk=29"],
         },
         "reftest-30": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=30",
-            "tests/layout/reftests/reftest.list"]
+            "extra args": ["--total-chunks=48", "--this-chunk=30"],
         },
         "reftest-31": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=31",
-            "tests/layout/reftests/reftest.list"]
+            "extra args": ["--total-chunks=48", "--this-chunk=31"],
         },
         "reftest-32": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=32",
-            "tests/layout/reftests/reftest.list"]
+            "extra args": ["--total-chunks=48", "--this-chunk=32"],
         },
         "reftest-33": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=33",
-            "tests/layout/reftests/reftest.list"]
+            "extra args": ["--total-chunks=48", "--this-chunk=33"],
         },
         "reftest-34": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=34",
-            "tests/layout/reftests/reftest.list"]
+            "extra args": ["--total-chunks=48", "--this-chunk=34"],
         },
         "reftest-35": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=35",
-            "tests/layout/reftests/reftest.list"]
+            "extra args": ["--total-chunks=48", "--this-chunk=35"],
         },
         "reftest-36": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=36",
-            "tests/layout/reftests/reftest.list"]
+            "extra args": ["--total-chunks=48", "--this-chunk=36"],
         },
         "reftest-37": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=37",
-            "tests/layout/reftests/reftest.list"]
+            "extra args": ["--total-chunks=48", "--this-chunk=37"],
         },
         "reftest-38": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=38",
-            "tests/layout/reftests/reftest.list"]
+            "extra args": ["--total-chunks=48", "--this-chunk=38"],
         },
         "reftest-39": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=39",
-            "tests/layout/reftests/reftest.list"]
+            "extra args": ["--total-chunks=48", "--this-chunk=39"],
         },
         "reftest-40": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=40",
-            "tests/layout/reftests/reftest.list"]
+            "extra args": ["--total-chunks=48", "--this-chunk=40"],
         },
         "reftest-41": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=41",
-            "tests/layout/reftests/reftest.list"]
+            "extra args": ["--total-chunks=48", "--this-chunk=41"],
         },
         "reftest-42": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=42",
-            "tests/layout/reftests/reftest.list"]
+            "extra args": ["--total-chunks=48", "--this-chunk=42"],
         },
         "reftest-43": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=43",
-            "tests/layout/reftests/reftest.list"]
+            "extra args": ["--total-chunks=48", "--this-chunk=43"],
         },
         "reftest-44": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=44",
-            "tests/layout/reftests/reftest.list"]
+            "extra args": ["--total-chunks=48", "--this-chunk=44"],
         },
         "reftest-45": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=45",
-            "tests/layout/reftests/reftest.list"]
+            "extra args": ["--total-chunks=48", "--this-chunk=45"],
         },
         "reftest-46": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=46",
-            "tests/layout/reftests/reftest.list"]
+            "extra args": ["--total-chunks=48", "--this-chunk=46"],
         },
         "reftest-47": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=47",
-            "tests/layout/reftests/reftest.list"]
+            "extra args": ["--total-chunks=48", "--this-chunk=47"],
         },
         "reftest-48": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=48", "--this-chunk=48",
-            "tests/layout/reftests/reftest.list"]
+            "extra args": ["--total-chunks=48", "--this-chunk=48"],
         },
         "crashtest-1": {
             "category": "crashtest",
             "extra_args": ["--this-chunk=1"],
         },
         "crashtest-2": {
             "category": "crashtest",
             "extra_args": ["--this-chunk=2"],
--- a/testing/mozharness/configs/android/androidx86.py
+++ b/testing/mozharness/configs/android/androidx86.py
@@ -130,49 +130,63 @@ config = {
                         "--log-raw=%(raw_log_file)s",
                         "--log-errorsummary=%(error_summary_file)s",
                     ],
         },
     }, # end suite_definitions
     "test_suite_definitions": {
         "jsreftest": {
             "category": "reftest",
-            "extra_args": ["../jsreftest/tests/jstests.list",
-                "--extra-profile-file=jsreftest/tests/user.js"]
+            "tests": ["../jsreftest/tests/jstests.list"],
+            "extra_args": [
+                "--suite=jstestbrowser",
+                "--extra-profile-file=jsreftest/tests/user.js"
+            ]
         },
         "mochitest-1": {
             "category": "mochitest",
             "extra_args": ["--total-chunks=2", "--this-chunk=1"],
         },
         "mochitest-2": {
             "category": "mochitest",
             "extra_args": ["--total-chunks=2", "--this-chunk=2"],
         },
         "mochitest-gl": {
             "category": "mochitest",
             "extra_args": ["--subsuite=webgl"],
         },
         "reftest-1": {
             "category": "reftest",
-            "extra_args": ["--total-chunks=3", "--this-chunk=1",
-                "tests/layout/reftests/reftest.list"]
+            "extra_args": [
+                "--suite=reftest",
+                "--total-chunks=3",
+                "--this-chunk=1",
+            ],
+            "tests": ["tests/layout/reftests/reftest.list"],
         },
         "reftest-2": {
-            "category": "reftest",
-            "extra_args": ["--total-chunks=3", "--this-chunk=2",
-                "tests/layout/reftests/reftest.list"]
+            "extra_args": [
+                "--suite=reftest",
+                "--total-chunks=3",
+                "--this-chunk=2",
+            ],
+            "tests": ["tests/layout/reftests/reftest.list"],
         },
         "reftest-3": {
-            "category": "reftest",
-            "extra_args": ["--total-chunks=3", "--this-chunk=3",
-                "tests/layout/reftests/reftest.list"]
+            "extra_args": [
+                "--suite=reftest",
+                "--total-chunks=3",
+                "--this-chunk=3",
+            ],
+            "tests": ["tests/layout/reftests/reftest.list"],
         },
         "crashtest": {
             "category": "reftest",
-            "extra_args": ["tests/testing/crashtest/crashtests.list"]
+            "extra_args": ["--suite=crashtest"],
+            "tests": ["tests/testing/crashtest/crashtests.list"]
         },
         "xpcshell": {
             "category": "xpcshell",
             # XXX --manifest is superceded by testing/config/mozharness/android_x86_config.py.
             # Remove when Gecko 35 no longer in tbpl.
             "extra_args": ["--manifest=tests/xpcshell_android.ini"]
         },
     }, # end of "test_definitions"
--- a/testing/mozharness/configs/b2g/emulator_automation_config.py
+++ b/testing/mozharness/configs/b2g/emulator_automation_config.py
@@ -69,18 +69,19 @@ config = {
                 "--logdir=%(logcat_dir)s",
                 "--remote-webserver=%(remote_webserver)s",
                 "--ignore-window-size",
                 "--xre-path=%(xre_path)s",
                 "--symbols-path=%(symbols_path)s",
                 "--busybox=%(busybox)s",
                 "--total-chunks=%(total_chunks)s",
                 "--this-chunk=%(this_chunk)s",
-                "tests/testing/crashtest/crashtests.list"
+                "--suite=crashtest",
             ],
+            "tests": ["tests/testing/crashtest/crashtests.list",],
             "run_filename": "runreftestb2g.py",
             "testsdir": "reftest"
         },
         "jsreftest": {
             "options": [
                 "--adbpath=%(adbpath)s",
                 "--b2gpath=%(b2gpath)s",
                 "--emulator=%(emulator)s",
@@ -89,18 +90,18 @@ config = {
                 "--remote-webserver=%(remote_webserver)s",
                 "--ignore-window-size",
                 "--xre-path=%(xre_path)s",
                 "--symbols-path=%(symbols_path)s",
                 "--busybox=%(busybox)s",
                 "--total-chunks=%(total_chunks)s",
                 "--this-chunk=%(this_chunk)s",
                 "--extra-profile-file=jsreftest/tests/user.js",
-                "jsreftest/tests/jstests.list"
             ],
+            "tests": ["jsreftest/tests/jstests.list",],
             "run_filename": "remotereftest.py",
             "testsdir": "reftest"
         },
         "mochitest": {
             "options": [
                 "--adbpath=%(adbpath)s",
                 "--b2gpath=%(b2gpath)s",
                 "--emulator=%(emulator)s",
@@ -156,18 +157,18 @@ config = {
                 "--remote-webserver=%(remote_webserver)s",
                 "--ignore-window-size",
                 "--xre-path=%(xre_path)s",
                 "--symbols-path=%(symbols_path)s",
                 "--busybox=%(busybox)s",
                 "--total-chunks=%(total_chunks)s",
                 "--this-chunk=%(this_chunk)s",
                 "--enable-oop",
-                "tests/layout/reftests/reftest.list"
             ],
+            "tests": ["tests/layout/reftests/reftest.list",],
             "run_filename": "runreftestsb2g.py",
             "testsdir": "reftest"
         },
         "xpcshell": {
             "options": [
                 "--adbpath=%(adbpath)s",
                 "--b2gpath=%(b2gpath)s",
                 "--emulator=%(emulator)s",
--- a/testing/mozharness/configs/unittests/linux_unittest.py
+++ b/testing/mozharness/configs/unittests/linux_unittest.py
@@ -1,33 +1,33 @@
 import os
 import platform
 
 # OS Specifics
-ABS_WORK_DIR = os.path.join(os.getcwd(), 'build')
+ABS_WORK_DIR = os.path.join(os.getcwd(), "build")
 BINARY_PATH = os.path.join(ABS_WORK_DIR, "firefox", "firefox-bin")
 INSTALLER_PATH = os.path.join(ABS_WORK_DIR, "installer.tar.bz2")
 XPCSHELL_NAME = "xpcshell"
-EXE_SUFFIX = ''
+EXE_SUFFIX = ""
 DISABLE_SCREEN_SAVER = True
 ADJUST_MOUSE_AND_SCREEN = False
-if platform.architecture()[0] == '64bit':
+if platform.architecture()[0] == "64bit":
     TOOLTOOL_MANIFEST_PATH = "config/tooltool-manifests/linux64/releng.manifest"
     MINIDUMP_STACKWALK_PATH = "linux64-minidump_stackwalk"
 else:
     TOOLTOOL_MANIFEST_PATH = "config/tooltool-manifests/linux32/releng.manifest"
     MINIDUMP_STACKWALK_PATH = "linux32-minidump_stackwalk"
 
 #####
 config = {
     "buildbot_json_path": "buildprops.json",
     "exes": {
-        'python': '/tools/buildbot/bin/python',
-        'virtualenv': ['/tools/buildbot/bin/python', '/tools/misc-python/virtualenv.py'],
-        'tooltool.py': "/tools/tooltool.py",
+        "python": "/tools/buildbot/bin/python",
+        "virtualenv": ["/tools/buildbot/bin/python", "/tools/misc-python/virtualenv.py"],
+        "tooltool.py": "/tools/tooltool.py",
     },
     "find_links": [
         "http://pypi.pvt.build.mozilla.org/pub",
         "http://pypi.pub.build.mozilla.org/pub",
     ],
     "pip_index": False,
     ###
     "installer_path": INSTALLER_PATH,
@@ -195,47 +195,73 @@ config = {
     },
     # local webapprt suites
     "all_webapprt_suites": {
         "chrome": ["--webapprt-chrome", "--browser-arg=-test-mode"],
         "content": ["--webapprt-content"]
     },
     # local reftest suites
     "all_reftest_suites": {
-        "reftest": ["tests/reftest/tests/layout/reftests/reftest.list"],
-        "crashtest": ["tests/reftest/tests/testing/crashtest/crashtests.list"],
-        "jsreftest": ["--extra-profile-file=tests/jsreftest/tests/user.js", "tests/jsreftest/tests/jstests.list"],
-        "reftest-ipc": {'env': {'MOZ_OMTC_ENABLED': '1',
-                                'MOZ_DISABLE_CONTEXT_SHARING_GLX': '1'},
-                        'options': ['--setpref=browser.tabs.remote=true',
-                                    '--setpref=browser.tabs.remote.autostart=true',
-                                    '--setpref=layers.offmainthreadcomposition.testing.enabled=true',
-                                    '--setpref=layers.async-pan-zoom.enabled=true',
-                                    'tests/reftest/tests/layout/reftests/reftest-sanity/reftest.list']},
-        "reftest-no-accel": ['--setpref=layers.acceleration.force-enabled=disabled',
-                             'tests/reftest/tests/layout/reftests/reftest.list'],
-        "crashtest-ipc": {'env': {'MOZ_OMTC_ENABLED': '1',
-                                  'MOZ_DISABLE_CONTEXT_SHARING_GLX': '1'},
-                          'options': ['--setpref=browser.tabs.remote=true',
-                                      '--setpref=browser.tabs.remote.autostart=true',
-                                      '--setpref=layers.offmainthreadcomposition.testing.enabled=true',
-                                      '--setpref=layers.async-pan-zoom.enabled=true',
-                                      'tests/reftest/tests/testing/crashtest/crashtests.list']},
+        "reftest": {
+            "options": ["--suite=reftest"],
+            "tests": ["tests/reftest/tests/layout/reftests/reftest.list"]
+        },
+        "crashtest": {
+            "options": ["--suite=crashtest"],
+            "tests": ["tests/reftest/tests/testing/crashtest/crashtests.list"]
+        },
+        "jsreftest": {
+            "options":["--extra-profile-file=tests/jsreftest/tests/user.js",
+                       "--suite=jstestbrowser"],
+            "tests": ["tests/jsreftest/tests/jstests.list"]
+        },
+        "reftest-ipc": {
+            "env": {
+                "MOZ_OMTC_ENABLED": "1",
+                "MOZ_DISABLE_CONTEXT_SHARING_GLX": "1"
+            },
+            "options": ["--suite=reftest",
+                        "--setpref=browser.tabs.remote=true",
+                        "--setpref=browser.tabs.remote.autostart=true",
+                        "--setpref=layers.offmainthreadcomposition.testing.enabled=true",
+                        "--setpref=layers.async-pan-zoom.enabled=true"],
+            "tests": ["tests/reftest/tests/layout/reftests/reftest-sanity/reftest.list"]
+        },
+        "reftest-no-accel": {
+            "options": ["--suite=reftest",
+                        "--setpref=layers.acceleration.force-enabled=disabled"],
+            "tests": ["tests/reftest/tests/layout/reftests/reftest.list"]},
+        "crashtest-ipc": {
+            "env": {
+                "MOZ_OMTC_ENABLED": "1",
+                "MOZ_DISABLE_CONTEXT_SHARING_GLX": "1"
+            },
+            "options": ["--suite=crashtest",
+                        "--setpref=browser.tabs.remote=true",
+                        "--setpref=browser.tabs.remote.autostart=true",
+                        "--setpref=layers.offmainthreadcomposition.testing.enabled=true",
+                        "--setpref=layers.async-pan-zoom.enabled=true"],
+            "tests": ["tests/reftest/tests/testing/crashtest/crashtests.list"]
+        },
     },
     "all_xpcshell_suites": {
-        "xpcshell": {'options': ["--xpcshell=%(abs_app_dir)s/" + XPCSHELL_NAME,
-                                 "--manifest=tests/xpcshell/tests/all-test-dirs.list"],
-                     'tests': []},
-        "xpcshell-addons": {'options': ["--xpcshell=%(abs_app_dir)s/" + XPCSHELL_NAME,
-                                        "--manifest=tests/xpcshell/tests/all-test-dirs.list",
-                                        "--tag=addons"],
-                            'tests': []}
+        "xpcshell": {
+            "options": ["--xpcshell=%(abs_app_dir)s/" + XPCSHELL_NAME,
+                        "--manifest=tests/xpcshell/tests/all-test-dirs.list"],
+            "tests": []
+        },
+        "xpcshell-addons": {
+            "options": ["--xpcshell=%(abs_app_dir)s/" + XPCSHELL_NAME,
+                        "--tag=addons",
+                        "--manifest=tests/xpcshell/tests/all-test-dirs.list"],
+            "tests": []
+        },
     },
     "all_cppunittest_suites": {
-        "cppunittest": ['tests/cppunittest']
+        "cppunittest": ["tests/cppunittest"]
     },
     "all_gtest_suites": {
         "gtest": []
     },
     "all_jittest_suites": {
         "jittest": [],
         "jittest1": ["--total-chunks=2", "--this-chunk=1"],
         "jittest2": ["--total-chunks=2", "--this-chunk=2"],
--- a/testing/mozharness/configs/unittests/mac_unittest.py
+++ b/testing/mozharness/configs/unittests/mac_unittest.py
@@ -162,34 +162,55 @@ config = {
     },
     # local webapprt suites
     "all_webapprt_suites": {
         "chrome": ["--webapprt-chrome", "--browser-arg=-test-mode"],
         "content": ["--webapprt-content"]
     },
     # local reftest suites
     "all_reftest_suites": {
-        "reftest": ["tests/reftest/tests/layout/reftests/reftest.list"],
-        "crashtest": ["tests/reftest/tests/testing/crashtest/crashtests.list"],
-        "jsreftest": ["--extra-profile-file=tests/jsreftest/tests/user.js", "tests/jsreftest/tests/jstests.list"],
-        "reftest-ipc": ['--setpref=browser.tabs.remote=true',
+        "reftest": {
+            'options': ["--suite=reftest"],
+            'tests': ["tests/reftest/tests/layout/reftests/reftest.list"]
+        },
+        "crashtest": {
+            'options': ["--suite=crashtest"],
+            'tests': ["tests/reftest/tests/testing/crashtest/crashtests.list"]
+        },
+        "jsreftest": {
+            'options':["--extra-profile-file=tests/jsreftest/tests/user.js"],
+            'tests': ["tests/jsreftest/tests/jstests.list"]
+        },
+        "reftest-ipc": {
+            'options': ['--suite=reftest',
+                        '--setpref=browser.tabs.remote=true',
                         '--setpref=browser.tabs.remote.autostart=true',
-                        '--setpref=layers.async-pan-zoom.enabled=true',
-                        'tests/reftest/tests/layout/reftests/reftest-sanity/reftest.list'],
-        "crashtest-ipc": ['--setpref=browser.tabs.remote=true',
-                          '--setpref=browser.tabs.remote.autostart=true',
-                          '--setpref=layers.async-pan-zoom.enabled=true',
-                          'tests/reftest/tests/testing/crashtest/crashtests.list'],
+                        '--setpref=layers.async-pan-zoom.enabled=true'],
+            'tests': ['tests/reftest/tests/layout/reftests/reftest-sanity/reftest.list']
+        },
+        "crashtest-ipc": {
+            'options': ['--suite=crashtest',
+                        '--setpref=browser.tabs.remote=true',
+                        '--setpref=browser.tabs.remote.autostart=true',
+                        '--setpref=layers.async-pan-zoom.enabled=true'],
+            'tests': ['tests/reftest/tests/testing/crashtest/crashtests.list']
+        },
     },
     "all_xpcshell_suites": {
-        "xpcshell": ["--manifest=tests/xpcshell/tests/all-test-dirs.list",
-                     "%(abs_app_dir)s/" + XPCSHELL_NAME],
-        "xpcshell-addons": ["--manifest=tests/xpcshell/tests/all-test-dirs.list",
-                            "--tag=addons",
-                            "%(abs_app_dir)s/" + XPCSHELL_NAME]
+        "xpcshell": {
+            'options': ["--xpcshell=%(abs_app_dir)s/" + XPCSHELL_NAME,
+                        "--manifest=tests/xpcshell/tests/all-test-dirs.list"],
+            'tests': []
+        },
+        "xpcshell-addons": {
+            'options': ["--xpcshell=%(abs_app_dir)s/" + XPCSHELL_NAME,
+                        "--tag=addons",
+                        "--manifest=tests/xpcshell/tests/all-test-dirs.list"],
+            'tests': []
+        },
     },
     "all_cppunittest_suites": {
         "cppunittest": ['tests/cppunittest']
     },
     "all_gtest_suites": {
         "gtest": []
     },
     "all_jittest_suites": {
--- a/testing/mozharness/configs/unittests/win_unittest.py
+++ b/testing/mozharness/configs/unittests/win_unittest.py
@@ -172,38 +172,66 @@ config = {
     },
     # local webapprt suites
     "all_webapprt_suites": {
         "chrome": ["--webapprt-chrome", "--browser-arg=-test-mode"],
         "content": ["--webapprt-content"]
     },
     # local reftest suites
     "all_reftest_suites": {
-        "reftest": ["tests/reftest/tests/layout/reftests/reftest.list"],
-        "crashtest": ["tests/reftest/tests/testing/crashtest/crashtests.list"],
-        "jsreftest": ["--extra-profile-file=tests/jsreftest/tests/user.js", "tests/jsreftest/tests/jstests.list"],
-        "reftest-ipc": ['--setpref=browser.tabs.remote=true',
+        "reftest": {
+            'options': ["--suite=reftest"],
+            'tests': ["tests/reftest/tests/layout/reftests/reftest.list"]
+        },
+        "crashtest": {
+            'options': ["--suite=crashtest"],
+            'tests': ["tests/reftest/tests/testing/crashtest/crashtests.list"]
+        },
+        "jsreftest": {
+            'options':["--extra-profile-file=tests/jsreftest/tests/user.js"],
+            'tests': ["tests/jsreftest/tests/jstests.list"]
+        },
+        "reftest-ipc": {
+            'options': ['--suite=reftest',
+                        '--setpref=browser.tabs.remote=true',
                         '--setpref=browser.tabs.remote.autostart=true',
-                        '--setpref=layers.async-pan-zoom.enabled=true',
-                        'tests/reftest/tests/layout/reftests/reftest-sanity/reftest.list'],
-        "reftest-no-accel": ["--setpref=gfx.direct2d.disabled=true", "--setpref=layers.acceleration.disabled=true",
-                             "tests/reftest/tests/layout/reftests/reftest.list"],
-        "reftest-omtc": ["--setpref=layers.offmainthreadcomposition.enabled=true",
-                         "tests/reftest/tests/layout/reftests/reftest.list"],
-        "crashtest-ipc": ['--setpref=browser.tabs.remote=true',
-                          '--setpref=browser.tabs.remote.autostart=true',
-                          '--setpref=layers.async-pan-zoom.enabled=true',
-                          'tests/reftest/tests/testing/crashtest/crashtests.list'],
+                        '--setpref=layers.async-pan-zoom.enabled=true'],
+            'tests': ['tests/reftest/tests/layout/reftests/reftest-sanity/reftest.list']
+        },
+        "reftest-no-accel": {
+            "options": ["--suite=reftest",
+                        "--setpref=gfx.direct2d.disabled=true",
+                        "--setpref=layers.acceleration.disabled=true"],
+            "tests": ["tests/reftest/tests/layout/reftests/reftest.list"]
+        },
+        "reftest-omtc": {
+            "options": ["--suite=reftest",
+                        "--setpref=layers.offmainthreadcomposition.enabled=true"],
+            "tests": ["tests/reftest/tests/layout/reftests/reftest.list"]
+        },
+        "crashtest-ipc": {
+            "options": ["--suite=crashtest",
+                        '--setpref=browser.tabs.remote=true',
+                        '--setpref=browser.tabs.remote.autostart=true',
+                        '--setpref=layers.async-pan-zoom.enabled=true'],
+            "tests": ['tests/reftest/tests/testing/crashtest/crashtests.list'],
+        },
     },
     "all_xpcshell_suites": {
-        "xpcshell": ["--manifest=tests/xpcshell/tests/all-test-dirs.list",
-                     "%(abs_app_dir)s/" + XPCSHELL_NAME],
-        "xpcshell-addons": ["--manifest=tests/xpcshell/tests/all-test-dirs.list",
-                            "--tag=addons",
-                            "%(abs_app_dir)s/" + XPCSHELL_NAME]
+        "xpcshell": {
+            'options': ["--xpcshell=%(abs_app_dir)s/" + XPCSHELL_NAME,
+                        "--manifest=tests/xpcshell/tests/all-test-dirs.list"],
+            'tests': []
+        },
+        "xpcshell-addons": {
+            'options': ["--xpcshell=%(abs_app_dir)s/" + XPCSHELL_NAME,
+                        "--tag=addons",
+                        "--manifest=tests/xpcshell/tests/all-test-dirs.list"],
+            'tests': []
+        },
     },
     "all_cppunittest_suites": {
         "cppunittest": ['tests/cppunittest']
     },
     "all_gtest_suites": {
         "gtest": []
     },
     "all_jittest_suites": {
--- a/testing/mozharness/scripts/android_emulator_unittest.py
+++ b/testing/mozharness/scripts/android_emulator_unittest.py
@@ -478,16 +478,25 @@ class AndroidEmulatorTest(BlobUploadMixi
 
         for arg in self.test_suite_definitions[self.test_suite]["extra_args"]:
             argname = arg.split('=')[0]
             # only add the extra arg if it wasn't already defined by in-tree configs
             if any(a.split('=')[0] == argname for a in cmd):
                 continue
             cmd.append(arg)
 
+        tests = None
+        if "tests" in self.test_suite_definitions[self.test_suite]:
+            tests = self.test_suite_definitions[self.test_suite]["tests"]
+        elif "tests" in self.config["suite_definitions"][suite_category]:
+            tests = self.config["suite_definitions"][suite_category]["tests"]
+
+        if tests:
+            cmd.extend(tests)
+
         return cmd
 
     def _tooltool_fetch(self, url):
         c = self.config
         dirs = self.query_abs_dirs()
 
         manifest_path = self.download_file(
             url,
--- a/testing/mozharness/scripts/android_panda.py
+++ b/testing/mozharness/scripts/android_panda.py
@@ -247,16 +247,19 @@ class PandaTest(TestingMixin, MercurialS
                     self._install_app()
                 cmd = abs_base_cmd[:]
                 replace_dict = {}
                 for arg in suites[suite]:
                     cmd.append(arg % replace_dict)
 
                 cmd = self.append_harness_extra_args(cmd)
 
+                tests = self.config["suite_definitions"][suite_category].get("tests", [])
+                cmd += tests
+
                 tbpl_status, log_level = None, None
                 error_list = BaseErrorList + [{
                     'regex': re.compile(r"(?:TEST-UNEXPECTED-FAIL|PROCESS-CRASH) \| .* \| (application crashed|missing output line for total leaks!|negative leaks caught!|\d+ bytes leaked)"),
                     'level': ERROR,
                 }]
                 c = self.config
                 if c.get('minidump_stackwalk_path'):
                     env['MINIDUMP_STACKWALK'] = c['minidump_stackwalk_path']
--- a/testing/mozharness/scripts/androidx86_emulator_unittest.py
+++ b/testing/mozharness/scripts/androidx86_emulator_unittest.py
@@ -447,16 +447,21 @@ class AndroidEmulatorTest(BlobUploadMixi
 
         for arg in self.test_suite_definitions[suite_name]["extra_args"]:
             argname = arg.split('=')[0]
             # only add the extra arg if it wasn't already defined by in-tree configs
             if any(a.split('=')[0] == argname for a in cmd):
                 continue
             cmd.append(arg)
 
+        if "tests" in self.test_suite_definitions[suite_name]:
+            cmd.extend(self.suite_definitions[suite_name]["tests"])
+        elif "tests" in c["suite_definitions"][suite_category]:
+            cmd.extend(self.config["suite_definitions"][suite_category]["tests"])
+
         return cmd
 
     def preflight_run_tests(self):
         super(AndroidEmulatorTest, self).preflight_run_tests()
 
         if not os.path.isfile(self.adb_path):
             self.fatal("The adb binary '%s' is not a valid file!" % self.adb_path)
 
--- a/testing/mozharness/scripts/b2g_desktop_unittest.py
+++ b/testing/mozharness/scripts/b2g_desktop_unittest.py
@@ -149,24 +149,29 @@ class B2GDesktopTest(BlobUploadMixin, Te
             'this_chunk': self.config.get('this_chunk'),
             'cert_path': dirs['abs_certs_dir'],
             'browser_arg': self.config.get('browser_arg'),
             'raw_log_file': raw_log_file,
             'error_summary_file': error_summary_file,
         }
 
         if suite not in self.config["suite_definitions"]:
-            self.fatal("'%s' not defined in the config!" % suite),
+            self.fatal("'%s' not defined in the config!" % suite)
 
         options = self.config["suite_definitions"][suite]["options"]
         if options:
             for option in options:
                 option = option % str_format_values
                 if not option.endswith('None'):
                     cmd.append(option)
+
+        tests = self.config["suite_definitions"][suite].get("tests")
+        if tests:
+            cmd.extend(tests)
+
         return cmd
 
     def download_and_extract(self):
         suite_category = self.config['test_suite']
         super(B2GDesktopTest, self).download_and_extract(suite_categories=[suite_category])
 
     def preflight_run_tests(self):
         super(B2GDesktopTest, self).preflight_run_tests()
--- a/testing/mozharness/scripts/b2g_emulator_unittest.py
+++ b/testing/mozharness/scripts/b2g_emulator_unittest.py
@@ -276,16 +276,21 @@ class B2GEmulatorTest(TestingMixin, VCSM
             self.fatal("Key '%s' not defined in the config!" % suite)
 
         options = self.config["suite_definitions"][suite]["options"]
         if options:
             for option in options:
                 option = option % str_format_values
                 if not option.endswith('None'):
                     cmd.append(option)
+
+        tests = self.config["suite_definitions"][suite].get("tests", [])
+        if tests:
+            cmd.extend(tests)
+
         return cmd
 
     def _query_adb(self):
         return self.which('adb') or \
             os.getenv('ADB_PATH') or \
             os.path.join(self.query_abs_dirs()['abs_b2g-distro_dir'],
                          'out', 'host', 'linux-x86', 'bin', 'adb')
 
@@ -331,18 +336,19 @@ class B2GEmulatorTest(TestingMixin, VCSM
         error_list = self.error_list
         error_list.extend(BaseErrorList)
 
         suite = self.config['test_suite']
         if suite not in self.test_suites:
             self.fatal("Don't know how to run --test-suite '%s'!" % suite)
 
         cmd = self._query_abs_base_cmd(suite)
+        cmd = self.append_harness_extra_args(cmd)
+
         cwd = dirs['abs_%s_dir' % suite]
-        cmd = self.append_harness_extra_args(cmd)
 
         # TODO we probably have to move some of the code in
         # scripts/desktop_unittest.py and scripts/marionette.py to
         # mozharness.mozilla.testing.unittest so we can share it.
         # In the short term, I'm ok with some duplication of code if it
         # expedites things; please file bugs to merge if that happens.
 
         suite_name = [x for x in self.test_suites if x in self.config['test_suite']][0]
--- a/testing/mozharness/scripts/desktop_unittest.py
+++ b/testing/mozharness/scripts/desktop_unittest.py
@@ -583,18 +583,18 @@ class DesktopUnittest(TestingMixin, Merc
 
                     # Mac specific, but points to abs_app_dir on other
                     # platforms.
                     'abs_res_dir': abs_res_dir,
                 }
                 options_list = []
                 env = {}
                 if isinstance(suites[suite], dict):
-                    options_list = suites[suite]['options']
-                    env = copy.deepcopy(suites[suite]['env'])
+                    options_list = suites[suite]['options'] + suites[suite].get("tests", [])
+                    env = copy.deepcopy(suites[suite].get('env', {}))
                 else:
                     options_list = suites[suite]
 
                 for arg in options_list:
                     cmd.append(arg % replace_dict)
 
                 cmd = self.append_harness_extra_args(cmd)