diff --git a/scripts/tests/test_commands.py b/scripts/tests/test_commands.py
new file mode 100644
index 0000000..458e4e2
--- /dev/null
+++ b/scripts/tests/test_commands.py
@@ -0,0 +1,112 @@
+# SPDX-License-Identifier: Apache-2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import pytest
+
+from click.testing import CliRunner
+from imgtool.main import imgtool
+from imgtool import imgtool_version
+
+# all available imgtool commands
+COMMANDS = [
+    "create",
+    "dumpinfo",
+    "getpriv",
+    "getpub",
+    "getpubhash",
+    "keygen",
+    "sign",
+    "verify",
+    "version",
+]
+
+
+def test_new_command():
+    """Check that no new commands had been added,
+    so that tests would be updated in such case"""
+    for cmd in imgtool.commands:
+        assert cmd in COMMANDS
+
+
+def test_help():
+    """Simple test for the imgtool's help option,
+    mostly just to see that it can be started"""
+    runner = CliRunner()
+
+    result_short = runner.invoke(imgtool, ["-h"])
+    assert result_short.exit_code == 0
+
+    result_long = runner.invoke(imgtool, ["--help"])
+    assert result_long.exit_code == 0
+    assert result_short.output == result_long.output
+
+    # by default help should be also produced
+    result_empty = runner.invoke(imgtool)
+    assert result_empty.exit_code == 0
+    assert result_empty.output == result_short.output
+
+
+def test_version():
+    """Check that some version info is produced"""
+    runner = CliRunner()
+
+    result = runner.invoke(imgtool, ["version"])
+    assert result.exit_code == 0
+    assert result.output == imgtool_version + "\n"
+
+    result_help = runner.invoke(imgtool, ["version", "-h"])
+    assert result_help.exit_code == 0
+    assert result_help.output != result.output
+
+
+def test_unknown():
+    """Check that unknown command will be handled"""
+    runner = CliRunner()
+
+    result = runner.invoke(imgtool, ["unknown"])
+    assert result.exit_code != 0
+
+
+@pytest.mark.parametrize("command", COMMANDS)
+def test_cmd_help(command):
+    """Check that all commands have some help"""
+    runner = CliRunner()
+
+    result_short = runner.invoke(imgtool, [command, "-h"])
+    assert result_short.exit_code == 0
+
+    result_long = runner.invoke(imgtool, [command, "--help"])
+    assert result_long.exit_code == 0
+
+    assert result_short.output == result_long.output
+
+
+@pytest.mark.parametrize("command1", COMMANDS)
+@pytest.mark.parametrize("command2", COMMANDS)
+def test_cmd_dif_help(command1, command2):
+    """Check that all commands have some different help"""
+    runner = CliRunner()
+
+    result_general = runner.invoke(imgtool, "--help")
+    assert result_general.exit_code == 0
+
+    result_cmd1 = runner.invoke(imgtool, [command1, "--help"])
+    assert result_cmd1.exit_code == 0
+    assert result_cmd1.output != result_general.output
+
+    if command1 != command2:
+        result_cmd2 = runner.invoke(imgtool, [command2, "--help"])
+        assert result_cmd2.exit_code == 0
+
+        assert result_cmd1.output != result_cmd2.output
