diff --git a/pulsar/scripts/chown_working_directory.py b/pulsar/scripts/chown_working_directory.py
index 56f6bdc930d160743b0f56d78f4155c1cae26fcb..970e13ed38418029d7ec8495f73b5732a9552ff6 100644
--- a/pulsar/scripts/chown_working_directory.py
+++ b/pulsar/scripts/chown_working_directory.py
@@ -11,12 +11,12 @@ DESCRIPTION = "Change ownership of a job working directory."
 FORCE_PRODUCTION = False
 
 
-def main():
+def main(argv=None):
     arg_parser = ArgumentParser(description=DESCRIPTION)
     arg_parser.add_argument("--user", required=True)
     arg_parser.add_argument("--job_id")
     arg_parser.add_argument("--job_directory")
-    args = arg_parser.parse_args()
+    args = arg_parser.parse_args(argv)
     user = args.user
     job_id = args.job_id
 
diff --git a/pulsar/scripts/drmaa_kill.py b/pulsar/scripts/drmaa_kill.py
index c21e6736977446424c661d123a3c73f3298a236a..6401afa246323a788ef96771955f1025343e1583 100644
--- a/pulsar/scripts/drmaa_kill.py
+++ b/pulsar/scripts/drmaa_kill.py
@@ -6,10 +6,10 @@ from pulsar.main import ArgumentParser
 DESCRIPTION = "Kill a job via DRMAA interface."
 
 
-def main():
+def main(argv=None):
     arg_parser = ArgumentParser(description=DESCRIPTION)
     arg_parser.add_argument("--external_id", required=True)
-    args = arg_parser.parse_args()
+    args = arg_parser.parse_args(argv)
     external_id = load(args.external_id)
     session = DrmaaSessionFactory().get()
     external_id = session.kill(external_id)
diff --git a/pulsar/scripts/drmaa_launch.py b/pulsar/scripts/drmaa_launch.py
index 38345ee5a005bf35b4b8b5cac7c09fa50c9ece38..8e2c0889f3f9ba8fdd532f6a79d61063eeb03542 100644
--- a/pulsar/scripts/drmaa_launch.py
+++ b/pulsar/scripts/drmaa_launch.py
@@ -7,10 +7,10 @@ from pulsar.main import ArgumentParser
 DESCRIPTION = "Submit a DRMAA job."
 
 
-def main():
+def main(argv=None):
     arg_parser = ArgumentParser(description=DESCRIPTION)
     arg_parser.add_argument("--job_attributes", required=True)
-    args = arg_parser.parse_args()
+    args = arg_parser.parse_args(argv)
     job_attributes = load(open(args.job_attributes, "r"))
     session = DrmaaSessionFactory().get()
     external_id = session.run_job(**job_attributes)
diff --git a/pulsar/scripts/mesos_executor.py b/pulsar/scripts/mesos_executor.py
index 4bb710b6e53d1dfdc31320ff5226f96a82505262..df39ecbd24a4f2f022c7bec2ec407a7c876ff007 100644
--- a/pulsar/scripts/mesos_executor.py
+++ b/pulsar/scripts/mesos_executor.py
@@ -68,9 +68,9 @@ class PulsarExecutor(Executor):
         driver.sendFrameworkMessage(message)
 
 
-def run_executor():
+def run_executor(argv=None):
     arg_parser = ArgumentParser(description=DESCRIPTION)
-    arg_parser.parse_args()
+    arg_parser.parse_args(argv)
 
     ensure_mesos_libs()
     log.info("Starting Pulsar executor")
@@ -80,5 +80,10 @@ def run_executor():
         exit_code = 1
     return exit_code
 
+
+def main(argv=None):
+    sys.exit(run_executor(argv))
+
+
 if __name__ == "__main__":
-    sys.exit(run_executor())
+    main()
diff --git a/pulsar/scripts/mesos_framework.py b/pulsar/scripts/mesos_framework.py
index 592b663d7425b2bfbbe91bc990c2eddc535c4279..5da99dcc20c542dd866d79a300aaef344730957a 100644
--- a/pulsar/scripts/mesos_framework.py
+++ b/pulsar/scripts/mesos_framework.py
@@ -11,14 +11,14 @@ from pulsar.main import (
 DESCRIPTION = "Pulsar Mesos Framework Entry Point."
 
 
-def main():
-    ensure_mesos_libs()
+def main(argv=None):
     arg_parser = ArgumentParser(
         description=DESCRIPTION,
     )
     arg_parser.add_argument("--master", default=None, required=True)
     PulsarManagerConfigBuilder.populate_options(arg_parser)
-    args = arg_parser.parse_args()
+    args = arg_parser.parse_args(argv)
+    ensure_mesos_libs()
 
     config_builder = PulsarManagerConfigBuilder(args)
     config_builder.setup_logging()
diff --git a/test/cli_help_tests.py b/test/cli_help_tests.py
new file mode 100644
index 0000000000000000000000000000000000000000..693535a68f4d61b77fb506fea7fe717c2de5b220
--- /dev/null
+++ b/test/cli_help_tests.py
@@ -0,0 +1,22 @@
+import pulsar.scripts.chown_working_directory
+import pulsar.scripts.drmaa_kill
+import pulsar.scripts.drmaa_launch
+import pulsar.scripts.mesos_executor
+import pulsar.scripts.mesos_framework
+import pulsar.scripts.submit
+
+MODULES = [
+    pulsar.scripts.drmaa_kill,
+    pulsar.scripts.drmaa_launch,
+    pulsar.scripts.mesos_executor,
+    pulsar.scripts.mesos_framework,
+    pulsar.scripts.submit,
+]
+
+
+def test_scripts_have_help():
+    for module in MODULES:
+        try:
+            module.main(["-h"])
+        except SystemExit as e:
+            assert e.code == 0, module