Testing eric7

Mon, 05 Sep 2022 18:08:43 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 05 Sep 2022 18:08:43 +0200
branch
eric7
changeset 9311
8e588f403fd9
parent 9310
8ab45a4a6d96
child 9312
490f9539e535

Testing
- extended the testing dialog to allow test case filtering on markers (pytest only)

docs/changelog file | annotate | diff | comparison | revisions
eric7.epj file | annotate | diff | comparison | revisions
src/eric7/APIs/Python3/eric7.api file | annotate | diff | comparison | revisions
src/eric7/APIs/Python3/eric7.bas file | annotate | diff | comparison | revisions
src/eric7/Documentation/Help/source.qch file | annotate | diff | comparison | revisions
src/eric7/Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
src/eric7/Documentation/Source/eric7.PipInterface.piplicenses.html file | annotate | diff | comparison | revisions
src/eric7/Documentation/Source/eric7.Testing.Interfaces.PytestExecutor.html file | annotate | diff | comparison | revisions
src/eric7/Documentation/Source/eric7.Testing.Interfaces.PytestRunner.html file | annotate | diff | comparison | revisions
src/eric7/Documentation/Source/eric7.Testing.Interfaces.TestExecutorBase.html file | annotate | diff | comparison | revisions
src/eric7/Documentation/Source/eric7.Testing.MarkersWindow.html file | annotate | diff | comparison | revisions
src/eric7/Documentation/Source/eric7.Testing.TestingWidget.html file | annotate | diff | comparison | revisions
src/eric7/Documentation/Source/index-eric7.Testing.html file | annotate | diff | comparison | revisions
src/eric7/Testing/Interfaces/PytestExecutor.py file | annotate | diff | comparison | revisions
src/eric7/Testing/Interfaces/PytestRunner.py file | annotate | diff | comparison | revisions
src/eric7/Testing/Interfaces/TestExecutorBase.py file | annotate | diff | comparison | revisions
src/eric7/Testing/MarkersWindow.py file | annotate | diff | comparison | revisions
src/eric7/Testing/MarkersWindow.ui file | annotate | diff | comparison | revisions
src/eric7/Testing/TestingWidget.py file | annotate | diff | comparison | revisions
src/eric7/Testing/TestingWidget.ui file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_cs.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_de.qm file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_de.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_empty.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_en.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_es.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_fr.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_it.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_pt.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_ru.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_tr.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_zh_CN.ts file | annotate | diff | comparison | revisions
--- a/docs/changelog	Sun Sep 04 16:11:32 2022 +0200
+++ b/docs/changelog	Mon Sep 05 18:08:43 2022 +0200
@@ -4,6 +4,8 @@
 - bug fixes
 - pip Interface
   -- changed the pip licenses dialog to show the count of each individual license
+- Testing
+  -- extended the testing dialog to allow test case filtering on markers (pytest only)
 
 Version 22.9:
 - bug fixes
--- a/eric7.epj	Sun Sep 04 16:11:32 2022 +0200
+++ b/eric7.epj	Mon Sep 05 18:08:43 2022 +0200
@@ -652,6 +652,7 @@
       "src/eric7/Tasks/TaskPropertiesDialog.ui",
       "src/eric7/Templates/TemplatePropertiesDialog.ui",
       "src/eric7/Templates/TemplateSingleVariableDialog.ui",
+      "src/eric7/Testing/MarkersWindow.ui",
       "src/eric7/Testing/TestingWidget.ui",
       "src/eric7/UI/AuthenticationDialog.ui",
       "src/eric7/UI/ClearPrivateDataDialog.ui",
@@ -1999,6 +2000,7 @@
       "src/eric7/Testing/Interfaces/UnittestExecutor.py",
       "src/eric7/Testing/Interfaces/UnittestRunner.py",
       "src/eric7/Testing/Interfaces/__init__.py",
+      "src/eric7/Testing/MarkersWindow.py",
       "src/eric7/Testing/TestResultsTree.py",
       "src/eric7/Testing/TestingWidget.py",
       "src/eric7/Testing/__init__.py",
--- a/src/eric7/APIs/Python3/eric7.api	Sun Sep 04 16:11:32 2022 +0200
+++ b/src/eric7/APIs/Python3/eric7.api	Mon Sep 05 18:08:43 2022 +0200
@@ -3290,6 +3290,7 @@
 eric7.PipInterface.piplicenses.create_licenses_list?4(args: "CustomNamespace", output_fields=DEFAULT_OUTPUT_FIELDS)
 eric7.PipInterface.piplicenses.create_output_string?4(args: "CustomNamespace")
 eric7.PipInterface.piplicenses.create_parser?4()
+eric7.PipInterface.piplicenses.create_summary_by_license_list?4(args: "CustomNamespace")
 eric7.PipInterface.piplicenses.create_summary_list?4(args: "CustomNamespace")
 eric7.PipInterface.piplicenses.enum_key_to_value?4(enum_key: Enum)
 eric7.PipInterface.piplicenses.find_license_from_classifier?4(message)
@@ -9295,12 +9296,14 @@
 eric7.Testing.Interfaces.Frameworks?7
 eric7.Testing.Interfaces.PytestExecutor.PytestExecutor.createArguments?4(config)
 eric7.Testing.Interfaces.PytestExecutor.PytestExecutor.finished?4()
+eric7.Testing.Interfaces.PytestExecutor.PytestExecutor.getMarkers?4(interpreter, workdir)
 eric7.Testing.Interfaces.PytestExecutor.PytestExecutor.getVersions?4(interpreter)
 eric7.Testing.Interfaces.PytestExecutor.PytestExecutor.hasCoverage?4(interpreter)
 eric7.Testing.Interfaces.PytestExecutor.PytestExecutor.module?7
 eric7.Testing.Interfaces.PytestExecutor.PytestExecutor.name?7
 eric7.Testing.Interfaces.PytestExecutor.PytestExecutor.runner?7
 eric7.Testing.Interfaces.PytestExecutor.PytestExecutor.start?4(config, pythonpath)
+eric7.Testing.Interfaces.PytestExecutor.PytestExecutor.supportsMarkers?4(interpreter)
 eric7.Testing.Interfaces.PytestExecutor.PytestExecutor?1(testWidget)
 eric7.Testing.Interfaces.PytestRunner.EricPlugin.pytest_collectreport?4(report)
 eric7.Testing.Interfaces.PytestRunner.EricPlugin.pytest_itemcollected?4(item)
@@ -9311,9 +9314,13 @@
 eric7.Testing.Interfaces.PytestRunner.EricPlugin.pytest_sessionfinish?4(session, exitstatus)
 eric7.Testing.Interfaces.PytestRunner.EricPlugin.pytest_sessionstart?4(session)
 eric7.Testing.Interfaces.PytestRunner.EricPlugin?1(writer)
+eric7.Testing.Interfaces.PytestRunner.GetMarkersPlugin.getMarkers?4()
+eric7.Testing.Interfaces.PytestRunner.GetMarkersPlugin.pytest_cmdline_main?4(config)
+eric7.Testing.Interfaces.PytestRunner.GetMarkersPlugin?1()
 eric7.Testing.Interfaces.PytestRunner.GetPluginVersionsPlugin.getVersions?4()
 eric7.Testing.Interfaces.PytestRunner.GetPluginVersionsPlugin.pytest_cmdline_main?4(config)
 eric7.Testing.Interfaces.PytestRunner.GetPluginVersionsPlugin?1()
+eric7.Testing.Interfaces.PytestRunner.getMarkers?4()
 eric7.Testing.Interfaces.PytestRunner.getVersions?4()
 eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase._prepareProcess?5(workDir, pythonpath)
 eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.collectError?7
@@ -9321,6 +9328,7 @@
 eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.coverageDataSaved?7
 eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.createArguments?4(config)
 eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.finished?4()
+eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.getMarkers?4(interpreter, workdir)
 eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.getVersions?4(interpreter)
 eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.hasCoverage?4(interpreter)
 eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.isInstalled?4(interpreter)
@@ -9332,6 +9340,7 @@
 eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.startTest?7
 eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.stop?7
 eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.stopIfRunning?4()
+eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.supportsMarkers?4(interpreter)
 eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.testFinished?7
 eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.testResult?7
 eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.testRunAboutToBeStarted?7
@@ -9368,6 +9377,9 @@
 eric7.Testing.Interfaces.UnittestRunner.EricTestResult?1(writer, failfast)
 eric7.Testing.Interfaces.UnittestRunner._assembleTestCasesList?5(suite)
 eric7.Testing.Interfaces.UnittestRunner.runtest?4(argv)
+eric7.Testing.MarkersWindow.MarkersWindow.closeEvent?4(e)
+eric7.Testing.MarkersWindow.MarkersWindow.showMarkers?4(markers)
+eric7.Testing.MarkersWindow.MarkersWindow?1(parent=None)
 eric7.Testing.TestResultsTree.TestResultsModel.DurationColumn?7
 eric7.Testing.TestResultsTree.TestResultsModel.Headers?7
 eric7.Testing.TestResultsTree.TestResultsModel.MessageColumn?7
@@ -9405,6 +9417,7 @@
 eric7.Testing.TestingWidget.TestingWidget.on_buttonBox_clicked?4(button)
 eric7.Testing.TestingWidget.TestingWidget.on_discoverCheckBox_toggled?4(checked)
 eric7.Testing.TestingWidget.TestingWidget.on_frameworkComboBox_currentIndexChanged?4(index)
+eric7.Testing.TestingWidget.TestingWidget.on_showMarkersButton_clicked?4()
 eric7.Testing.TestingWidget.TestingWidget.on_testsuitePicker_aboutToShowPathPickerDialog?4()
 eric7.Testing.TestingWidget.TestingWidget.on_venvComboBox_currentIndexChanged?4(index)
 eric7.Testing.TestingWidget.TestingWidget.on_versionsButton_clicked?4()
--- a/src/eric7/APIs/Python3/eric7.bas	Sun Sep 04 16:11:32 2022 +0200
+++ b/src/eric7/APIs/Python3/eric7.bas	Mon Sep 05 18:08:43 2022 +0200
@@ -638,6 +638,7 @@
 MakePropertiesDialog QDialog Ui_MakePropertiesDialog
 ManageDictionariesDialog QDialog Ui_ManageDictionariesDialog
 MarkdownProvider MarkupBase
+MarkersWindow QWidget Ui_MarkersWindow
 MasterPasswordEntryDialog QDialog Ui_MasterPasswordEntryDialog
 MercurialPage ConfigurationPageBase Ui_MercurialPage
 MermaidExtension Extension
Binary file src/eric7/Documentation/Help/source.qch has changed
--- a/src/eric7/Documentation/Help/source.qhp	Sun Sep 04 16:11:32 2022 +0200
+++ b/src/eric7/Documentation/Help/source.qhp	Mon Sep 05 18:08:43 2022 +0200
@@ -1068,6 +1068,7 @@
               <section title="eric7.Testing.Interfaces.UnittestExecutor" ref="eric7.Testing.Interfaces.UnittestExecutor.html" />
               <section title="eric7.Testing.Interfaces.UnittestRunner" ref="eric7.Testing.Interfaces.UnittestRunner.html" />
             </section>
+            <section title="eric7.Testing.MarkersWindow" ref="eric7.Testing.MarkersWindow.html" />
             <section title="eric7.Testing.TestResultsTree" ref="eric7.Testing.TestResultsTree.html" />
             <section title="eric7.Testing.TestingWidget" ref="eric7.Testing.TestingWidget.html" />
             <section title="eric7.Testing.__init__" ref="eric7.Testing.__init__.html" />
@@ -6311,6 +6312,10 @@
       <keyword name="GenericMicroPythonDevice.setButtons" id="GenericMicroPythonDevice.setButtons" ref="eric7.MicroPython.GenericMicroPythonDevices.html#GenericMicroPythonDevice.setButtons" />
       <keyword name="GenericMicroPythonDevice.supportsLocalFileAccess" id="GenericMicroPythonDevice.supportsLocalFileAccess" ref="eric7.MicroPython.GenericMicroPythonDevices.html#GenericMicroPythonDevice.supportsLocalFileAccess" />
       <keyword name="GenericMicroPythonDevices (Module)" id="GenericMicroPythonDevices (Module)" ref="eric7.MicroPython.GenericMicroPythonDevices.html" />
+      <keyword name="GetMarkersPlugin" id="GetMarkersPlugin" ref="eric7.Testing.Interfaces.PytestRunner.html#GetMarkersPlugin" />
+      <keyword name="GetMarkersPlugin (Constructor)" id="GetMarkersPlugin (Constructor)" ref="eric7.Testing.Interfaces.PytestRunner.html#GetMarkersPlugin.__init__" />
+      <keyword name="GetMarkersPlugin.getMarkers" id="GetMarkersPlugin.getMarkers" ref="eric7.Testing.Interfaces.PytestRunner.html#GetMarkersPlugin.getMarkers" />
+      <keyword name="GetMarkersPlugin.pytest_cmdline_main" id="GetMarkersPlugin.pytest_cmdline_main" ref="eric7.Testing.Interfaces.PytestRunner.html#GetMarkersPlugin.pytest_cmdline_main" />
       <keyword name="GetPluginVersionsPlugin" id="GetPluginVersionsPlugin" ref="eric7.Testing.Interfaces.PytestRunner.html#GetPluginVersionsPlugin" />
       <keyword name="GetPluginVersionsPlugin (Constructor)" id="GetPluginVersionsPlugin (Constructor)" ref="eric7.Testing.Interfaces.PytestRunner.html#GetPluginVersionsPlugin.__init__" />
       <keyword name="GetPluginVersionsPlugin.getVersions" id="GetPluginVersionsPlugin.getVersions" ref="eric7.Testing.Interfaces.PytestRunner.html#GetPluginVersionsPlugin.getVersions" />
@@ -10228,6 +10233,11 @@
       <keyword name="MarkdownProvider.numberedList" id="MarkdownProvider.numberedList" ref="eric7.QScintilla.MarkupProviders.MarkdownProvider.html#MarkdownProvider.numberedList" />
       <keyword name="MarkdownProvider.quote" id="MarkdownProvider.quote" ref="eric7.QScintilla.MarkupProviders.MarkdownProvider.html#MarkdownProvider.quote" />
       <keyword name="MarkdownProvider.strikethrough" id="MarkdownProvider.strikethrough" ref="eric7.QScintilla.MarkupProviders.MarkdownProvider.html#MarkdownProvider.strikethrough" />
+      <keyword name="MarkersWindow" id="MarkersWindow" ref="eric7.Testing.MarkersWindow.html#MarkersWindow" />
+      <keyword name="MarkersWindow (Constructor)" id="MarkersWindow (Constructor)" ref="eric7.Testing.MarkersWindow.html#MarkersWindow.__init__" />
+      <keyword name="MarkersWindow (Module)" id="MarkersWindow (Module)" ref="eric7.Testing.MarkersWindow.html" />
+      <keyword name="MarkersWindow.closeEvent" id="MarkersWindow.closeEvent" ref="eric7.Testing.MarkersWindow.html#MarkersWindow.closeEvent" />
+      <keyword name="MarkersWindow.showMarkers" id="MarkersWindow.showMarkers" ref="eric7.Testing.MarkersWindow.html#MarkersWindow.showMarkers" />
       <keyword name="MarkupBase" id="MarkupBase" ref="eric7.QScintilla.MarkupProviders.MarkupBase.html#MarkupBase" />
       <keyword name="MarkupBase (Constructor)" id="MarkupBase (Constructor)" ref="eric7.QScintilla.MarkupProviders.MarkupBase.html#MarkupBase.__init__" />
       <keyword name="MarkupBase (Module)" id="MarkupBase (Module)" ref="eric7.QScintilla.MarkupProviders.MarkupBase.html" />
@@ -12801,9 +12811,11 @@
       <keyword name="PytestExecutor.__processData" id="PytestExecutor.__processData" ref="eric7.Testing.Interfaces.PytestExecutor.html#PytestExecutor.__processData" />
       <keyword name="PytestExecutor.createArguments" id="PytestExecutor.createArguments" ref="eric7.Testing.Interfaces.PytestExecutor.html#PytestExecutor.createArguments" />
       <keyword name="PytestExecutor.finished" id="PytestExecutor.finished" ref="eric7.Testing.Interfaces.PytestExecutor.html#PytestExecutor.finished" />
+      <keyword name="PytestExecutor.getMarkers" id="PytestExecutor.getMarkers" ref="eric7.Testing.Interfaces.PytestExecutor.html#PytestExecutor.getMarkers" />
       <keyword name="PytestExecutor.getVersions" id="PytestExecutor.getVersions" ref="eric7.Testing.Interfaces.PytestExecutor.html#PytestExecutor.getVersions" />
       <keyword name="PytestExecutor.hasCoverage" id="PytestExecutor.hasCoverage" ref="eric7.Testing.Interfaces.PytestExecutor.html#PytestExecutor.hasCoverage" />
       <keyword name="PytestExecutor.start" id="PytestExecutor.start" ref="eric7.Testing.Interfaces.PytestExecutor.html#PytestExecutor.start" />
+      <keyword name="PytestExecutor.supportsMarkers" id="PytestExecutor.supportsMarkers" ref="eric7.Testing.Interfaces.PytestExecutor.html#PytestExecutor.supportsMarkers" />
       <keyword name="PytestRunner (Module)" id="PytestRunner (Module)" ref="eric7.Testing.Interfaces.PytestRunner.html" />
       <keyword name="Python (Package)" id="Python (Package)" ref="index-eric7.DebugClients.Python.html" />
       <keyword name="PythonAstViewer" id="PythonAstViewer" ref="eric7.UI.PythonAstViewer.html#PythonAstViewer" />
@@ -15927,12 +15939,14 @@
       <keyword name="TestExecutorBase._prepareProcess" id="TestExecutorBase._prepareProcess" ref="eric7.Testing.Interfaces.TestExecutorBase.html#TestExecutorBase._prepareProcess" />
       <keyword name="TestExecutorBase.createArguments" id="TestExecutorBase.createArguments" ref="eric7.Testing.Interfaces.TestExecutorBase.html#TestExecutorBase.createArguments" />
       <keyword name="TestExecutorBase.finished" id="TestExecutorBase.finished" ref="eric7.Testing.Interfaces.TestExecutorBase.html#TestExecutorBase.finished" />
+      <keyword name="TestExecutorBase.getMarkers" id="TestExecutorBase.getMarkers" ref="eric7.Testing.Interfaces.TestExecutorBase.html#TestExecutorBase.getMarkers" />
       <keyword name="TestExecutorBase.getVersions" id="TestExecutorBase.getVersions" ref="eric7.Testing.Interfaces.TestExecutorBase.html#TestExecutorBase.getVersions" />
       <keyword name="TestExecutorBase.hasCoverage" id="TestExecutorBase.hasCoverage" ref="eric7.Testing.Interfaces.TestExecutorBase.html#TestExecutorBase.hasCoverage" />
       <keyword name="TestExecutorBase.isInstalled" id="TestExecutorBase.isInstalled" ref="eric7.Testing.Interfaces.TestExecutorBase.html#TestExecutorBase.isInstalled" />
       <keyword name="TestExecutorBase.readAllOutput" id="TestExecutorBase.readAllOutput" ref="eric7.Testing.Interfaces.TestExecutorBase.html#TestExecutorBase.readAllOutput" />
       <keyword name="TestExecutorBase.start" id="TestExecutorBase.start" ref="eric7.Testing.Interfaces.TestExecutorBase.html#TestExecutorBase.start" />
       <keyword name="TestExecutorBase.stopIfRunning" id="TestExecutorBase.stopIfRunning" ref="eric7.Testing.Interfaces.TestExecutorBase.html#TestExecutorBase.stopIfRunning" />
+      <keyword name="TestExecutorBase.supportsMarkers" id="TestExecutorBase.supportsMarkers" ref="eric7.Testing.Interfaces.TestExecutorBase.html#TestExecutorBase.supportsMarkers" />
       <keyword name="TestFrameworkRegistry" id="TestFrameworkRegistry" ref="eric7.Testing.Interfaces.TestFrameworkRegistry.html#TestFrameworkRegistry" />
       <keyword name="TestFrameworkRegistry (Constructor)" id="TestFrameworkRegistry (Constructor)" ref="eric7.Testing.Interfaces.TestFrameworkRegistry.html#TestFrameworkRegistry.__init__" />
       <keyword name="TestFrameworkRegistry (Module)" id="TestFrameworkRegistry (Module)" ref="eric7.Testing.Interfaces.TestFrameworkRegistry.html" />
@@ -16007,6 +16021,7 @@
       <keyword name="TestingWidget.__testsStopped" id="TestingWidget.__testsStopped" ref="eric7.Testing.TestingWidget.html#TestingWidget.__testsStopped" />
       <keyword name="TestingWidget.__updateButtonBoxButtons" id="TestingWidget.__updateButtonBoxButtons" ref="eric7.Testing.TestingWidget.html#TestingWidget.__updateButtonBoxButtons" />
       <keyword name="TestingWidget.__updateCoverage" id="TestingWidget.__updateCoverage" ref="eric7.Testing.TestingWidget.html#TestingWidget.__updateCoverage" />
+      <keyword name="TestingWidget.__updateMarkerSupport" id="TestingWidget.__updateMarkerSupport" ref="eric7.Testing.TestingWidget.html#TestingWidget.__updateMarkerSupport" />
       <keyword name="TestingWidget.__updateProgress" id="TestingWidget.__updateProgress" ref="eric7.Testing.TestingWidget.html#TestingWidget.__updateProgress" />
       <keyword name="TestingWidget.clearRecent" id="TestingWidget.clearRecent" ref="eric7.Testing.TestingWidget.html#TestingWidget.clearRecent" />
       <keyword name="TestingWidget.closeEvent" id="TestingWidget.closeEvent" ref="eric7.Testing.TestingWidget.html#TestingWidget.closeEvent" />
@@ -16016,6 +16031,7 @@
       <keyword name="TestingWidget.on_buttonBox_clicked" id="TestingWidget.on_buttonBox_clicked" ref="eric7.Testing.TestingWidget.html#TestingWidget.on_buttonBox_clicked" />
       <keyword name="TestingWidget.on_discoverCheckBox_toggled" id="TestingWidget.on_discoverCheckBox_toggled" ref="eric7.Testing.TestingWidget.html#TestingWidget.on_discoverCheckBox_toggled" />
       <keyword name="TestingWidget.on_frameworkComboBox_currentIndexChanged" id="TestingWidget.on_frameworkComboBox_currentIndexChanged" ref="eric7.Testing.TestingWidget.html#TestingWidget.on_frameworkComboBox_currentIndexChanged" />
+      <keyword name="TestingWidget.on_showMarkersButton_clicked" id="TestingWidget.on_showMarkersButton_clicked" ref="eric7.Testing.TestingWidget.html#TestingWidget.on_showMarkersButton_clicked" />
       <keyword name="TestingWidget.on_testsuitePicker_aboutToShowPathPickerDialog" id="TestingWidget.on_testsuitePicker_aboutToShowPathPickerDialog" ref="eric7.Testing.TestingWidget.html#TestingWidget.on_testsuitePicker_aboutToShowPathPickerDialog" />
       <keyword name="TestingWidget.on_venvComboBox_currentIndexChanged" id="TestingWidget.on_venvComboBox_currentIndexChanged" ref="eric7.Testing.TestingWidget.html#TestingWidget.on_venvComboBox_currentIndexChanged" />
       <keyword name="TestingWidget.on_versionsButton_clicked" id="TestingWidget.on_versionsButton_clicked" ref="eric7.Testing.TestingWidget.html#TestingWidget.on_versionsButton_clicked" />
@@ -18566,6 +18582,7 @@
       <keyword name="create_licenses_list" id="create_licenses_list" ref="eric7.PipInterface.piplicenses.html#create_licenses_list" />
       <keyword name="create_output_string" id="create_output_string" ref="eric7.PipInterface.piplicenses.html#create_output_string" />
       <keyword name="create_parser" id="create_parser" ref="eric7.PipInterface.piplicenses.html#create_parser" />
+      <keyword name="create_summary_by_license_list" id="create_summary_by_license_list" ref="eric7.PipInterface.piplicenses.html#create_summary_by_license_list" />
       <keyword name="create_summary_list" id="create_summary_list" ref="eric7.PipInterface.piplicenses.html#create_summary_list" />
       <keyword name="critical" id="critical" ref="eric7.EricWidgets.EricMessageBox.html#critical" />
       <keyword name="crypto (Package)" id="crypto (Package)" ref="index-eric7.Utilities.crypto.html" />
@@ -18800,6 +18817,7 @@
       <keyword name="getKeyUrl" id="getKeyUrl" ref="eric7.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.__init__.html#getKeyUrl" />
       <keyword name="getLanguageIcon" id="getLanguageIcon" ref="eric7.QScintilla.Lexers.__init__.html#getLanguageIcon" />
       <keyword name="getLexer" id="getLexer" ref="eric7.QScintilla.Lexers.__init__.html#getLexer" />
+      <keyword name="getMarkers" id="getMarkers" ref="eric7.Testing.Interfaces.PytestRunner.html#getMarkers" />
       <keyword name="getMarkupProvider" id="getMarkupProvider" ref="eric7.QScintilla.MarkupProviders.__init__.html#getMarkupProvider" />
       <keyword name="getMessageCodes" id="getMessageCodes" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.translations.html#getMessageCodes" />
       <keyword name="getMicroPython" id="getMicroPython" ref="eric7.Preferences.__init__.html#getMicroPython" />
@@ -20238,6 +20256,7 @@
       <file>eric7.Testing.Interfaces.TestFrameworkRegistry.html</file>
       <file>eric7.Testing.Interfaces.UnittestExecutor.html</file>
       <file>eric7.Testing.Interfaces.UnittestRunner.html</file>
+      <file>eric7.Testing.MarkersWindow.html</file>
       <file>eric7.Testing.TestResultsTree.html</file>
       <file>eric7.Testing.TestingWidget.html</file>
       <file>eric7.Testing.__init__.html</file>
--- a/src/eric7/Documentation/Source/eric7.PipInterface.piplicenses.html	Sun Sep 04 16:11:32 2022 +0200
+++ b/src/eric7/Documentation/Source/eric7.PipInterface.piplicenses.html	Mon Sep 05 18:08:43 2022 +0200
@@ -97,6 +97,10 @@
 <td></td>
 </tr>
 <tr>
+<td><a href="#create_summary_by_license_list">create_summary_by_license_list</a></td>
+<td></td>
+</tr>
+<tr>
 <td><a href="#create_summary_list">create_summary_list</a></td>
 <td></td>
 </tr>
@@ -438,6 +442,13 @@
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 <hr />
+<a NAME="create_summary_by_license_list" ID="create_summary_by_license_list"></a>
+<h2>create_summary_by_license_list</h2>
+<b>create_summary_by_license_list</b>(<i>args: "CustomNamespace"</i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
 <a NAME="create_summary_list" ID="create_summary_list"></a>
 <h2>create_summary_list</h2>
 <b>create_summary_list</b>(<i>args: "CustomNamespace"</i>)
--- a/src/eric7/Documentation/Source/eric7.Testing.Interfaces.PytestExecutor.html	Sun Sep 04 16:11:32 2022 +0200
+++ b/src/eric7/Documentation/Source/eric7.Testing.Interfaces.PytestExecutor.html	Mon Sep 05 18:08:43 2022 +0200
@@ -79,6 +79,10 @@
 <td>Public method handling the unit test process been finished.</td>
 </tr>
 <tr>
+<td><a href="#PytestExecutor.getMarkers">getMarkers</a></td>
+<td>Public method to get the list of defined markers.</td>
+</tr>
+<tr>
 <td><a href="#PytestExecutor.getVersions">getVersions</a></td>
 <td>Public method to get the test framework version and version information of its installed plugins.</td>
 </tr>
@@ -90,6 +94,10 @@
 <td><a href="#PytestExecutor.start">start</a></td>
 <td>Public method to start the testing process.</td>
 </tr>
+<tr>
+<td><a href="#PytestExecutor.supportsMarkers">supportsMarkers</a></td>
+<td>Public method to indicate the support for test filtering using markers and/or marker expressions.</td>
+</tr>
 </table>
 <h3>Static Methods</h3>
 
@@ -219,6 +227,37 @@
         This method should read the results (if necessary) and emit the signal
         testFinished.
 </p>
+<a NAME="PytestExecutor.getMarkers" ID="PytestExecutor.getMarkers"></a>
+<h4>PytestExecutor.getMarkers</h4>
+<b>getMarkers</b>(<i>interpreter, workdir</i>)
+
+<p>
+        Public method to get the list of defined markers.
+</p>
+<dl>
+
+<dt><i>interpreter</i> (str)</dt>
+<dd>
+interpreter to be used for the test
+</dd>
+<dt><i>workdir</i> (str)</dt>
+<dd>
+name of the working directory
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+dictionary containing the marker as key and the associated description
+            as value
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+dict
+</dd>
+</dl>
 <a NAME="PytestExecutor.getVersions" ID="PytestExecutor.getVersions"></a>
 <h4>PytestExecutor.getVersions</h4>
 <b>getVersions</b>(<i>interpreter</i>)
@@ -292,6 +331,33 @@
 list of directories to be added to the Python path
 </dd>
 </dl>
+<a NAME="PytestExecutor.supportsMarkers" ID="PytestExecutor.supportsMarkers"></a>
+<h4>PytestExecutor.supportsMarkers</h4>
+<b>supportsMarkers</b>(<i>interpreter</i>)
+
+<p>
+        Public method to indicate the support for test filtering using markers and/or
+        marker expressions.
+</p>
+<dl>
+
+<dt><i>interpreter</i> (str)</dt>
+<dd>
+interpreter to be used for the test
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating support of markers
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 </body></html>
\ No newline at end of file
--- a/src/eric7/Documentation/Source/eric7.Testing.Interfaces.PytestRunner.html	Sun Sep 04 16:11:32 2022 +0200
+++ b/src/eric7/Documentation/Source/eric7.Testing.Interfaces.PytestRunner.html	Mon Sep 05 18:08:43 2022 +0200
@@ -25,6 +25,10 @@
 <td>Class implementing a pytest plugin which reports the data in a format suitable for the PytestExecutor.</td>
 </tr>
 <tr>
+<td><a href="#GetMarkersPlugin">GetMarkersPlugin</a></td>
+<td>Class implementing a pytest plugin to extract the list of all defined markers.</td>
+</tr>
+<tr>
 <td><a href="#GetPluginVersionsPlugin">GetPluginVersionsPlugin</a></td>
 <td>Class implementing a pytest plugin to extract the version info of all installed plugins.</td>
 </tr>
@@ -34,6 +38,10 @@
 <table>
 
 <tr>
+<td><a href="#getMarkers">getMarkers</a></td>
+<td>Function to determine the defined markers and their descriptions.</td>
+</tr>
+<tr>
 <td><a href="#getVersions">getVersions</a></td>
 <td>Function to determine the framework version and versions of all available plugins.</td>
 </tr>
@@ -266,6 +274,90 @@
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 <hr />
+<a NAME="GetMarkersPlugin" ID="GetMarkersPlugin"></a>
+<h2>GetMarkersPlugin</h2>
+
+<p>
+    Class implementing a pytest plugin to extract the list of all defined markers.
+</p>
+<h3>Derived from</h3>
+None
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+
+<tr>
+<td><a href="#GetMarkersPlugin.__init__">GetMarkersPlugin</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#GetMarkersPlugin.getMarkers">getMarkers</a></td>
+<td>Public method to get the assembled list of markers.</td>
+</tr>
+<tr>
+<td><a href="#GetMarkersPlugin.pytest_cmdline_main">pytest_cmdline_main</a></td>
+<td>Public method called for performing the main command line action.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<a NAME="GetMarkersPlugin.__init__" ID="GetMarkersPlugin.__init__"></a>
+<h4>GetMarkersPlugin (Constructor)</h4>
+<b>GetMarkersPlugin</b>(<i></i>)
+
+<p>
+        Constructor
+</p>
+<a NAME="GetMarkersPlugin.getMarkers" ID="GetMarkersPlugin.getMarkers"></a>
+<h4>GetMarkersPlugin.getMarkers</h4>
+<b>getMarkers</b>(<i></i>)
+
+<p>
+        Public method to get the assembled list of markers.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+list of collected markers (marker name as key and description as value)
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+dict
+</dd>
+</dl>
+<a NAME="GetMarkersPlugin.pytest_cmdline_main" ID="GetMarkersPlugin.pytest_cmdline_main"></a>
+<h4>GetMarkersPlugin.pytest_cmdline_main</h4>
+<b>pytest_cmdline_main</b>(<i>config</i>)
+
+<p>
+        Public method called for performing the main command line action.
+</p>
+<dl>
+
+<dt><i>config</i> (Config)</dt>
+<dd>
+pytest config object
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
 <a NAME="GetPluginVersionsPlugin" ID="GetPluginVersionsPlugin"></a>
 <h2>GetPluginVersionsPlugin</h2>
 
@@ -351,6 +443,16 @@
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 <hr />
+<a NAME="getMarkers" ID="getMarkers"></a>
+<h2>getMarkers</h2>
+<b>getMarkers</b>(<i></i>)
+
+<p>
+    Function to determine the defined markers and their descriptions.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
 <a NAME="getVersions" ID="getVersions"></a>
 <h2>getVersions</h2>
 <b>getVersions</b>(<i></i>)
--- a/src/eric7/Documentation/Source/eric7.Testing.Interfaces.TestExecutorBase.html	Sun Sep 04 16:11:32 2022 +0200
+++ b/src/eric7/Documentation/Source/eric7.Testing.Interfaces.TestExecutorBase.html	Mon Sep 05 18:08:43 2022 +0200
@@ -170,6 +170,10 @@
 <td>Public method handling the unit test process been finished.</td>
 </tr>
 <tr>
+<td><a href="#TestExecutorBase.getMarkers">getMarkers</a></td>
+<td>Public method to get the list of defined markers.</td>
+</tr>
+<tr>
 <td><a href="#TestExecutorBase.getVersions">getVersions</a></td>
 <td>Public method to get the test framework version and version information of its installed plugins.</td>
 </tr>
@@ -189,6 +193,10 @@
 <td><a href="#TestExecutorBase.stopIfRunning">stopIfRunning</a></td>
 <td>Public method to stop the testing process, if it is running.</td>
 </tr>
+<tr>
+<td><a href="#TestExecutorBase.supportsMarkers">supportsMarkers</a></td>
+<td>Public method to indicate the support for test filtering using markers and/or marker expressions.</td>
+</tr>
 </table>
 <h3>Static Methods</h3>
 
@@ -322,6 +330,37 @@
             derived classes
 </dd>
 </dl>
+<a NAME="TestExecutorBase.getMarkers" ID="TestExecutorBase.getMarkers"></a>
+<h4>TestExecutorBase.getMarkers</h4>
+<b>getMarkers</b>(<i>interpreter, workdir</i>)
+
+<p>
+        Public method to get the list of defined markers.
+</p>
+<dl>
+
+<dt><i>interpreter</i> (str)</dt>
+<dd>
+interpreter to be used for the test
+</dd>
+<dt><i>workdir</i> (str)</dt>
+<dd>
+name of the working directory
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+dictionary containing the marker as key and the associated description
+            as value
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+dict
+</dd>
+</dl>
 <a NAME="TestExecutorBase.getVersions" ID="TestExecutorBase.getVersions"></a>
 <h4>TestExecutorBase.getVersions</h4>
 <b>getVersions</b>(<i>interpreter</i>)
@@ -350,14 +389,6 @@
 dict
 </dd>
 </dl>
-<dl>
-
-<dt>Raises <b>NotImplementedError</b>:</dt>
-<dd>
-this method needs to be implemented by
-            derived classes
-</dd>
-</dl>
 <a NAME="TestExecutorBase.hasCoverage" ID="TestExecutorBase.hasCoverage"></a>
 <h4>TestExecutorBase.hasCoverage</h4>
 <b>hasCoverage</b>(<i>interpreter</i>)
@@ -385,14 +416,6 @@
 bool
 </dd>
 </dl>
-<dl>
-
-<dt>Raises <b>NotImplementedError</b>:</dt>
-<dd>
-this method needs to be implemented by
-            derived classes
-</dd>
-</dl>
 <a NAME="TestExecutorBase.readAllOutput" ID="TestExecutorBase.readAllOutput"></a>
 <h4>TestExecutorBase.readAllOutput</h4>
 <b>readAllOutput</b>(<i>process=None</i>)
@@ -451,6 +474,33 @@
 <p>
         Public method to stop the testing process, if it is running.
 </p>
+<a NAME="TestExecutorBase.supportsMarkers" ID="TestExecutorBase.supportsMarkers"></a>
+<h4>TestExecutorBase.supportsMarkers</h4>
+<b>supportsMarkers</b>(<i>interpreter</i>)
+
+<p>
+        Public method to indicate the support for test filtering using markers and/or
+        marker expressions.
+</p>
+<dl>
+
+<dt><i>interpreter</i> (str)</dt>
+<dd>
+interpreter to be used for the test
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating support of markers
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 <hr />
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Documentation/Source/eric7.Testing.MarkersWindow.html	Mon Sep 05 18:08:43 2022 +0200
@@ -0,0 +1,120 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.Testing.MarkersWindow</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.Testing.MarkersWindow</h1>
+
+<p>
+Module implementing a dialog to show defined test markers.
+</p>
+<h3>Global Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+
+<table>
+
+<tr>
+<td><a href="#MarkersWindow">MarkersWindow</a></td>
+<td>Class documentation goes here.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr />
+<hr />
+<a NAME="MarkersWindow" ID="MarkersWindow"></a>
+<h2>MarkersWindow</h2>
+
+<p>
+    Class documentation goes here.
+</p>
+<h3>Derived from</h3>
+QWidget, Ui_MarkersWindow
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+
+<tr>
+<td><a href="#MarkersWindow.__init__">MarkersWindow</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#MarkersWindow.closeEvent">closeEvent</a></td>
+<td>Protected slot implementing a close event handler.</td>
+</tr>
+<tr>
+<td><a href="#MarkersWindow.showMarkers">showMarkers</a></td>
+<td>Public method to show the dialog with the given markers.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<a NAME="MarkersWindow.__init__" ID="MarkersWindow.__init__"></a>
+<h4>MarkersWindow (Constructor)</h4>
+<b>MarkersWindow</b>(<i>parent=None</i>)
+
+<p>
+        Constructor
+</p>
+<dl>
+
+<dt><i>parent</i> (QWidget (optional))</dt>
+<dd>
+reference to the parent widget (defaults to None)
+</dd>
+</dl>
+<a NAME="MarkersWindow.closeEvent" ID="MarkersWindow.closeEvent"></a>
+<h4>MarkersWindow.closeEvent</h4>
+<b>closeEvent</b>(<i>e</i>)
+
+<p>
+        Protected slot implementing a close event handler.
+</p>
+<dl>
+
+<dt><i>e</i> (QCloseEvent)</dt>
+<dd>
+close event
+</dd>
+</dl>
+<a NAME="MarkersWindow.showMarkers" ID="MarkersWindow.showMarkers"></a>
+<h4>MarkersWindow.showMarkers</h4>
+<b>showMarkers</b>(<i>markers</i>)
+
+<p>
+        Public method to show the dialog with the given markers.
+</p>
+<dl>
+
+<dt><i>markers</i> (dict)</dt>
+<dd>
+dictionary containing the markers and their descriptions
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- a/src/eric7/Documentation/Source/eric7.Testing.TestingWidget.html	Sun Sep 04 16:11:32 2022 +0200
+++ b/src/eric7/Documentation/Source/eric7.Testing.TestingWidget.html	Mon Sep 05 18:08:43 2022 +0200
@@ -212,6 +212,10 @@
 <td>Private slot to update the state of the coverage checkbox depending on the selected framework's capabilities.</td>
 </tr>
 <tr>
+<td><a href="#TestingWidget.__updateMarkerSupport">__updateMarkerSupport</a></td>
+<td>Private slot to update the state of the marker related widgets depending on the selected framework's capabilities.</td>
+</tr>
+<tr>
 <td><a href="#TestingWidget.__updateProgress">__updateProgress</a></td>
 <td>Private slot update the progress indicators.</td>
 </tr>
@@ -248,6 +252,10 @@
 <td>Private slot handling the selection of a test framework.</td>
 </tr>
 <tr>
+<td><a href="#TestingWidget.on_showMarkersButton_clicked">on_showMarkersButton_clicked</a></td>
+<td>Private slot to show a window containing the list of defined markers.</td>
+</tr>
+<tr>
 <td><a href="#TestingWidget.on_testsuitePicker_aboutToShowPathPickerDialog">on_testsuitePicker_aboutToShowPathPickerDialog</a></td>
 <td>Private slot called before the test file selection dialog is shown.</td>
 </tr>
@@ -652,6 +660,14 @@
         Private slot to update the state of the coverage checkbox depending on
         the selected framework's capabilities.
 </p>
+<a NAME="TestingWidget.__updateMarkerSupport" ID="TestingWidget.__updateMarkerSupport"></a>
+<h4>TestingWidget.__updateMarkerSupport</h4>
+<b>__updateMarkerSupport</b>(<i></i>)
+
+<p>
+        Private slot to update the state of the marker related widgets depending on
+        the selected framework's capabilities.
+</p>
 <a NAME="TestingWidget.__updateProgress" ID="TestingWidget.__updateProgress"></a>
 <h4>TestingWidget.__updateProgress</h4>
 <b>__updateProgress</b>(<i></i>)
@@ -780,6 +796,13 @@
 index of the selected framework
 </dd>
 </dl>
+<a NAME="TestingWidget.on_showMarkersButton_clicked" ID="TestingWidget.on_showMarkersButton_clicked"></a>
+<h4>TestingWidget.on_showMarkersButton_clicked</h4>
+<b>on_showMarkersButton_clicked</b>(<i></i>)
+
+<p>
+        Private slot to show a window containing the list of defined markers.
+</p>
 <a NAME="TestingWidget.on_testsuitePicker_aboutToShowPathPickerDialog" ID="TestingWidget.on_testsuitePicker_aboutToShowPathPickerDialog"></a>
 <h4>TestingWidget.on_testsuitePicker_aboutToShowPathPickerDialog</h4>
 <b>on_testsuitePicker_aboutToShowPathPickerDialog</b>(<i></i>)
--- a/src/eric7/Documentation/Source/index-eric7.Testing.html	Sun Sep 04 16:11:32 2022 +0200
+++ b/src/eric7/Documentation/Source/index-eric7.Testing.html	Mon Sep 05 18:08:43 2022 +0200
@@ -25,6 +25,10 @@
 <table>
 
 <tr>
+<td><a href="eric7.Testing.MarkersWindow.html">MarkersWindow</a></td>
+<td>Module implementing a dialog to show defined test markers.</td>
+</tr>
+<tr>
 <td><a href="eric7.Testing.TestResultsTree.html">TestResultsTree</a></td>
 <td>Module implementing a tree view and associated model to show the test result data.</td>
 </tr>
--- a/src/eric7/Testing/Interfaces/PytestExecutor.py	Sun Sep 04 16:11:32 2022 +0200
+++ b/src/eric7/Testing/Interfaces/PytestExecutor.py	Mon Sep 05 18:08:43 2022 +0200
@@ -87,6 +87,44 @@
 
         return False
 
+    def supportsMarkers(self, interpreter):
+        """
+        Public method to indicate the support for test filtering using markers and/or
+        marker expressions.
+
+        @param interpreter interpreter to be used for the test
+        @type str
+        @return flag indicating support of markers
+        @rtype bool
+        """
+        return True
+
+    def getMarkers(self, interpreter, workdir):
+        """
+        Public method to get the list of defined markers.
+
+        @param interpreter interpreter to be used for the test
+        @type str
+        @param workdir name of the working directory
+        @type str
+        @return dictionary containing the marker as key and the associated description
+            as value
+        @rtype dict
+        """
+        proc = QProcess()
+        proc.setWorkingDirectory(workdir)
+        proc.start(interpreter, [PytestExecutor.runner, "markers"])
+        if proc.waitForFinished(3000):
+            exitCode = proc.exitCode()
+            if exitCode == 0:
+                outputLines = self.readAllOutput(proc).splitlines()
+                for line in outputLines:
+                    if line.startswith("{") and line.endswith("}"):
+                        with contextlib.suppress(json.JSONDecodeError):
+                            return json.loads(line)
+
+        return {}
+
     def createArguments(self, config):
         """
         Public method to create the arguments needed to start the test process.
@@ -122,6 +160,10 @@
             if not config.eraseCoverage:
                 args.append("--cov-append")
 
+        if config.testMarkerExpression:
+            args.append("-m")
+            args.append(config.testMarkerExpression)
+
         if config.testFilename:
             if config.testName:
                 args.append(
--- a/src/eric7/Testing/Interfaces/PytestRunner.py	Sun Sep 04 16:11:32 2022 +0200
+++ b/src/eric7/Testing/Interfaces/PytestRunner.py	Mon Sep 05 18:08:43 2022 +0200
@@ -7,6 +7,7 @@
 Module implementing the test runner script for the 'pytest' framework.
 """
 
+import contextlib
 import json
 import os
 import sys
@@ -14,6 +15,9 @@
 
 sys.path.insert(2, os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..")))
 
+with contextlib.suppress(ImportError):
+    import pytest
+
 
 class GetPluginVersionsPlugin:
     """
@@ -27,7 +31,7 @@
         """
         super().__init__()
 
-        self.versions = []
+        self.__versions = []
 
     def pytest_cmdline_main(self, config):
         """
@@ -39,7 +43,7 @@
         pluginInfo = config.pluginmanager.list_plugin_distinfo()
         if pluginInfo:
             for _plugin, dist in pluginInfo:
-                self.versions.append(
+                self.__versions.append(
                     {"name": dist.project_name, "version": dist.version}
                 )
 
@@ -50,7 +54,49 @@
         @return list of collected plugin versions
         @rtype list of dict
         """
-        return self.versions
+        return self.__versions
+
+
+class GetMarkersPlugin:
+    """
+    Class implementing a pytest plugin to extract the list of all defined markers.
+    """
+
+    def __init__(self):
+        """
+        Constructor
+        """
+        super().__init__()
+
+        self.__markers = {}
+
+    @pytest.hookimpl(tryfirst=True)
+    def pytest_cmdline_main(self, config):
+        """
+        Public method called for performing the main command line action.
+
+        @param config pytest config object
+        @type Config
+        """
+        config._do_configure()
+        for line in config.getini("markers"):
+            parts = line.split(":", 1)
+            name = parts[0]
+            rest = parts[1] if len(parts) == 2 else ""
+            self.__markers[name] = rest
+        config._ensure_unconfigure()
+
+        print(json.dumps(self.__markers))
+        sys.exit(0)
+
+    def getMarkers(self):
+        """
+        Public method to get the assembled list of markers.
+
+        @return list of collected markers (marker name as key and description as value)
+        @rtype dict
+        """
+        return self.__markers
 
 
 class EricPlugin:
@@ -275,6 +321,23 @@
     sys.exit(0)
 
 
+def getMarkers():
+    """
+    Function to determine the defined markers and their descriptions.
+    """
+    try:
+        import pytest
+
+        # --capture=sys needed on Windows to avoid
+        # ValueError: saved filedescriptor not valid anymore
+        plugin = GetMarkersPlugin()
+        pytest.main(["--markers", "--capture=sys"], plugins=[plugin])
+        # dumping the markers is done in the plugin
+    except ImportError:
+        print(json.dumps({}))
+        sys.exit(0)
+
+
 if __name__ == "__main__":
     command = sys.argv[1]
     if command == "installed":
@@ -288,6 +351,9 @@
     elif command == "versions":
         getVersions()
 
+    elif command == "markers":
+        getMarkers()
+
     elif command == "runtest":
         import pytest
         from EricNetwork.EricJsonStreamWriter import EricJsonWriter
--- a/src/eric7/Testing/Interfaces/TestExecutorBase.py	Sun Sep 04 16:11:32 2022 +0200
+++ b/src/eric7/Testing/Interfaces/TestExecutorBase.py	Mon Sep 05 18:08:43 2022 +0200
@@ -59,6 +59,7 @@
     discoveryStart: str  # start directory for auto discovery
     testFilename: str  # name of the test script
     testName: str  # name of the test function
+    testMarkerExpression: str  # marker expression for test selection
     failFast: bool  # stop on first fail
     failedOnly: bool  # run failed tests only
     collectCoverage: bool  # coverage collection flag
@@ -147,11 +148,7 @@
         @return dictionary containing the framework name and version and the
             list of available plugins with name and version each
         @rtype dict
-        @exception NotImplementedError this method needs to be implemented by
-            derived classes
         """
-        raise NotImplementedError
-
         return {}
 
     def hasCoverage(self, interpreter):
@@ -163,12 +160,34 @@
         @type str
         @return flag indicating the availability of coverage functionality
         @rtype bool
-        @exception NotImplementedError this method needs to be implemented by
-            derived classes
+        """
+        return False
+
+    def supportsMarkers(self, interpreter):
+        """
+        Public method to indicate the support for test filtering using markers and/or
+        marker expressions.
+
+        @param interpreter interpreter to be used for the test
+        @type str
+        @return flag indicating support of markers
+        @rtype bool
         """
-        raise NotImplementedError
+        return False
+
+    def getMarkers(self, interpreter, workdir):
+        """
+        Public method to get the list of defined markers.
 
-        return False
+        @param interpreter interpreter to be used for the test
+        @type str
+        @param workdir name of the working directory
+        @type str
+        @return dictionary containing the marker as key and the associated description
+            as value
+        @rtype dict
+        """
+        return {}
 
     def createArguments(self, config):
         """
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Testing/MarkersWindow.py	Mon Sep 05 18:08:43 2022 +0200
@@ -0,0 +1,62 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2022 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog to show defined test markers.
+"""
+
+from PyQt6.QtCore import Qt
+from PyQt6.QtWidgets import QWidget, QTreeWidgetItem
+
+from .Ui_MarkersWindow import Ui_MarkersWindow
+
+
+class MarkersWindow(QWidget, Ui_MarkersWindow):
+    """
+    Class documentation goes here.
+    """
+
+    def __init__(self, parent=None):
+        """
+        Constructor
+
+        @param parent reference to the parent widget (defaults to None)
+        @type QWidget (optional)
+        """
+        super().__init__(parent)
+        self.setupUi(self)
+
+        self.__lastGeometry = None
+
+    def showMarkers(self, markers):
+        """
+        Public method to show the dialog with the given markers.
+
+        @param markers dictionary containing the markers and their descriptions
+        @type dict
+        """
+        self.markersList.clear()
+
+        for marker, description in markers.items():
+            QTreeWidgetItem(self.markersList, [marker, description])
+
+        self.markersList.setColumnWidth(0, 250)
+        self.markersList.resizeColumnToContents(1)
+
+        self.markersList.sortItems(0, Qt.SortOrder.AscendingOrder)
+
+        if self.__lastGeometry is not None:
+            self.restoreGeometry(self.__lastGeometry)
+
+        self.show()
+
+    def closeEvent(self, e):
+        """
+        Protected slot implementing a close event handler.
+
+        @param e close event
+        @type QCloseEvent
+        """
+        self.__lastGeometry = self.saveGeometry()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Testing/MarkersWindow.ui	Mon Sep 05 18:08:43 2022 +0200
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>MarkersWindow</class>
+ <widget class="QWidget" name="MarkersWindow">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>800</width>
+    <height>600</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Defined Markers</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QTreeWidget" name="markersList">
+     <property name="alternatingRowColors">
+      <bool>true</bool>
+     </property>
+     <property name="selectionMode">
+      <enum>QAbstractItemView::NoSelection</enum>
+     </property>
+     <property name="rootIsDecorated">
+      <bool>false</bool>
+     </property>
+     <property name="itemsExpandable">
+      <bool>false</bool>
+     </property>
+     <property name="sortingEnabled">
+      <bool>true</bool>
+     </property>
+     <property name="wordWrap">
+      <bool>true</bool>
+     </property>
+     <column>
+      <property name="text">
+       <string>Marker</string>
+      </property>
+     </column>
+     <column>
+      <property name="text">
+       <string>Description</string>
+      </property>
+     </column>
+    </widget>
+   </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Close</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>MarkersWindow</receiver>
+   <slot>close()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>429</x>
+     <y>672</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>426</x>
+     <y>619</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
--- a/src/eric7/Testing/TestingWidget.py	Sun Sep 04 16:11:32 2022 +0200
+++ b/src/eric7/Testing/TestingWidget.py	Mon Sep 05 18:08:43 2022 +0200
@@ -82,6 +82,7 @@
 
         self.versionsButton.setIcon(UI.PixmapCache.getIcon("info"))
         self.clearHistoriesButton.setIcon(UI.PixmapCache.getIcon("clearPrivateData"))
+        self.showMarkersButton.setIcon(UI.PixmapCache.getIcon("select"))
 
         self.testsuitePicker.setMode(EricPathPickerModes.OPEN_FILE_MODE)
         self.testsuitePicker.setInsertPolicy(QComboBox.InsertPolicy.InsertAtTop)
@@ -205,6 +206,8 @@
         self.__testExecutor = None
         self.__recentLog = ""
 
+        self.__markersWindow = None
+
         # connect some signals
         self.discoveryPicker.editTextChanged.connect(self.__resetResults)
         self.testsuitePicker.editTextChanged.connect(self.__resetResults)
@@ -681,6 +684,7 @@
         """
         self.__resetResults()
         self.__updateCoverage()
+        self.__updateMarkerSupport()
 
     @pyqtSlot()
     def __updateCoverage(self):
@@ -703,6 +707,58 @@
             self.coverageCheckBox.setChecked(False)
 
     @pyqtSlot()
+    def __updateMarkerSupport(self):
+        """
+        Private slot to update the state of the marker related widgets depending on
+        the selected framework's capabilities.
+        """
+        supportsMarkers = False
+
+        venvName = self.venvComboBox.currentText()
+        if venvName:
+            framework = self.frameworkComboBox.currentText()
+            if framework:
+                interpreter = self.__venvManager.getVirtualenvInterpreter(venvName)
+                executor = self.__frameworkRegistry.createExecutor(framework, self)
+                supportsMarkers = executor.supportsMarkers(interpreter)
+
+        # 1. marker expression line edit
+        self.markerExpressionEdit.setEnabled(supportsMarkers)
+        if not supportsMarkers:
+            self.markerExpressionEdit.clear()
+
+        # 2. show markers button
+        self.showMarkersButton.setEnabled(supportsMarkers)
+        if self.__markersWindow is not None:
+            self.__markersWindow.close()
+
+    @pyqtSlot()
+    def on_showMarkersButton_clicked(self):
+        """
+        Private slot to show a window containing the list of defined markers.
+        """
+        venvName = self.venvComboBox.currentText()
+        if venvName:
+            framework = self.frameworkComboBox.currentText()
+            if framework:
+                if self.discoverCheckBox.isChecked():
+                    workdir = self.discoveryPicker.currentText()
+                elif self.testsuitePicker.currentText():
+                    workdir = os.path.dirname(self.testsuitePicker.currentText())
+                else:
+                    workdir = ""
+
+                interpreter = self.__venvManager.getVirtualenvInterpreter(venvName)
+                executor = self.__frameworkRegistry.createExecutor(framework, self)
+                markers = executor.getMarkers(interpreter, workdir)
+
+                if self.__markersWindow is None:
+                    from .MarkersWindow import MarkersWindow
+
+                    self.__markersWindow = MarkersWindow()
+                self.__markersWindow.showMarkers(markers)
+
+    @pyqtSlot()
     def on_versionsButton_clicked(self):
         """
         Private slot to show the versions of available plugins.
@@ -791,6 +847,7 @@
             discoveryStart=discoveryStart,
             testFilename=testFileName,
             testName=testName,
+            testMarkerExpression=self.markerExpressionEdit.text(),
             failFast=self.failfastCheckBox.isChecked(),
             failedOnly=failedOnly,
             collectCoverage=self.coverageCheckBox.isChecked(),
--- a/src/eric7/Testing/TestingWidget.ui	Sun Sep 04 16:11:32 2022 +0200
+++ b/src/eric7/Testing/TestingWidget.ui	Mon Sep 05 18:08:43 2022 +0200
@@ -87,7 +87,7 @@
           <string>Test Parameters</string>
          </property>
          <layout class="QGridLayout" name="gridLayout">
-          <item row="0" column="0" colspan="2">
+          <item row="0" column="0" colspan="3">
            <layout class="QHBoxLayout" name="horizontalLayout_4">
             <item>
              <widget class="QCheckBox" name="discoverCheckBox">
@@ -127,7 +127,7 @@
             </property>
            </widget>
           </item>
-          <item row="1" column="1">
+          <item row="1" column="1" colspan="2">
            <widget class="EricComboPathPicker" name="discoveryPicker" native="true">
             <property name="sizePolicy">
              <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
@@ -158,7 +158,7 @@
             </property>
            </widget>
           </item>
-          <item row="2" column="1">
+          <item row="2" column="1" colspan="2">
            <widget class="EricComboPathPicker" name="testsuitePicker" native="true">
             <property name="enabled">
              <bool>false</bool>
@@ -190,7 +190,7 @@
             </property>
            </widget>
           </item>
-          <item row="3" column="1">
+          <item row="3" column="1" colspan="2">
            <widget class="QComboBox" name="testComboBox">
             <property name="enabled">
              <bool>false</bool>
@@ -206,6 +206,30 @@
             </property>
            </widget>
           </item>
+          <item row="4" column="0">
+           <widget class="QLabel" name="label_4">
+            <property name="text">
+             <string>Marker Expression:</string>
+            </property>
+           </widget>
+          </item>
+          <item row="4" column="1">
+           <widget class="QLineEdit" name="markerExpressionEdit">
+            <property name="toolTip">
+             <string>Enter a marker expression or name to filter tests</string>
+            </property>
+            <property name="clearButtonEnabled">
+             <bool>true</bool>
+            </property>
+           </widget>
+          </item>
+          <item row="4" column="2">
+           <widget class="QToolButton" name="showMarkersButton">
+            <property name="toolTip">
+             <string>Press to show a window with the list of defined markers</string>
+            </property>
+           </widget>
+          </item>
          </layout>
         </widget>
        </item>
@@ -437,6 +461,8 @@
   <tabstop>discoveryPicker</tabstop>
   <tabstop>testsuitePicker</tabstop>
   <tabstop>testComboBox</tabstop>
+  <tabstop>markerExpressionEdit</tabstop>
+  <tabstop>showMarkersButton</tabstop>
   <tabstop>coverageCheckBox</tabstop>
   <tabstop>coverageEraseCheckBox</tabstop>
   <tabstop>failfastCheckBox</tabstop>
@@ -450,8 +476,8 @@
    <slot>close()</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>31</x>
-     <y>648</y>
+     <x>40</x>
+     <y>690</y>
     </hint>
     <hint type="destinationlabel">
      <x>1</x>
@@ -466,8 +492,8 @@
    <slot>close()</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>80</x>
-     <y>649</y>
+     <x>89</x>
+     <y>690</y>
     </hint>
     <hint type="destinationlabel">
      <x>3</x>
@@ -534,8 +560,8 @@
      <y>320</y>
     </hint>
     <hint type="destinationlabel">
-     <x>369</x>
-     <y>319</y>
+     <x>788</x>
+     <y>328</y>
     </hint>
    </hints>
   </connection>
--- a/src/eric7/i18n/eric7_cs.ts	Sun Sep 04 16:11:32 2022 +0200
+++ b/src/eric7/i18n/eric7_cs.ts	Mon Sep 05 18:08:43 2022 +0200
@@ -46860,6 +46860,24 @@
     </message>
   </context>
   <context>
+    <name>MarkersWindow</name>
+    <message>
+      <location filename="../Testing/MarkersWindow.ui" line="0" />
+      <source>Defined Markers</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/MarkersWindow.ui" line="0" />
+      <source>Marker</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/MarkersWindow.ui" line="0" />
+      <source>Description</source>
+      <translation type="unfinished">Popisek</translation>
+    </message>
+  </context>
+  <context>
     <name>MasterPasswordEntryDialog</name>
     <message>
       <location filename="../Preferences/ConfigurationPages/MasterPasswordEntryDialog.py" line="36" />
@@ -61300,18 +61318,18 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/Interfaces/PytestExecutor.py" line="221" />
+      <location filename="../Testing/Interfaces/PytestExecutor.py" line="263" />
       <source>Error</source>
       <translation type="unfinished">Chyba</translation>
     </message>
     <message>
-      <location filename="../Testing/Interfaces/PytestExecutor.py" line="230" />
+      <location filename="../Testing/Interfaces/PytestExecutor.py" line="272" />
       <source>ERROR at {0}: {1}</source>
       <comment>phase, message</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/Interfaces/PytestExecutor.py" line="233" />
+      <location filename="../Testing/Interfaces/PytestExecutor.py" line="275" />
       <source>ERROR at {0}: {1}</source>
       <comment>phase, extra text</comment>
       <translation type="unfinished" />
@@ -78817,7 +78835,7 @@
   <context>
     <name>TestingWidget</name>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="168" />
+      <location filename="../Testing/TestingWidget.py" line="169" />
       <location filename="../Testing/TestingWidget.ui" line="0" />
       <source>Testing</source>
       <translation type="unfinished" />
@@ -78926,6 +78944,21 @@
     </message>
     <message>
       <location filename="../Testing/TestingWidget.ui" line="0" />
+      <source>Marker Expression:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/TestingWidget.ui" line="0" />
+      <source>Enter a marker expression or name to filter tests</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/TestingWidget.ui" line="0" />
+      <source>Press to show a window with the list of defined markers</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/TestingWidget.ui" line="0" />
       <source>Run Parameters</source>
       <translation type="unfinished" />
     </message>
@@ -79001,172 +79034,172 @@
       <translation type="unfinished">V běhu</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="102" />
+      <location filename="../Testing/TestingWidget.py" line="103" />
       <source>Show Output...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="105" />
+      <location filename="../Testing/TestingWidget.py" line="106" />
       <source>Show the output of the test runner process</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="108" />
+      <location filename="../Testing/TestingWidget.py" line="109" />
       <source>&lt;b&gt;Show Output...&lt;/b&lt;p&gt;This button opens a dialog containing the output of the test runner process of the most recent run.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="116" />
+      <location filename="../Testing/TestingWidget.py" line="117" />
       <source>Show Coverage...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="119" />
+      <location filename="../Testing/TestingWidget.py" line="120" />
       <source>Show code coverage in a new dialog</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="122" />
+      <location filename="../Testing/TestingWidget.py" line="123" />
       <source>&lt;b&gt;Show Coverage...&lt;/b&gt;&lt;p&gt;This button opens a dialog containing the collected code coverage data.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="130" />
+      <location filename="../Testing/TestingWidget.py" line="131" />
       <source>Start</source>
       <translation type="unfinished">Spustit</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="133" />
+      <location filename="../Testing/TestingWidget.py" line="134" />
       <source>Start the selected testsuite</source>
       <translation type="unfinished">Spustit vybranou soupravu testů</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="135" />
+      <location filename="../Testing/TestingWidget.py" line="136" />
       <source>&lt;b&gt;Start Test&lt;/b&gt;&lt;p&gt;This button starts the test run.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="141" />
+      <location filename="../Testing/TestingWidget.py" line="142" />
       <source>Rerun Failed</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="144" />
+      <location filename="../Testing/TestingWidget.py" line="145" />
       <source>Reruns failed tests of the selected testsuite</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="147" />
+      <location filename="../Testing/TestingWidget.py" line="148" />
       <source>&lt;b&gt;Rerun Failed&lt;/b&gt;&lt;p&gt;This button reruns all failed tests of the most recent test run.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="155" />
+      <location filename="../Testing/TestingWidget.py" line="156" />
       <source>Stop</source>
       <translation type="unfinished">Zastavit</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="157" />
+      <location filename="../Testing/TestingWidget.py" line="158" />
       <source>Stop the running test</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="159" />
+      <location filename="../Testing/TestingWidget.py" line="160" />
       <source>&lt;b&gt;Stop Test&lt;/b&gt;&lt;p&gt;This button stops a running test.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="271" />
+      <location filename="../Testing/TestingWidget.py" line="274" />
       <source>{0} (not available)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="566" />
+      <location filename="../Testing/TestingWidget.py" line="569" />
       <source>Running</source>
       <translation type="unfinished">Běží</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="622" />
+      <location filename="../Testing/TestingWidget.py" line="625" />
       <source>Python3 Files ({0});;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="627" />
+      <location filename="../Testing/TestingWidget.py" line="630" />
       <source>Python Files (*.py);;All Files (*)</source>
       <translation type="unfinished">Python soubory (*.py);;Všechny soubory (*)</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="712" />
+      <location filename="../Testing/TestingWidget.py" line="768" />
       <source>&lt;h3&gt;Versions of Frameworks and their Plugins&lt;/h3&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="726" />
+      <location filename="../Testing/TestingWidget.py" line="782" />
       <source>&lt;tr&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="735" />
+      <location filename="../Testing/TestingWidget.py" line="791" />
       <source>No version information available.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="738" />
+      <location filename="../Testing/TestingWidget.py" line="794" />
       <source>Versions</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="775" />
+      <location filename="../Testing/TestingWidget.py" line="831" />
       <source>Preparing Testsuite</source>
       <translation type="unfinished">Příprava soupravy testu</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="838" />
+      <location filename="../Testing/TestingWidget.py" line="895" />
       <source>pending</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="866" />
+      <location filename="../Testing/TestingWidget.py" line="923" />
       <source>Failure</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="876" />
-      <location filename="../Testing/TestingWidget.py" line="869" />
+      <location filename="../Testing/TestingWidget.py" line="933" />
+      <location filename="../Testing/TestingWidget.py" line="926" />
       <source>Collection Error</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="877" />
+      <location filename="../Testing/TestingWidget.py" line="934" />
       <source>&lt;p&gt;There was an error while collecting tests.&lt;/p&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="898" />
+      <location filename="../Testing/TestingWidget.py" line="955" />
       <source>running</source>
       <translation type="unfinished">běžící</translation>
     </message>
     <message numerus="yes">
-      <location filename="../Testing/TestingWidget.py" line="949" />
+      <location filename="../Testing/TestingWidget.py" line="1006" />
       <source>Ran %n test(s) in {0}s</source>
       <translation type="unfinished">
         <numerusform />
       </translation>
     </message>
     <message numerus="yes">
-      <location filename="../Testing/TestingWidget.py" line="961" />
+      <location filename="../Testing/TestingWidget.py" line="1018" />
       <source>Ran %n test(s)</source>
       <translation type="unfinished">
         <numerusform />
       </translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="982" />
+      <location filename="../Testing/TestingWidget.py" line="1039" />
       <source>not run</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="1027" />
+      <location filename="../Testing/TestingWidget.py" line="1084" />
       <source>Test Run Output</source>
       <translation type="unfinished" />
     </message>
Binary file src/eric7/i18n/eric7_de.qm has changed
--- a/src/eric7/i18n/eric7_de.ts	Sun Sep 04 16:11:32 2022 +0200
+++ b/src/eric7/i18n/eric7_de.ts	Mon Sep 05 18:08:43 2022 +0200
@@ -46953,6 +46953,24 @@
     </message>
   </context>
   <context>
+    <name>MarkersWindow</name>
+    <message>
+      <location filename="../Testing/MarkersWindow.ui" line="0" />
+      <source>Defined Markers</source>
+      <translation>Definierte Markierungen</translation>
+    </message>
+    <message>
+      <location filename="../Testing/MarkersWindow.ui" line="0" />
+      <source>Marker</source>
+      <translation>Markierung</translation>
+    </message>
+    <message>
+      <location filename="../Testing/MarkersWindow.ui" line="0" />
+      <source>Description</source>
+      <translation>Beschreibung</translation>
+    </message>
+  </context>
+  <context>
     <name>MasterPasswordEntryDialog</name>
     <message>
       <location filename="../Preferences/ConfigurationPages/MasterPasswordEntryDialog.py" line="36" />
@@ -61415,18 +61433,18 @@
       <translation>Erfolg</translation>
     </message>
     <message>
-      <location filename="../Testing/Interfaces/PytestExecutor.py" line="221" />
+      <location filename="../Testing/Interfaces/PytestExecutor.py" line="263" />
       <source>Error</source>
       <translation>Fehler</translation>
     </message>
     <message>
-      <location filename="../Testing/Interfaces/PytestExecutor.py" line="230" />
+      <location filename="../Testing/Interfaces/PytestExecutor.py" line="272" />
       <source>ERROR at {0}: {1}</source>
       <comment>phase, message</comment>
       <translation>FEHLER in {0}: {1}</translation>
     </message>
     <message>
-      <location filename="../Testing/Interfaces/PytestExecutor.py" line="233" />
+      <location filename="../Testing/Interfaces/PytestExecutor.py" line="275" />
       <source>ERROR at {0}: {1}</source>
       <comment>phase, extra text</comment>
       <translation>FEHLER in {0}: {1}</translation>
@@ -79055,7 +79073,7 @@
   <context>
     <name>TestingWidget</name>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="168" />
+      <location filename="../Testing/TestingWidget.py" line="169" />
       <location filename="../Testing/TestingWidget.ui" line="0" />
       <source>Testing</source>
       <translation>Modultest</translation>
@@ -79168,6 +79186,21 @@
     </message>
     <message>
       <location filename="../Testing/TestingWidget.ui" line="0" />
+      <source>Marker Expression:</source>
+      <translation>Markierungsausdruck:</translation>
+    </message>
+    <message>
+      <location filename="../Testing/TestingWidget.ui" line="0" />
+      <source>Enter a marker expression or name to filter tests</source>
+      <translation>Gib einen Markierungsausdruck oder -namen zur Testfilterung ein</translation>
+    </message>
+    <message>
+      <location filename="../Testing/TestingWidget.ui" line="0" />
+      <source>Press to show a window with the list of defined markers</source>
+      <translation>Drücken, um ein Fenster mit der Liste der definierten Markierungen anzuzeigen</translation>
+    </message>
+    <message>
+      <location filename="../Testing/TestingWidget.ui" line="0" />
       <source>Run Parameters</source>
       <translation>Ausführungsparameter</translation>
     </message>
@@ -79243,153 +79276,153 @@
       <translation>Leerlauf</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="102" />
+      <location filename="../Testing/TestingWidget.py" line="103" />
       <source>Show Output...</source>
       <translation>Ausgabe anzeigen...</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="105" />
+      <location filename="../Testing/TestingWidget.py" line="106" />
       <source>Show the output of the test runner process</source>
       <translation>Zeig die Ausgabe des Testläufer Prozesses</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="108" />
+      <location filename="../Testing/TestingWidget.py" line="109" />
       <source>&lt;b&gt;Show Output...&lt;/b&lt;p&gt;This button opens a dialog containing the output of the test runner process of the most recent run.&lt;/p&gt;</source>
       <translation>&lt;b&gt;Ausgabe anzeigen...&lt;/b&gt;&lt;p&gt;Dieser Knopf öffnet einen Dialog mit der Ausgabe des Testläufers für den letzten Testlauf.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="116" />
+      <location filename="../Testing/TestingWidget.py" line="117" />
       <source>Show Coverage...</source>
       <translation>Abdeckung zeigen...</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="119" />
+      <location filename="../Testing/TestingWidget.py" line="120" />
       <source>Show code coverage in a new dialog</source>
       <translation>Zeige die Testabdeckung in einem neuen Dialog</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="122" />
+      <location filename="../Testing/TestingWidget.py" line="123" />
       <source>&lt;b&gt;Show Coverage...&lt;/b&gt;&lt;p&gt;This button opens a dialog containing the collected code coverage data.&lt;/p&gt;</source>
       <translation>&lt;b&gt;Abdeckung zeigen...&lt;/b&lt;p&gt;Dieser Knopf öffnet einen Dialog mit mit den gesammlten Abdeckungsdaten.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="130" />
+      <location filename="../Testing/TestingWidget.py" line="131" />
       <source>Start</source>
       <translation>Start</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="133" />
+      <location filename="../Testing/TestingWidget.py" line="134" />
       <source>Start the selected testsuite</source>
       <translation>Startet den ausgewählten Modultest</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="135" />
+      <location filename="../Testing/TestingWidget.py" line="136" />
       <source>&lt;b&gt;Start Test&lt;/b&gt;&lt;p&gt;This button starts the test run.&lt;/p&gt;</source>
       <translation>&lt;b&gt;Starte Modultest&lt;/b&gt;&lt;p&gt;Dieser Knopf startet den ausgewählten Modultest.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="141" />
+      <location filename="../Testing/TestingWidget.py" line="142" />
       <source>Rerun Failed</source>
       <translation>Fehlerhafte wiederholen</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="144" />
+      <location filename="../Testing/TestingWidget.py" line="145" />
       <source>Reruns failed tests of the selected testsuite</source>
       <translation>Fehlerhafte Tests des ausgewählten Modultests wiederholen</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="147" />
+      <location filename="../Testing/TestingWidget.py" line="148" />
       <source>&lt;b&gt;Rerun Failed&lt;/b&gt;&lt;p&gt;This button reruns all failed tests of the most recent test run.&lt;/p&gt;</source>
       <translation>&lt;b&gt;Fehlerhafte wiederholen&lt;/b&gt;&lt;p&gt;Dieser Knopf wiederholt alle fehlerhaften Tests des aktuellsten Testlaufes.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="155" />
+      <location filename="../Testing/TestingWidget.py" line="156" />
       <source>Stop</source>
       <translation>Anhalten</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="157" />
+      <location filename="../Testing/TestingWidget.py" line="158" />
       <source>Stop the running test</source>
       <translation>Halte den laufenden Modultest an</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="159" />
+      <location filename="../Testing/TestingWidget.py" line="160" />
       <source>&lt;b&gt;Stop Test&lt;/b&gt;&lt;p&gt;This button stops a running test.&lt;/p&gt;</source>
       <translation>&lt;b&gt;Modultest anhalten&lt;/b&gt;&lt;p&gt;Dieser Knopf hält den laufenden Test an.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="271" />
+      <location filename="../Testing/TestingWidget.py" line="274" />
       <source>{0} (not available)</source>
       <translation>{0} (nicht installiert)</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="566" />
+      <location filename="../Testing/TestingWidget.py" line="569" />
       <source>Running</source>
       <translation>Aktiv</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="622" />
+      <location filename="../Testing/TestingWidget.py" line="625" />
       <source>Python3 Files ({0});;All Files (*)</source>
       <translation>Python3 Dateien ({0});;Alle Dateien (*)</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="627" />
+      <location filename="../Testing/TestingWidget.py" line="630" />
       <source>Python Files (*.py);;All Files (*)</source>
       <translation>Python-Dateien (*.py);;Alle Dateien (*)</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="712" />
+      <location filename="../Testing/TestingWidget.py" line="768" />
       <source>&lt;h3&gt;Versions of Frameworks and their Plugins&lt;/h3&gt;</source>
       <translation>&lt;h3&gt;Versionen der Testrahmen und ihrer Erweiterungen&lt;/h3&gt;</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="726" />
+      <location filename="../Testing/TestingWidget.py" line="782" />
       <source>&lt;tr&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;</source>
       <translation>&lt;tr&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="735" />
+      <location filename="../Testing/TestingWidget.py" line="791" />
       <source>No version information available.</source>
       <translation>Keine Versionsinformationen verfügbar.</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="738" />
+      <location filename="../Testing/TestingWidget.py" line="794" />
       <source>Versions</source>
       <translation>Versionen</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="775" />
+      <location filename="../Testing/TestingWidget.py" line="831" />
       <source>Preparing Testsuite</source>
       <translation>Bereite Testlauf vor</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="838" />
+      <location filename="../Testing/TestingWidget.py" line="895" />
       <source>pending</source>
       <translation>ausstehend</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="866" />
+      <location filename="../Testing/TestingWidget.py" line="923" />
       <source>Failure</source>
       <translation>Fehlschlag</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="876" />
-      <location filename="../Testing/TestingWidget.py" line="869" />
+      <location filename="../Testing/TestingWidget.py" line="933" />
+      <location filename="../Testing/TestingWidget.py" line="926" />
       <source>Collection Error</source>
       <translation>Ermittlungsfehler</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="877" />
+      <location filename="../Testing/TestingWidget.py" line="934" />
       <source>&lt;p&gt;There was an error while collecting tests.&lt;/p&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Es gab einen Fehler während der Testermittlung.&lt;/p&gt;&lt;p&gt;{0}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="898" />
+      <location filename="../Testing/TestingWidget.py" line="955" />
       <source>running</source>
       <translation>läuft</translation>
     </message>
     <message numerus="yes">
-      <location filename="../Testing/TestingWidget.py" line="949" />
+      <location filename="../Testing/TestingWidget.py" line="1006" />
       <source>Ran %n test(s) in {0}s</source>
       <translation>
         <numerusform>%n Test in {0}s ausgeführt</numerusform>
@@ -79397,7 +79430,7 @@
       </translation>
     </message>
     <message numerus="yes">
-      <location filename="../Testing/TestingWidget.py" line="961" />
+      <location filename="../Testing/TestingWidget.py" line="1018" />
       <source>Ran %n test(s)</source>
       <translation>
         <numerusform>%n Test ausgeführt</numerusform>
@@ -79405,12 +79438,12 @@
       </translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="982" />
+      <location filename="../Testing/TestingWidget.py" line="1039" />
       <source>not run</source>
       <translation>nicht ausgeführt</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="1027" />
+      <location filename="../Testing/TestingWidget.py" line="1084" />
       <source>Test Run Output</source>
       <translation>Ausgabe Testlauf</translation>
     </message>
--- a/src/eric7/i18n/eric7_empty.ts	Sun Sep 04 16:11:32 2022 +0200
+++ b/src/eric7/i18n/eric7_empty.ts	Mon Sep 05 18:08:43 2022 +0200
@@ -46718,6 +46718,24 @@
     </message>
   </context>
   <context>
+    <name>MarkersWindow</name>
+    <message>
+      <location filename="../Testing/MarkersWindow.ui" line="0" />
+      <source>Defined Markers</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/MarkersWindow.ui" line="0" />
+      <source>Marker</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/MarkersWindow.ui" line="0" />
+      <source>Description</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
     <name>MasterPasswordEntryDialog</name>
     <message>
       <location filename="../Preferences/ConfigurationPages/MasterPasswordEntryDialog.py" line="36" />
@@ -61075,18 +61093,18 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/Interfaces/PytestExecutor.py" line="221" />
+      <location filename="../Testing/Interfaces/PytestExecutor.py" line="263" />
       <source>Error</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/Interfaces/PytestExecutor.py" line="230" />
+      <location filename="../Testing/Interfaces/PytestExecutor.py" line="272" />
       <source>ERROR at {0}: {1}</source>
       <comment>phase, message</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/Interfaces/PytestExecutor.py" line="233" />
+      <location filename="../Testing/Interfaces/PytestExecutor.py" line="275" />
       <source>ERROR at {0}: {1}</source>
       <comment>phase, extra text</comment>
       <translation type="unfinished" />
@@ -78506,7 +78524,7 @@
   <context>
     <name>TestingWidget</name>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="168" />
+      <location filename="../Testing/TestingWidget.py" line="169" />
       <location filename="../Testing/TestingWidget.ui" line="0" />
       <source>Testing</source>
       <translation type="unfinished" />
@@ -78615,6 +78633,21 @@
     </message>
     <message>
       <location filename="../Testing/TestingWidget.ui" line="0" />
+      <source>Marker Expression:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/TestingWidget.ui" line="0" />
+      <source>Enter a marker expression or name to filter tests</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/TestingWidget.ui" line="0" />
+      <source>Press to show a window with the list of defined markers</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/TestingWidget.ui" line="0" />
       <source>Run Parameters</source>
       <translation type="unfinished" />
     </message>
@@ -78690,172 +78723,172 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="102" />
+      <location filename="../Testing/TestingWidget.py" line="103" />
       <source>Show Output...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="105" />
+      <location filename="../Testing/TestingWidget.py" line="106" />
       <source>Show the output of the test runner process</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="108" />
+      <location filename="../Testing/TestingWidget.py" line="109" />
       <source>&lt;b&gt;Show Output...&lt;/b&lt;p&gt;This button opens a dialog containing the output of the test runner process of the most recent run.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="116" />
+      <location filename="../Testing/TestingWidget.py" line="117" />
       <source>Show Coverage...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="119" />
+      <location filename="../Testing/TestingWidget.py" line="120" />
       <source>Show code coverage in a new dialog</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="122" />
+      <location filename="../Testing/TestingWidget.py" line="123" />
       <source>&lt;b&gt;Show Coverage...&lt;/b&gt;&lt;p&gt;This button opens a dialog containing the collected code coverage data.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="130" />
+      <location filename="../Testing/TestingWidget.py" line="131" />
       <source>Start</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="133" />
+      <location filename="../Testing/TestingWidget.py" line="134" />
       <source>Start the selected testsuite</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="135" />
+      <location filename="../Testing/TestingWidget.py" line="136" />
       <source>&lt;b&gt;Start Test&lt;/b&gt;&lt;p&gt;This button starts the test run.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="141" />
+      <location filename="../Testing/TestingWidget.py" line="142" />
       <source>Rerun Failed</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="144" />
+      <location filename="../Testing/TestingWidget.py" line="145" />
       <source>Reruns failed tests of the selected testsuite</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="147" />
+      <location filename="../Testing/TestingWidget.py" line="148" />
       <source>&lt;b&gt;Rerun Failed&lt;/b&gt;&lt;p&gt;This button reruns all failed tests of the most recent test run.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="155" />
+      <location filename="../Testing/TestingWidget.py" line="156" />
       <source>Stop</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="157" />
+      <location filename="../Testing/TestingWidget.py" line="158" />
       <source>Stop the running test</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="159" />
+      <location filename="../Testing/TestingWidget.py" line="160" />
       <source>&lt;b&gt;Stop Test&lt;/b&gt;&lt;p&gt;This button stops a running test.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="271" />
+      <location filename="../Testing/TestingWidget.py" line="274" />
       <source>{0} (not available)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="566" />
+      <location filename="../Testing/TestingWidget.py" line="569" />
       <source>Running</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="622" />
+      <location filename="../Testing/TestingWidget.py" line="625" />
       <source>Python3 Files ({0});;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="627" />
+      <location filename="../Testing/TestingWidget.py" line="630" />
       <source>Python Files (*.py);;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="712" />
+      <location filename="../Testing/TestingWidget.py" line="768" />
       <source>&lt;h3&gt;Versions of Frameworks and their Plugins&lt;/h3&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="726" />
+      <location filename="../Testing/TestingWidget.py" line="782" />
       <source>&lt;tr&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="735" />
+      <location filename="../Testing/TestingWidget.py" line="791" />
       <source>No version information available.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="738" />
+      <location filename="../Testing/TestingWidget.py" line="794" />
       <source>Versions</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="775" />
+      <location filename="../Testing/TestingWidget.py" line="831" />
       <source>Preparing Testsuite</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="838" />
+      <location filename="../Testing/TestingWidget.py" line="895" />
       <source>pending</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="866" />
+      <location filename="../Testing/TestingWidget.py" line="923" />
       <source>Failure</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="876" />
-      <location filename="../Testing/TestingWidget.py" line="869" />
+      <location filename="../Testing/TestingWidget.py" line="933" />
+      <location filename="../Testing/TestingWidget.py" line="926" />
       <source>Collection Error</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="877" />
+      <location filename="../Testing/TestingWidget.py" line="934" />
       <source>&lt;p&gt;There was an error while collecting tests.&lt;/p&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="898" />
+      <location filename="../Testing/TestingWidget.py" line="955" />
       <source>running</source>
       <translation type="unfinished" />
     </message>
     <message numerus="yes">
-      <location filename="../Testing/TestingWidget.py" line="949" />
+      <location filename="../Testing/TestingWidget.py" line="1006" />
       <source>Ran %n test(s) in {0}s</source>
       <translation type="unfinished">
         <numerusform />
       </translation>
     </message>
     <message numerus="yes">
-      <location filename="../Testing/TestingWidget.py" line="961" />
+      <location filename="../Testing/TestingWidget.py" line="1018" />
       <source>Ran %n test(s)</source>
       <translation type="unfinished">
         <numerusform />
       </translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="982" />
+      <location filename="../Testing/TestingWidget.py" line="1039" />
       <source>not run</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="1027" />
+      <location filename="../Testing/TestingWidget.py" line="1084" />
       <source>Test Run Output</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_en.ts	Sun Sep 04 16:11:32 2022 +0200
+++ b/src/eric7/i18n/eric7_en.ts	Mon Sep 05 18:08:43 2022 +0200
@@ -46759,6 +46759,24 @@
     </message>
   </context>
   <context>
+    <name>MarkersWindow</name>
+    <message>
+      <location filename="../Testing/MarkersWindow.ui" line="0" />
+      <source>Defined Markers</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/MarkersWindow.ui" line="0" />
+      <source>Marker</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/MarkersWindow.ui" line="0" />
+      <source>Description</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
     <name>MasterPasswordEntryDialog</name>
     <message>
       <location filename="../Preferences/ConfigurationPages/MasterPasswordEntryDialog.py" line="36" />
@@ -61123,18 +61141,18 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/Interfaces/PytestExecutor.py" line="221" />
+      <location filename="../Testing/Interfaces/PytestExecutor.py" line="263" />
       <source>Error</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/Interfaces/PytestExecutor.py" line="230" />
+      <location filename="../Testing/Interfaces/PytestExecutor.py" line="272" />
       <source>ERROR at {0}: {1}</source>
       <comment>phase, message</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/Interfaces/PytestExecutor.py" line="233" />
+      <location filename="../Testing/Interfaces/PytestExecutor.py" line="275" />
       <source>ERROR at {0}: {1}</source>
       <comment>phase, extra text</comment>
       <translation type="unfinished" />
@@ -78557,7 +78575,7 @@
   <context>
     <name>TestingWidget</name>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="168" />
+      <location filename="../Testing/TestingWidget.py" line="169" />
       <location filename="../Testing/TestingWidget.ui" line="0" />
       <source>Testing</source>
       <translation type="unfinished" />
@@ -78666,6 +78684,21 @@
     </message>
     <message>
       <location filename="../Testing/TestingWidget.ui" line="0" />
+      <source>Marker Expression:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/TestingWidget.ui" line="0" />
+      <source>Enter a marker expression or name to filter tests</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/TestingWidget.ui" line="0" />
+      <source>Press to show a window with the list of defined markers</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/TestingWidget.ui" line="0" />
       <source>Run Parameters</source>
       <translation type="unfinished" />
     </message>
@@ -78741,153 +78774,153 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="102" />
+      <location filename="../Testing/TestingWidget.py" line="103" />
       <source>Show Output...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="105" />
+      <location filename="../Testing/TestingWidget.py" line="106" />
       <source>Show the output of the test runner process</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="108" />
+      <location filename="../Testing/TestingWidget.py" line="109" />
       <source>&lt;b&gt;Show Output...&lt;/b&lt;p&gt;This button opens a dialog containing the output of the test runner process of the most recent run.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="116" />
+      <location filename="../Testing/TestingWidget.py" line="117" />
       <source>Show Coverage...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="119" />
+      <location filename="../Testing/TestingWidget.py" line="120" />
       <source>Show code coverage in a new dialog</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="122" />
+      <location filename="../Testing/TestingWidget.py" line="123" />
       <source>&lt;b&gt;Show Coverage...&lt;/b&gt;&lt;p&gt;This button opens a dialog containing the collected code coverage data.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="130" />
+      <location filename="../Testing/TestingWidget.py" line="131" />
       <source>Start</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="133" />
+      <location filename="../Testing/TestingWidget.py" line="134" />
       <source>Start the selected testsuite</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="135" />
+      <location filename="../Testing/TestingWidget.py" line="136" />
       <source>&lt;b&gt;Start Test&lt;/b&gt;&lt;p&gt;This button starts the test run.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="141" />
+      <location filename="../Testing/TestingWidget.py" line="142" />
       <source>Rerun Failed</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="144" />
+      <location filename="../Testing/TestingWidget.py" line="145" />
       <source>Reruns failed tests of the selected testsuite</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="147" />
+      <location filename="../Testing/TestingWidget.py" line="148" />
       <source>&lt;b&gt;Rerun Failed&lt;/b&gt;&lt;p&gt;This button reruns all failed tests of the most recent test run.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="155" />
+      <location filename="../Testing/TestingWidget.py" line="156" />
       <source>Stop</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="157" />
+      <location filename="../Testing/TestingWidget.py" line="158" />
       <source>Stop the running test</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="159" />
+      <location filename="../Testing/TestingWidget.py" line="160" />
       <source>&lt;b&gt;Stop Test&lt;/b&gt;&lt;p&gt;This button stops a running test.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="271" />
+      <location filename="../Testing/TestingWidget.py" line="274" />
       <source>{0} (not available)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="566" />
+      <location filename="../Testing/TestingWidget.py" line="569" />
       <source>Running</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="622" />
+      <location filename="../Testing/TestingWidget.py" line="625" />
       <source>Python3 Files ({0});;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="627" />
+      <location filename="../Testing/TestingWidget.py" line="630" />
       <source>Python Files (*.py);;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="712" />
+      <location filename="../Testing/TestingWidget.py" line="768" />
       <source>&lt;h3&gt;Versions of Frameworks and their Plugins&lt;/h3&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="726" />
+      <location filename="../Testing/TestingWidget.py" line="782" />
       <source>&lt;tr&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="735" />
+      <location filename="../Testing/TestingWidget.py" line="791" />
       <source>No version information available.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="738" />
+      <location filename="../Testing/TestingWidget.py" line="794" />
       <source>Versions</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="775" />
+      <location filename="../Testing/TestingWidget.py" line="831" />
       <source>Preparing Testsuite</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="838" />
+      <location filename="../Testing/TestingWidget.py" line="895" />
       <source>pending</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="866" />
+      <location filename="../Testing/TestingWidget.py" line="923" />
       <source>Failure</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="876" />
-      <location filename="../Testing/TestingWidget.py" line="869" />
+      <location filename="../Testing/TestingWidget.py" line="933" />
+      <location filename="../Testing/TestingWidget.py" line="926" />
       <source>Collection Error</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="877" />
+      <location filename="../Testing/TestingWidget.py" line="934" />
       <source>&lt;p&gt;There was an error while collecting tests.&lt;/p&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="898" />
+      <location filename="../Testing/TestingWidget.py" line="955" />
       <source>running</source>
       <translation type="unfinished" />
     </message>
     <message numerus="yes">
-      <location filename="../Testing/TestingWidget.py" line="949" />
+      <location filename="../Testing/TestingWidget.py" line="1006" />
       <source>Ran %n test(s) in {0}s</source>
       <translation>
         <numerusform>Ran %n test in {0}s</numerusform>
@@ -78895,7 +78928,7 @@
       </translation>
     </message>
     <message numerus="yes">
-      <location filename="../Testing/TestingWidget.py" line="961" />
+      <location filename="../Testing/TestingWidget.py" line="1018" />
       <source>Ran %n test(s)</source>
       <translation>
         <numerusform>Ran %n test</numerusform>
@@ -78903,12 +78936,12 @@
       </translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="982" />
+      <location filename="../Testing/TestingWidget.py" line="1039" />
       <source>not run</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="1027" />
+      <location filename="../Testing/TestingWidget.py" line="1084" />
       <source>Test Run Output</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_es.ts	Sun Sep 04 16:11:32 2022 +0200
+++ b/src/eric7/i18n/eric7_es.ts	Mon Sep 05 18:08:43 2022 +0200
@@ -46956,6 +46956,24 @@
     </message>
   </context>
   <context>
+    <name>MarkersWindow</name>
+    <message>
+      <location filename="../Testing/MarkersWindow.ui" line="0" />
+      <source>Defined Markers</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/MarkersWindow.ui" line="0" />
+      <source>Marker</source>
+      <translation type="unfinished">Marcador</translation>
+    </message>
+    <message>
+      <location filename="../Testing/MarkersWindow.ui" line="0" />
+      <source>Description</source>
+      <translation type="unfinished">Descripción</translation>
+    </message>
+  </context>
+  <context>
     <name>MasterPasswordEntryDialog</name>
     <message>
       <location filename="../Preferences/ConfigurationPages/MasterPasswordEntryDialog.py" line="36" />
@@ -61391,18 +61409,18 @@
       <translation>Éxito</translation>
     </message>
     <message>
-      <location filename="../Testing/Interfaces/PytestExecutor.py" line="221" />
+      <location filename="../Testing/Interfaces/PytestExecutor.py" line="263" />
       <source>Error</source>
       <translation>Error</translation>
     </message>
     <message>
-      <location filename="../Testing/Interfaces/PytestExecutor.py" line="230" />
+      <location filename="../Testing/Interfaces/PytestExecutor.py" line="272" />
       <source>ERROR at {0}: {1}</source>
       <comment>phase, message</comment>
       <translation>ERROR en {0}: {1}</translation>
     </message>
     <message>
-      <location filename="../Testing/Interfaces/PytestExecutor.py" line="233" />
+      <location filename="../Testing/Interfaces/PytestExecutor.py" line="275" />
       <source>ERROR at {0}: {1}</source>
       <comment>phase, extra text</comment>
       <translation>ERROR en {0}: {1}</translation>
@@ -79030,7 +79048,7 @@
   <context>
     <name>TestingWidget</name>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="168" />
+      <location filename="../Testing/TestingWidget.py" line="169" />
       <location filename="../Testing/TestingWidget.ui" line="0" />
       <source>Testing</source>
       <translation>Testando</translation>
@@ -79141,6 +79159,21 @@
     </message>
     <message>
       <location filename="../Testing/TestingWidget.ui" line="0" />
+      <source>Marker Expression:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/TestingWidget.ui" line="0" />
+      <source>Enter a marker expression or name to filter tests</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/TestingWidget.ui" line="0" />
+      <source>Press to show a window with the list of defined markers</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/TestingWidget.ui" line="0" />
       <source>Run Parameters</source>
       <translation>Ejecutar Parámetros</translation>
     </message>
@@ -79216,153 +79249,153 @@
       <translation>Desocupado</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="102" />
+      <location filename="../Testing/TestingWidget.py" line="103" />
       <source>Show Output...</source>
       <translation>Mostrar Salida...</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="105" />
+      <location filename="../Testing/TestingWidget.py" line="106" />
       <source>Show the output of the test runner process</source>
       <translation>Mostrar la salida del proceso de ejecución del test</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="108" />
+      <location filename="../Testing/TestingWidget.py" line="109" />
       <source>&lt;b&gt;Show Output...&lt;/b&lt;p&gt;This button opens a dialog containing the output of the test runner process of the most recent run.&lt;/p&gt;</source>
       <translation>&lt;b&gt;Mostrar Salida...&lt;/b&lt;p&gt;Este botón abre un diálogo que contiene la salida del proceso de ejecución del  test en la ejecución más reciente.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="116" />
+      <location filename="../Testing/TestingWidget.py" line="117" />
       <source>Show Coverage...</source>
       <translation>Mostrar Cobertura...</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="119" />
+      <location filename="../Testing/TestingWidget.py" line="120" />
       <source>Show code coverage in a new dialog</source>
       <translation>Mostrar la cobertura de código en un nuevo diálogo</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="122" />
+      <location filename="../Testing/TestingWidget.py" line="123" />
       <source>&lt;b&gt;Show Coverage...&lt;/b&gt;&lt;p&gt;This button opens a dialog containing the collected code coverage data.&lt;/p&gt;</source>
       <translation>&lt;b&gt;Mostrar Cobertura...&lt;/b&gt;&lt;p&gt;Este botón abre un diálogo que contiene los datos recogidos sobre cobertura de código.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="130" />
+      <location filename="../Testing/TestingWidget.py" line="131" />
       <source>Start</source>
       <translation>Comenzar</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="133" />
+      <location filename="../Testing/TestingWidget.py" line="134" />
       <source>Start the selected testsuite</source>
       <translation>Comenzar la suite de tests seleccionada</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="135" />
+      <location filename="../Testing/TestingWidget.py" line="136" />
       <source>&lt;b&gt;Start Test&lt;/b&gt;&lt;p&gt;This button starts the test run.&lt;/p&gt;</source>
       <translation>&lt;b&gt;Comenzar Test&lt;/b&gt;&lt;p&gt;Este botón inicia la ejecución del test.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="141" />
+      <location filename="../Testing/TestingWidget.py" line="142" />
       <source>Rerun Failed</source>
       <translation>Re-ejecución Fallida</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="144" />
+      <location filename="../Testing/TestingWidget.py" line="145" />
       <source>Reruns failed tests of the selected testsuite</source>
       <translation>La re-ejecución ha fallado tests del testsuite seleccionado</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="147" />
+      <location filename="../Testing/TestingWidget.py" line="148" />
       <source>&lt;b&gt;Rerun Failed&lt;/b&gt;&lt;p&gt;This button reruns all failed tests of the most recent test run.&lt;/p&gt;</source>
       <translation>&lt;b&gt;Re-ejecución Fallida&lt;/b&gt;&lt;p&gt;Este botón re-ejecuta todos los tests fallidos de la ejecución de test más reciente.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="155" />
+      <location filename="../Testing/TestingWidget.py" line="156" />
       <source>Stop</source>
       <translation>Detener</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="157" />
+      <location filename="../Testing/TestingWidget.py" line="158" />
       <source>Stop the running test</source>
       <translation>Detener el test en ejecución</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="159" />
+      <location filename="../Testing/TestingWidget.py" line="160" />
       <source>&lt;b&gt;Stop Test&lt;/b&gt;&lt;p&gt;This button stops a running test.&lt;/p&gt;</source>
       <translation>&lt;b&gt;Detener Test&lt;/b&gt;&lt;p&gt;Este botón detiene un test en ejecución.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="271" />
+      <location filename="../Testing/TestingWidget.py" line="274" />
       <source>{0} (not available)</source>
       <translation>{0} (no disponible)</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="566" />
+      <location filename="../Testing/TestingWidget.py" line="569" />
       <source>Running</source>
       <translation>Ejecutando</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="622" />
+      <location filename="../Testing/TestingWidget.py" line="625" />
       <source>Python3 Files ({0});;All Files (*)</source>
       <translation>Archivos de Python3 ({0});;Todos los Archivos (*)</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="627" />
+      <location filename="../Testing/TestingWidget.py" line="630" />
       <source>Python Files (*.py);;All Files (*)</source>
       <translation>Archivos Python (*.py);;Todos los Archivos (*)</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="712" />
+      <location filename="../Testing/TestingWidget.py" line="768" />
       <source>&lt;h3&gt;Versions of Frameworks and their Plugins&lt;/h3&gt;</source>
       <translation>&lt;h3&gt;Versiones de los Frameworks y sus correspondientes Plugins&lt;/h3&gt;</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="726" />
+      <location filename="../Testing/TestingWidget.py" line="782" />
       <source>&lt;tr&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;</source>
       <translation>&lt;tr&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="735" />
+      <location filename="../Testing/TestingWidget.py" line="791" />
       <source>No version information available.</source>
       <translation>No hay información de versión disponible.</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="738" />
+      <location filename="../Testing/TestingWidget.py" line="794" />
       <source>Versions</source>
       <translation>Versiones</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="775" />
+      <location filename="../Testing/TestingWidget.py" line="831" />
       <source>Preparing Testsuite</source>
       <translation>Preparando Suite de Tests</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="838" />
+      <location filename="../Testing/TestingWidget.py" line="895" />
       <source>pending</source>
       <translation>pendiente</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="866" />
+      <location filename="../Testing/TestingWidget.py" line="923" />
       <source>Failure</source>
       <translation>Fallo</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="876" />
-      <location filename="../Testing/TestingWidget.py" line="869" />
+      <location filename="../Testing/TestingWidget.py" line="933" />
+      <location filename="../Testing/TestingWidget.py" line="926" />
       <source>Collection Error</source>
       <translation>Error de Recolección</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="877" />
+      <location filename="../Testing/TestingWidget.py" line="934" />
       <source>&lt;p&gt;There was an error while collecting tests.&lt;/p&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Ha habido un error mientras se recolectaban los tests.&lt;/p&gt;&lt;p&gt;{0}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="898" />
+      <location filename="../Testing/TestingWidget.py" line="955" />
       <source>running</source>
       <translation>en ejecución</translation>
     </message>
     <message numerus="yes">
-      <location filename="../Testing/TestingWidget.py" line="949" />
+      <location filename="../Testing/TestingWidget.py" line="1006" />
       <source>Ran %n test(s) in {0}s</source>
       <translation>
         <numerusform>Ejecutado %n test en {0}s</numerusform>
@@ -79370,7 +79403,7 @@
       </translation>
     </message>
     <message numerus="yes">
-      <location filename="../Testing/TestingWidget.py" line="961" />
+      <location filename="../Testing/TestingWidget.py" line="1018" />
       <source>Ran %n test(s)</source>
       <translation>
         <numerusform>Ejecutado %n test</numerusform>
@@ -79378,12 +79411,12 @@
       </translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="982" />
+      <location filename="../Testing/TestingWidget.py" line="1039" />
       <source>not run</source>
       <translation>no ejecutado</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="1027" />
+      <location filename="../Testing/TestingWidget.py" line="1084" />
       <source>Test Run Output</source>
       <translation>Salida de Ejecución de Test</translation>
     </message>
--- a/src/eric7/i18n/eric7_fr.ts	Sun Sep 04 16:11:32 2022 +0200
+++ b/src/eric7/i18n/eric7_fr.ts	Mon Sep 05 18:08:43 2022 +0200
@@ -46928,6 +46928,24 @@
     </message>
   </context>
   <context>
+    <name>MarkersWindow</name>
+    <message>
+      <location filename="../Testing/MarkersWindow.ui" line="0" />
+      <source>Defined Markers</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/MarkersWindow.ui" line="0" />
+      <source>Marker</source>
+      <translation type="unfinished">Marqueur</translation>
+    </message>
+    <message>
+      <location filename="../Testing/MarkersWindow.ui" line="0" />
+      <source>Description</source>
+      <translation type="unfinished">Description</translation>
+    </message>
+  </context>
+  <context>
     <name>MasterPasswordEntryDialog</name>
     <message>
       <location filename="../Preferences/ConfigurationPages/MasterPasswordEntryDialog.py" line="36" />
@@ -61381,18 +61399,18 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/Interfaces/PytestExecutor.py" line="221" />
+      <location filename="../Testing/Interfaces/PytestExecutor.py" line="263" />
       <source>Error</source>
       <translation type="unfinished">Erreur</translation>
     </message>
     <message>
-      <location filename="../Testing/Interfaces/PytestExecutor.py" line="230" />
+      <location filename="../Testing/Interfaces/PytestExecutor.py" line="272" />
       <source>ERROR at {0}: {1}</source>
       <comment>phase, message</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/Interfaces/PytestExecutor.py" line="233" />
+      <location filename="../Testing/Interfaces/PytestExecutor.py" line="275" />
       <source>ERROR at {0}: {1}</source>
       <comment>phase, extra text</comment>
       <translation type="unfinished" />
@@ -78967,7 +78985,7 @@
   <context>
     <name>TestingWidget</name>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="168" />
+      <location filename="../Testing/TestingWidget.py" line="169" />
       <location filename="../Testing/TestingWidget.ui" line="0" />
       <source>Testing</source>
       <translation type="unfinished" />
@@ -79076,6 +79094,21 @@
     </message>
     <message>
       <location filename="../Testing/TestingWidget.ui" line="0" />
+      <source>Marker Expression:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/TestingWidget.ui" line="0" />
+      <source>Enter a marker expression or name to filter tests</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/TestingWidget.ui" line="0" />
+      <source>Press to show a window with the list of defined markers</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/TestingWidget.ui" line="0" />
       <source>Run Parameters</source>
       <translation type="unfinished" />
     </message>
@@ -79151,172 +79184,172 @@
       <translation type="unfinished">Idle</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="102" />
+      <location filename="../Testing/TestingWidget.py" line="103" />
       <source>Show Output...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="105" />
+      <location filename="../Testing/TestingWidget.py" line="106" />
       <source>Show the output of the test runner process</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="108" />
+      <location filename="../Testing/TestingWidget.py" line="109" />
       <source>&lt;b&gt;Show Output...&lt;/b&lt;p&gt;This button opens a dialog containing the output of the test runner process of the most recent run.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="116" />
+      <location filename="../Testing/TestingWidget.py" line="117" />
       <source>Show Coverage...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="119" />
+      <location filename="../Testing/TestingWidget.py" line="120" />
       <source>Show code coverage in a new dialog</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="122" />
+      <location filename="../Testing/TestingWidget.py" line="123" />
       <source>&lt;b&gt;Show Coverage...&lt;/b&gt;&lt;p&gt;This button opens a dialog containing the collected code coverage data.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="130" />
+      <location filename="../Testing/TestingWidget.py" line="131" />
       <source>Start</source>
       <translation type="unfinished">Lancer</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="133" />
+      <location filename="../Testing/TestingWidget.py" line="134" />
       <source>Start the selected testsuite</source>
       <translation type="unfinished">Lancer la suite de tests</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="135" />
+      <location filename="../Testing/TestingWidget.py" line="136" />
       <source>&lt;b&gt;Start Test&lt;/b&gt;&lt;p&gt;This button starts the test run.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="141" />
+      <location filename="../Testing/TestingWidget.py" line="142" />
       <source>Rerun Failed</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="144" />
+      <location filename="../Testing/TestingWidget.py" line="145" />
       <source>Reruns failed tests of the selected testsuite</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="147" />
+      <location filename="../Testing/TestingWidget.py" line="148" />
       <source>&lt;b&gt;Rerun Failed&lt;/b&gt;&lt;p&gt;This button reruns all failed tests of the most recent test run.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="155" />
+      <location filename="../Testing/TestingWidget.py" line="156" />
       <source>Stop</source>
       <translation type="unfinished">Arrêt</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="157" />
+      <location filename="../Testing/TestingWidget.py" line="158" />
       <source>Stop the running test</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="159" />
+      <location filename="../Testing/TestingWidget.py" line="160" />
       <source>&lt;b&gt;Stop Test&lt;/b&gt;&lt;p&gt;This button stops a running test.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="271" />
+      <location filename="../Testing/TestingWidget.py" line="274" />
       <source>{0} (not available)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="566" />
+      <location filename="../Testing/TestingWidget.py" line="569" />
       <source>Running</source>
       <translation type="unfinished">En cours d'execution</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="622" />
+      <location filename="../Testing/TestingWidget.py" line="625" />
       <source>Python3 Files ({0});;All Files (*)</source>
       <translation type="unfinished">Fichiers Python3({0});; Tous les fichiers (*)</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="627" />
+      <location filename="../Testing/TestingWidget.py" line="630" />
       <source>Python Files (*.py);;All Files (*)</source>
       <translation type="unfinished">Fichiers Python (*.py);;Tous les fichiers (*)</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="712" />
+      <location filename="../Testing/TestingWidget.py" line="768" />
       <source>&lt;h3&gt;Versions of Frameworks and their Plugins&lt;/h3&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="726" />
+      <location filename="../Testing/TestingWidget.py" line="782" />
       <source>&lt;tr&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="735" />
+      <location filename="../Testing/TestingWidget.py" line="791" />
       <source>No version information available.</source>
       <translation type="unfinished">Pas d'information de version disponible.</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="738" />
+      <location filename="../Testing/TestingWidget.py" line="794" />
       <source>Versions</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="775" />
+      <location filename="../Testing/TestingWidget.py" line="831" />
       <source>Preparing Testsuite</source>
       <translation type="unfinished">Préparation de Testsuite</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="838" />
+      <location filename="../Testing/TestingWidget.py" line="895" />
       <source>pending</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="866" />
+      <location filename="../Testing/TestingWidget.py" line="923" />
       <source>Failure</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="876" />
-      <location filename="../Testing/TestingWidget.py" line="869" />
+      <location filename="../Testing/TestingWidget.py" line="933" />
+      <location filename="../Testing/TestingWidget.py" line="926" />
       <source>Collection Error</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="877" />
+      <location filename="../Testing/TestingWidget.py" line="934" />
       <source>&lt;p&gt;There was an error while collecting tests.&lt;/p&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="898" />
+      <location filename="../Testing/TestingWidget.py" line="955" />
       <source>running</source>
       <translation type="unfinished">en cours</translation>
     </message>
     <message numerus="yes">
-      <location filename="../Testing/TestingWidget.py" line="949" />
+      <location filename="../Testing/TestingWidget.py" line="1006" />
       <source>Ran %n test(s) in {0}s</source>
       <translation type="unfinished">
         <numerusform />
       </translation>
     </message>
     <message numerus="yes">
-      <location filename="../Testing/TestingWidget.py" line="961" />
+      <location filename="../Testing/TestingWidget.py" line="1018" />
       <source>Ran %n test(s)</source>
       <translation type="unfinished">
         <numerusform />
       </translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="982" />
+      <location filename="../Testing/TestingWidget.py" line="1039" />
       <source>not run</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="1027" />
+      <location filename="../Testing/TestingWidget.py" line="1084" />
       <source>Test Run Output</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_it.ts	Sun Sep 04 16:11:32 2022 +0200
+++ b/src/eric7/i18n/eric7_it.ts	Mon Sep 05 18:08:43 2022 +0200
@@ -46896,6 +46896,24 @@
     </message>
   </context>
   <context>
+    <name>MarkersWindow</name>
+    <message>
+      <location filename="../Testing/MarkersWindow.ui" line="0" />
+      <source>Defined Markers</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/MarkersWindow.ui" line="0" />
+      <source>Marker</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/MarkersWindow.ui" line="0" />
+      <source>Description</source>
+      <translation type="unfinished">Descrizione</translation>
+    </message>
+  </context>
+  <context>
     <name>MasterPasswordEntryDialog</name>
     <message>
       <location filename="../Preferences/ConfigurationPages/MasterPasswordEntryDialog.py" line="36" />
@@ -61339,18 +61357,18 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/Interfaces/PytestExecutor.py" line="221" />
+      <location filename="../Testing/Interfaces/PytestExecutor.py" line="263" />
       <source>Error</source>
       <translation type="unfinished">Errore</translation>
     </message>
     <message>
-      <location filename="../Testing/Interfaces/PytestExecutor.py" line="230" />
+      <location filename="../Testing/Interfaces/PytestExecutor.py" line="272" />
       <source>ERROR at {0}: {1}</source>
       <comment>phase, message</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/Interfaces/PytestExecutor.py" line="233" />
+      <location filename="../Testing/Interfaces/PytestExecutor.py" line="275" />
       <source>ERROR at {0}: {1}</source>
       <comment>phase, extra text</comment>
       <translation type="unfinished" />
@@ -78895,7 +78913,7 @@
   <context>
     <name>TestingWidget</name>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="168" />
+      <location filename="../Testing/TestingWidget.py" line="169" />
       <location filename="../Testing/TestingWidget.ui" line="0" />
       <source>Testing</source>
       <translation type="unfinished" />
@@ -79004,6 +79022,21 @@
     </message>
     <message>
       <location filename="../Testing/TestingWidget.ui" line="0" />
+      <source>Marker Expression:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/TestingWidget.ui" line="0" />
+      <source>Enter a marker expression or name to filter tests</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/TestingWidget.ui" line="0" />
+      <source>Press to show a window with the list of defined markers</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/TestingWidget.ui" line="0" />
       <source>Run Parameters</source>
       <translation type="unfinished" />
     </message>
@@ -79079,172 +79112,172 @@
       <translation type="unfinished">Attesa</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="102" />
+      <location filename="../Testing/TestingWidget.py" line="103" />
       <source>Show Output...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="105" />
+      <location filename="../Testing/TestingWidget.py" line="106" />
       <source>Show the output of the test runner process</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="108" />
+      <location filename="../Testing/TestingWidget.py" line="109" />
       <source>&lt;b&gt;Show Output...&lt;/b&lt;p&gt;This button opens a dialog containing the output of the test runner process of the most recent run.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="116" />
+      <location filename="../Testing/TestingWidget.py" line="117" />
       <source>Show Coverage...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="119" />
+      <location filename="../Testing/TestingWidget.py" line="120" />
       <source>Show code coverage in a new dialog</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="122" />
+      <location filename="../Testing/TestingWidget.py" line="123" />
       <source>&lt;b&gt;Show Coverage...&lt;/b&gt;&lt;p&gt;This button opens a dialog containing the collected code coverage data.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="130" />
+      <location filename="../Testing/TestingWidget.py" line="131" />
       <source>Start</source>
       <translation type="unfinished">Inizia</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="133" />
+      <location filename="../Testing/TestingWidget.py" line="134" />
       <source>Start the selected testsuite</source>
       <translation type="unfinished">Avvia la testsuite selezioanata</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="135" />
+      <location filename="../Testing/TestingWidget.py" line="136" />
       <source>&lt;b&gt;Start Test&lt;/b&gt;&lt;p&gt;This button starts the test run.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="141" />
+      <location filename="../Testing/TestingWidget.py" line="142" />
       <source>Rerun Failed</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="144" />
+      <location filename="../Testing/TestingWidget.py" line="145" />
       <source>Reruns failed tests of the selected testsuite</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="147" />
+      <location filename="../Testing/TestingWidget.py" line="148" />
       <source>&lt;b&gt;Rerun Failed&lt;/b&gt;&lt;p&gt;This button reruns all failed tests of the most recent test run.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="155" />
+      <location filename="../Testing/TestingWidget.py" line="156" />
       <source>Stop</source>
       <translation type="unfinished">Ferma</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="157" />
+      <location filename="../Testing/TestingWidget.py" line="158" />
       <source>Stop the running test</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="159" />
+      <location filename="../Testing/TestingWidget.py" line="160" />
       <source>&lt;b&gt;Stop Test&lt;/b&gt;&lt;p&gt;This button stops a running test.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="271" />
+      <location filename="../Testing/TestingWidget.py" line="274" />
       <source>{0} (not available)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="566" />
+      <location filename="../Testing/TestingWidget.py" line="569" />
       <source>Running</source>
       <translation type="unfinished">In esecuzione</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="622" />
+      <location filename="../Testing/TestingWidget.py" line="625" />
       <source>Python3 Files ({0});;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="627" />
+      <location filename="../Testing/TestingWidget.py" line="630" />
       <source>Python Files (*.py);;All Files (*)</source>
       <translation type="unfinished">File Python (*.py);;Tutti i File (*)</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="712" />
+      <location filename="../Testing/TestingWidget.py" line="768" />
       <source>&lt;h3&gt;Versions of Frameworks and their Plugins&lt;/h3&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="726" />
+      <location filename="../Testing/TestingWidget.py" line="782" />
       <source>&lt;tr&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="735" />
+      <location filename="../Testing/TestingWidget.py" line="791" />
       <source>No version information available.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="738" />
+      <location filename="../Testing/TestingWidget.py" line="794" />
       <source>Versions</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="775" />
+      <location filename="../Testing/TestingWidget.py" line="831" />
       <source>Preparing Testsuite</source>
       <translation type="unfinished">Preparazione Testsuite</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="838" />
+      <location filename="../Testing/TestingWidget.py" line="895" />
       <source>pending</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="866" />
+      <location filename="../Testing/TestingWidget.py" line="923" />
       <source>Failure</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="876" />
-      <location filename="../Testing/TestingWidget.py" line="869" />
+      <location filename="../Testing/TestingWidget.py" line="933" />
+      <location filename="../Testing/TestingWidget.py" line="926" />
       <source>Collection Error</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="877" />
+      <location filename="../Testing/TestingWidget.py" line="934" />
       <source>&lt;p&gt;There was an error while collecting tests.&lt;/p&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="898" />
+      <location filename="../Testing/TestingWidget.py" line="955" />
       <source>running</source>
       <translation type="unfinished">in esecuzione</translation>
     </message>
     <message numerus="yes">
-      <location filename="../Testing/TestingWidget.py" line="949" />
+      <location filename="../Testing/TestingWidget.py" line="1006" />
       <source>Ran %n test(s) in {0}s</source>
       <translation type="unfinished">
         <numerusform />
       </translation>
     </message>
     <message numerus="yes">
-      <location filename="../Testing/TestingWidget.py" line="961" />
+      <location filename="../Testing/TestingWidget.py" line="1018" />
       <source>Ran %n test(s)</source>
       <translation type="unfinished">
         <numerusform />
       </translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="982" />
+      <location filename="../Testing/TestingWidget.py" line="1039" />
       <source>not run</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="1027" />
+      <location filename="../Testing/TestingWidget.py" line="1084" />
       <source>Test Run Output</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_pt.ts	Sun Sep 04 16:11:32 2022 +0200
+++ b/src/eric7/i18n/eric7_pt.ts	Mon Sep 05 18:08:43 2022 +0200
@@ -46885,6 +46885,24 @@
     </message>
   </context>
   <context>
+    <name>MarkersWindow</name>
+    <message>
+      <location filename="../Testing/MarkersWindow.ui" line="0" />
+      <source>Defined Markers</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/MarkersWindow.ui" line="0" />
+      <source>Marker</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/MarkersWindow.ui" line="0" />
+      <source>Description</source>
+      <translation type="unfinished">Descrição</translation>
+    </message>
+  </context>
+  <context>
     <name>MasterPasswordEntryDialog</name>
     <message>
       <location filename="../Preferences/ConfigurationPages/MasterPasswordEntryDialog.py" line="36" />
@@ -61280,18 +61298,18 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/Interfaces/PytestExecutor.py" line="221" />
+      <location filename="../Testing/Interfaces/PytestExecutor.py" line="263" />
       <source>Error</source>
       <translation type="unfinished">Erro</translation>
     </message>
     <message>
-      <location filename="../Testing/Interfaces/PytestExecutor.py" line="230" />
+      <location filename="../Testing/Interfaces/PytestExecutor.py" line="272" />
       <source>ERROR at {0}: {1}</source>
       <comment>phase, message</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/Interfaces/PytestExecutor.py" line="233" />
+      <location filename="../Testing/Interfaces/PytestExecutor.py" line="275" />
       <source>ERROR at {0}: {1}</source>
       <comment>phase, extra text</comment>
       <translation type="unfinished" />
@@ -78729,7 +78747,7 @@
   <context>
     <name>TestingWidget</name>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="168" />
+      <location filename="../Testing/TestingWidget.py" line="169" />
       <location filename="../Testing/TestingWidget.ui" line="0" />
       <source>Testing</source>
       <translation type="unfinished" />
@@ -78838,6 +78856,21 @@
     </message>
     <message>
       <location filename="../Testing/TestingWidget.ui" line="0" />
+      <source>Marker Expression:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/TestingWidget.ui" line="0" />
+      <source>Enter a marker expression or name to filter tests</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/TestingWidget.ui" line="0" />
+      <source>Press to show a window with the list of defined markers</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/TestingWidget.ui" line="0" />
       <source>Run Parameters</source>
       <translation type="unfinished" />
     </message>
@@ -78913,172 +78946,172 @@
       <translation type="unfinished">Inativo</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="102" />
+      <location filename="../Testing/TestingWidget.py" line="103" />
       <source>Show Output...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="105" />
+      <location filename="../Testing/TestingWidget.py" line="106" />
       <source>Show the output of the test runner process</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="108" />
+      <location filename="../Testing/TestingWidget.py" line="109" />
       <source>&lt;b&gt;Show Output...&lt;/b&lt;p&gt;This button opens a dialog containing the output of the test runner process of the most recent run.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="116" />
+      <location filename="../Testing/TestingWidget.py" line="117" />
       <source>Show Coverage...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="119" />
+      <location filename="../Testing/TestingWidget.py" line="120" />
       <source>Show code coverage in a new dialog</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="122" />
+      <location filename="../Testing/TestingWidget.py" line="123" />
       <source>&lt;b&gt;Show Coverage...&lt;/b&gt;&lt;p&gt;This button opens a dialog containing the collected code coverage data.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="130" />
+      <location filename="../Testing/TestingWidget.py" line="131" />
       <source>Start</source>
       <translation type="unfinished">Iniciar</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="133" />
+      <location filename="../Testing/TestingWidget.py" line="134" />
       <source>Start the selected testsuite</source>
       <translation type="unfinished">Iniciar a suite de testes selecionada</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="135" />
+      <location filename="../Testing/TestingWidget.py" line="136" />
       <source>&lt;b&gt;Start Test&lt;/b&gt;&lt;p&gt;This button starts the test run.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="141" />
+      <location filename="../Testing/TestingWidget.py" line="142" />
       <source>Rerun Failed</source>
       <translation type="unfinished">Reexecução Falhada</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="144" />
+      <location filename="../Testing/TestingWidget.py" line="145" />
       <source>Reruns failed tests of the selected testsuite</source>
       <translation type="unfinished">Testes de reexecução falhados da suite de testes selecionada</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="147" />
+      <location filename="../Testing/TestingWidget.py" line="148" />
       <source>&lt;b&gt;Rerun Failed&lt;/b&gt;&lt;p&gt;This button reruns all failed tests of the most recent test run.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="155" />
+      <location filename="../Testing/TestingWidget.py" line="156" />
       <source>Stop</source>
       <translation type="unfinished">Parar</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="157" />
+      <location filename="../Testing/TestingWidget.py" line="158" />
       <source>Stop the running test</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="159" />
+      <location filename="../Testing/TestingWidget.py" line="160" />
       <source>&lt;b&gt;Stop Test&lt;/b&gt;&lt;p&gt;This button stops a running test.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="271" />
+      <location filename="../Testing/TestingWidget.py" line="274" />
       <source>{0} (not available)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="566" />
+      <location filename="../Testing/TestingWidget.py" line="569" />
       <source>Running</source>
       <translation type="unfinished">A executar</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="622" />
+      <location filename="../Testing/TestingWidget.py" line="625" />
       <source>Python3 Files ({0});;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="627" />
+      <location filename="../Testing/TestingWidget.py" line="630" />
       <source>Python Files (*.py);;All Files (*)</source>
       <translation type="unfinished">Ficheiros Python (*.py);;Ficheiros Todos (*)</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="712" />
+      <location filename="../Testing/TestingWidget.py" line="768" />
       <source>&lt;h3&gt;Versions of Frameworks and their Plugins&lt;/h3&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="726" />
+      <location filename="../Testing/TestingWidget.py" line="782" />
       <source>&lt;tr&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="735" />
+      <location filename="../Testing/TestingWidget.py" line="791" />
       <source>No version information available.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="738" />
+      <location filename="../Testing/TestingWidget.py" line="794" />
       <source>Versions</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="775" />
+      <location filename="../Testing/TestingWidget.py" line="831" />
       <source>Preparing Testsuite</source>
       <translation type="unfinished">A preparar Suite de Testes</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="838" />
+      <location filename="../Testing/TestingWidget.py" line="895" />
       <source>pending</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="866" />
+      <location filename="../Testing/TestingWidget.py" line="923" />
       <source>Failure</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="876" />
-      <location filename="../Testing/TestingWidget.py" line="869" />
+      <location filename="../Testing/TestingWidget.py" line="933" />
+      <location filename="../Testing/TestingWidget.py" line="926" />
       <source>Collection Error</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="877" />
+      <location filename="../Testing/TestingWidget.py" line="934" />
       <source>&lt;p&gt;There was an error while collecting tests.&lt;/p&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="898" />
+      <location filename="../Testing/TestingWidget.py" line="955" />
       <source>running</source>
       <translation type="unfinished">a executar</translation>
     </message>
     <message numerus="yes">
-      <location filename="../Testing/TestingWidget.py" line="949" />
+      <location filename="../Testing/TestingWidget.py" line="1006" />
       <source>Ran %n test(s) in {0}s</source>
       <translation type="unfinished">
         <numerusform />
       </translation>
     </message>
     <message numerus="yes">
-      <location filename="../Testing/TestingWidget.py" line="961" />
+      <location filename="../Testing/TestingWidget.py" line="1018" />
       <source>Ran %n test(s)</source>
       <translation type="unfinished">
         <numerusform />
       </translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="982" />
+      <location filename="../Testing/TestingWidget.py" line="1039" />
       <source>not run</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="1027" />
+      <location filename="../Testing/TestingWidget.py" line="1084" />
       <source>Test Run Output</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_ru.ts	Sun Sep 04 16:11:32 2022 +0200
+++ b/src/eric7/i18n/eric7_ru.ts	Mon Sep 05 18:08:43 2022 +0200
@@ -47022,6 +47022,24 @@
     </message>
   </context>
   <context>
+    <name>MarkersWindow</name>
+    <message>
+      <location filename="../Testing/MarkersWindow.ui" line="0" />
+      <source>Defined Markers</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/MarkersWindow.ui" line="0" />
+      <source>Marker</source>
+      <translation type="unfinished">Маркер</translation>
+    </message>
+    <message>
+      <location filename="../Testing/MarkersWindow.ui" line="0" />
+      <source>Description</source>
+      <translation type="unfinished">Описание</translation>
+    </message>
+  </context>
+  <context>
     <name>MasterPasswordEntryDialog</name>
     <message>
       <location filename="../Preferences/ConfigurationPages/MasterPasswordEntryDialog.py" line="36" />
@@ -61535,18 +61553,18 @@
       <translation>Успешное завершение</translation>
     </message>
     <message>
-      <location filename="../Testing/Interfaces/PytestExecutor.py" line="221" />
+      <location filename="../Testing/Interfaces/PytestExecutor.py" line="263" />
       <source>Error</source>
       <translation>Ошибка</translation>
     </message>
     <message>
-      <location filename="../Testing/Interfaces/PytestExecutor.py" line="230" />
+      <location filename="../Testing/Interfaces/PytestExecutor.py" line="272" />
       <source>ERROR at {0}: {1}</source>
       <comment>phase, message</comment>
       <translation>ERROR в {0}: {1}</translation>
     </message>
     <message>
-      <location filename="../Testing/Interfaces/PytestExecutor.py" line="233" />
+      <location filename="../Testing/Interfaces/PytestExecutor.py" line="275" />
       <source>ERROR at {0}: {1}</source>
       <comment>phase, extra text</comment>
       <translation>ERROR в {0}: {1}</translation>
@@ -79203,7 +79221,7 @@
   <context>
     <name>TestingWidget</name>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="168" />
+      <location filename="../Testing/TestingWidget.py" line="169" />
       <location filename="../Testing/TestingWidget.ui" line="0" />
       <source>Testing</source>
       <translation>Тестирование</translation>
@@ -79315,6 +79333,21 @@
     </message>
     <message>
       <location filename="../Testing/TestingWidget.ui" line="0" />
+      <source>Marker Expression:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/TestingWidget.ui" line="0" />
+      <source>Enter a marker expression or name to filter tests</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/TestingWidget.ui" line="0" />
+      <source>Press to show a window with the list of defined markers</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/TestingWidget.ui" line="0" />
       <source>Run Parameters</source>
       <translation>Параметры прогона</translation>
     </message>
@@ -79390,153 +79423,153 @@
       <translation>Отсутствие действий</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="102" />
+      <location filename="../Testing/TestingWidget.py" line="103" />
       <source>Show Output...</source>
       <translation>Показать вывод...</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="105" />
+      <location filename="../Testing/TestingWidget.py" line="106" />
       <source>Show the output of the test runner process</source>
       <translation>Показать вывод процесса прогона тестов</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="108" />
+      <location filename="../Testing/TestingWidget.py" line="109" />
       <source>&lt;b&gt;Show Output...&lt;/b&lt;p&gt;This button opens a dialog containing the output of the test runner process of the most recent run.&lt;/p&gt;</source>
       <translation>&lt;b&gt;Показать вывод...&lt;/b&lt;p&gt;Эта кнопка открывает диалоговое окно, содержащее выходные данные самого последнего запуска процесса выполнения тестов.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="116" />
+      <location filename="../Testing/TestingWidget.py" line="117" />
       <source>Show Coverage...</source>
       <translation>Показать покрытие...</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="119" />
+      <location filename="../Testing/TestingWidget.py" line="120" />
       <source>Show code coverage in a new dialog</source>
       <translation>Показать покрытие кода в новом диалоге</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="122" />
+      <location filename="../Testing/TestingWidget.py" line="123" />
       <source>&lt;b&gt;Show Coverage...&lt;/b&gt;&lt;p&gt;This button opens a dialog containing the collected code coverage data.&lt;/p&gt;</source>
       <translation>&lt;b&gt;Показать покрытие...&lt;/b&gt;&lt;p&gt;Эта кнопка открывает диалоговое окно, содержащее собранные данные о покрытии кода.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="130" />
+      <location filename="../Testing/TestingWidget.py" line="131" />
       <source>Start</source>
       <translation>Запустить</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="133" />
+      <location filename="../Testing/TestingWidget.py" line="134" />
       <source>Start the selected testsuite</source>
       <translation>Запустить выбранный набор тестов</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="135" />
+      <location filename="../Testing/TestingWidget.py" line="136" />
       <source>&lt;b&gt;Start Test&lt;/b&gt;&lt;p&gt;This button starts the test run.&lt;/p&gt;</source>
       <translation>&lt;b&gt;Запустить тест&lt;/b&gt;&lt;p&gt;Кнопка запуска выполнения теста.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="141" />
+      <location filename="../Testing/TestingWidget.py" line="142" />
       <source>Rerun Failed</source>
       <translation>Повторить неудачные</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="144" />
+      <location filename="../Testing/TestingWidget.py" line="145" />
       <source>Reruns failed tests of the selected testsuite</source>
       <translation>Повторить неудачные тесты выбранного набора тестов</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="147" />
+      <location filename="../Testing/TestingWidget.py" line="148" />
       <source>&lt;b&gt;Rerun Failed&lt;/b&gt;&lt;p&gt;This button reruns all failed tests of the most recent test run.&lt;/p&gt;</source>
       <translation>&lt;b&gt;Повторить неудачные&lt;/b&gt;&lt;p&gt;Повторно запускает все неудачные тесты самого последнего запуска теста.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="155" />
+      <location filename="../Testing/TestingWidget.py" line="156" />
       <source>Stop</source>
       <translation>Остановить</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="157" />
+      <location filename="../Testing/TestingWidget.py" line="158" />
       <source>Stop the running test</source>
       <translation>Остановить работающий тест</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="159" />
+      <location filename="../Testing/TestingWidget.py" line="160" />
       <source>&lt;b&gt;Stop Test&lt;/b&gt;&lt;p&gt;This button stops a running test.&lt;/p&gt;</source>
       <translation>&lt;b&gt;Остановить тест&lt;/b&gt;&lt;p&gt;Эта кнопка отстанавливает работающий тест.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="271" />
+      <location filename="../Testing/TestingWidget.py" line="274" />
       <source>{0} (not available)</source>
       <translation>{0} (недоступно)</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="566" />
+      <location filename="../Testing/TestingWidget.py" line="569" />
       <source>Running</source>
       <translation>Выполнение</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="622" />
+      <location filename="../Testing/TestingWidget.py" line="625" />
       <source>Python3 Files ({0});;All Files (*)</source>
       <translation>Файлы Python3 ({0});;Все файлы (*)</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="627" />
+      <location filename="../Testing/TestingWidget.py" line="630" />
       <source>Python Files (*.py);;All Files (*)</source>
       <translation>Файлы Python (*.py);;Все файлы (*)</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="712" />
+      <location filename="../Testing/TestingWidget.py" line="768" />
       <source>&lt;h3&gt;Versions of Frameworks and their Plugins&lt;/h3&gt;</source>
       <translation>&lt;h3&gt;Версии фреймворков и их плагинов&lt;/h3&gt;</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="726" />
+      <location filename="../Testing/TestingWidget.py" line="782" />
       <source>&lt;tr&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;</source>
       <translation>&lt;tr&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="735" />
+      <location filename="../Testing/TestingWidget.py" line="791" />
       <source>No version information available.</source>
       <translation>Информация о версии недоступна.</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="738" />
+      <location filename="../Testing/TestingWidget.py" line="794" />
       <source>Versions</source>
       <translation>Версии</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="775" />
+      <location filename="../Testing/TestingWidget.py" line="831" />
       <source>Preparing Testsuite</source>
       <translation>Подготовка набора тестов</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="838" />
+      <location filename="../Testing/TestingWidget.py" line="895" />
       <source>pending</source>
       <translation>ожидает</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="866" />
+      <location filename="../Testing/TestingWidget.py" line="923" />
       <source>Failure</source>
       <translation>Сбой</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="876" />
-      <location filename="../Testing/TestingWidget.py" line="869" />
+      <location filename="../Testing/TestingWidget.py" line="933" />
+      <location filename="../Testing/TestingWidget.py" line="926" />
       <source>Collection Error</source>
       <translation>Ошибка сборки</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="877" />
+      <location filename="../Testing/TestingWidget.py" line="934" />
       <source>&lt;p&gt;There was an error while collecting tests.&lt;/p&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
       <translation>&lt;p&gt;При сборке тестов произошла ошибка.&lt;/p&gt;&lt;p&gt;{0}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="898" />
+      <location filename="../Testing/TestingWidget.py" line="955" />
       <source>running</source>
       <translation>выполнение</translation>
     </message>
     <message numerus="yes">
-      <location filename="../Testing/TestingWidget.py" line="949" />
+      <location filename="../Testing/TestingWidget.py" line="1006" />
       <source>Ran %n test(s) in {0}s</source>
       <translation>
         <numerusform>Выполнен %n тест за {0} сек</numerusform>
@@ -79545,7 +79578,7 @@
       </translation>
     </message>
     <message numerus="yes">
-      <location filename="../Testing/TestingWidget.py" line="961" />
+      <location filename="../Testing/TestingWidget.py" line="1018" />
       <source>Ran %n test(s)</source>
       <translation>
         <numerusform>Выполнен %n тест</numerusform>
@@ -79554,12 +79587,12 @@
       </translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="982" />
+      <location filename="../Testing/TestingWidget.py" line="1039" />
       <source>not run</source>
       <translation>не выполнено</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="1027" />
+      <location filename="../Testing/TestingWidget.py" line="1084" />
       <source>Test Run Output</source>
       <translation>Выходные данные прогона теста</translation>
     </message>
--- a/src/eric7/i18n/eric7_tr.ts	Sun Sep 04 16:11:32 2022 +0200
+++ b/src/eric7/i18n/eric7_tr.ts	Mon Sep 05 18:08:43 2022 +0200
@@ -46843,6 +46843,24 @@
     </message>
   </context>
   <context>
+    <name>MarkersWindow</name>
+    <message>
+      <location filename="../Testing/MarkersWindow.ui" line="0" />
+      <source>Defined Markers</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/MarkersWindow.ui" line="0" />
+      <source>Marker</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/MarkersWindow.ui" line="0" />
+      <source>Description</source>
+      <translation type="unfinished">Açıklama</translation>
+    </message>
+  </context>
+  <context>
     <name>MasterPasswordEntryDialog</name>
     <message>
       <location filename="../Preferences/ConfigurationPages/MasterPasswordEntryDialog.py" line="36" />
@@ -61233,18 +61251,18 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/Interfaces/PytestExecutor.py" line="221" />
+      <location filename="../Testing/Interfaces/PytestExecutor.py" line="263" />
       <source>Error</source>
       <translation type="unfinished">Hata</translation>
     </message>
     <message>
-      <location filename="../Testing/Interfaces/PytestExecutor.py" line="230" />
+      <location filename="../Testing/Interfaces/PytestExecutor.py" line="272" />
       <source>ERROR at {0}: {1}</source>
       <comment>phase, message</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/Interfaces/PytestExecutor.py" line="233" />
+      <location filename="../Testing/Interfaces/PytestExecutor.py" line="275" />
       <source>ERROR at {0}: {1}</source>
       <comment>phase, extra text</comment>
       <translation type="unfinished" />
@@ -78699,7 +78717,7 @@
   <context>
     <name>TestingWidget</name>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="168" />
+      <location filename="../Testing/TestingWidget.py" line="169" />
       <location filename="../Testing/TestingWidget.ui" line="0" />
       <source>Testing</source>
       <translation type="unfinished" />
@@ -78808,6 +78826,21 @@
     </message>
     <message>
       <location filename="../Testing/TestingWidget.ui" line="0" />
+      <source>Marker Expression:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/TestingWidget.ui" line="0" />
+      <source>Enter a marker expression or name to filter tests</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/TestingWidget.ui" line="0" />
+      <source>Press to show a window with the list of defined markers</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/TestingWidget.ui" line="0" />
       <source>Run Parameters</source>
       <translation type="unfinished" />
     </message>
@@ -78883,172 +78916,172 @@
       <translation type="unfinished">Idle</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="102" />
+      <location filename="../Testing/TestingWidget.py" line="103" />
       <source>Show Output...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="105" />
+      <location filename="../Testing/TestingWidget.py" line="106" />
       <source>Show the output of the test runner process</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="108" />
+      <location filename="../Testing/TestingWidget.py" line="109" />
       <source>&lt;b&gt;Show Output...&lt;/b&lt;p&gt;This button opens a dialog containing the output of the test runner process of the most recent run.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="116" />
+      <location filename="../Testing/TestingWidget.py" line="117" />
       <source>Show Coverage...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="119" />
+      <location filename="../Testing/TestingWidget.py" line="120" />
       <source>Show code coverage in a new dialog</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="122" />
+      <location filename="../Testing/TestingWidget.py" line="123" />
       <source>&lt;b&gt;Show Coverage...&lt;/b&gt;&lt;p&gt;This button opens a dialog containing the collected code coverage data.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="130" />
+      <location filename="../Testing/TestingWidget.py" line="131" />
       <source>Start</source>
       <translation type="unfinished">Başla</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="133" />
+      <location filename="../Testing/TestingWidget.py" line="134" />
       <source>Start the selected testsuite</source>
       <translation type="unfinished">Seçilen test yöntemini başmat</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="135" />
+      <location filename="../Testing/TestingWidget.py" line="136" />
       <source>&lt;b&gt;Start Test&lt;/b&gt;&lt;p&gt;This button starts the test run.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="141" />
+      <location filename="../Testing/TestingWidget.py" line="142" />
       <source>Rerun Failed</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="144" />
+      <location filename="../Testing/TestingWidget.py" line="145" />
       <source>Reruns failed tests of the selected testsuite</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="147" />
+      <location filename="../Testing/TestingWidget.py" line="148" />
       <source>&lt;b&gt;Rerun Failed&lt;/b&gt;&lt;p&gt;This button reruns all failed tests of the most recent test run.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="155" />
+      <location filename="../Testing/TestingWidget.py" line="156" />
       <source>Stop</source>
       <translation type="unfinished">Dur</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="157" />
+      <location filename="../Testing/TestingWidget.py" line="158" />
       <source>Stop the running test</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="159" />
+      <location filename="../Testing/TestingWidget.py" line="160" />
       <source>&lt;b&gt;Stop Test&lt;/b&gt;&lt;p&gt;This button stops a running test.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="271" />
+      <location filename="../Testing/TestingWidget.py" line="274" />
       <source>{0} (not available)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="566" />
+      <location filename="../Testing/TestingWidget.py" line="569" />
       <source>Running</source>
       <translation type="unfinished">Çalışıyor</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="622" />
+      <location filename="../Testing/TestingWidget.py" line="625" />
       <source>Python3 Files ({0});;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="627" />
+      <location filename="../Testing/TestingWidget.py" line="630" />
       <source>Python Files (*.py);;All Files (*)</source>
       <translation type="unfinished">Python Dosyaları (*.py);;Tüm Dosyalar (*)</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="712" />
+      <location filename="../Testing/TestingWidget.py" line="768" />
       <source>&lt;h3&gt;Versions of Frameworks and their Plugins&lt;/h3&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="726" />
+      <location filename="../Testing/TestingWidget.py" line="782" />
       <source>&lt;tr&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="735" />
+      <location filename="../Testing/TestingWidget.py" line="791" />
       <source>No version information available.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="738" />
+      <location filename="../Testing/TestingWidget.py" line="794" />
       <source>Versions</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="775" />
+      <location filename="../Testing/TestingWidget.py" line="831" />
       <source>Preparing Testsuite</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="838" />
+      <location filename="../Testing/TestingWidget.py" line="895" />
       <source>pending</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="866" />
+      <location filename="../Testing/TestingWidget.py" line="923" />
       <source>Failure</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="876" />
-      <location filename="../Testing/TestingWidget.py" line="869" />
+      <location filename="../Testing/TestingWidget.py" line="933" />
+      <location filename="../Testing/TestingWidget.py" line="926" />
       <source>Collection Error</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="877" />
+      <location filename="../Testing/TestingWidget.py" line="934" />
       <source>&lt;p&gt;There was an error while collecting tests.&lt;/p&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="898" />
+      <location filename="../Testing/TestingWidget.py" line="955" />
       <source>running</source>
       <translation type="unfinished">çalışıyor</translation>
     </message>
     <message numerus="yes">
-      <location filename="../Testing/TestingWidget.py" line="949" />
+      <location filename="../Testing/TestingWidget.py" line="1006" />
       <source>Ran %n test(s) in {0}s</source>
       <translation type="unfinished">
         <numerusform />
       </translation>
     </message>
     <message numerus="yes">
-      <location filename="../Testing/TestingWidget.py" line="961" />
+      <location filename="../Testing/TestingWidget.py" line="1018" />
       <source>Ran %n test(s)</source>
       <translation type="unfinished">
         <numerusform />
       </translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="982" />
+      <location filename="../Testing/TestingWidget.py" line="1039" />
       <source>not run</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="1027" />
+      <location filename="../Testing/TestingWidget.py" line="1084" />
       <source>Test Run Output</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_zh_CN.ts	Sun Sep 04 16:11:32 2022 +0200
+++ b/src/eric7/i18n/eric7_zh_CN.ts	Mon Sep 05 18:08:43 2022 +0200
@@ -46840,6 +46840,24 @@
     </message>
   </context>
   <context>
+    <name>MarkersWindow</name>
+    <message>
+      <location filename="../Testing/MarkersWindow.ui" line="0" />
+      <source>Defined Markers</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/MarkersWindow.ui" line="0" />
+      <source>Marker</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/MarkersWindow.ui" line="0" />
+      <source>Description</source>
+      <translation type="unfinished">描述</translation>
+    </message>
+  </context>
+  <context>
     <name>MasterPasswordEntryDialog</name>
     <message>
       <location filename="../Preferences/ConfigurationPages/MasterPasswordEntryDialog.py" line="36" />
@@ -61284,18 +61302,18 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/Interfaces/PytestExecutor.py" line="221" />
+      <location filename="../Testing/Interfaces/PytestExecutor.py" line="263" />
       <source>Error</source>
       <translation type="unfinished">错误</translation>
     </message>
     <message>
-      <location filename="../Testing/Interfaces/PytestExecutor.py" line="230" />
+      <location filename="../Testing/Interfaces/PytestExecutor.py" line="272" />
       <source>ERROR at {0}: {1}</source>
       <comment>phase, message</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/Interfaces/PytestExecutor.py" line="233" />
+      <location filename="../Testing/Interfaces/PytestExecutor.py" line="275" />
       <source>ERROR at {0}: {1}</source>
       <comment>phase, extra text</comment>
       <translation type="unfinished" />
@@ -78837,7 +78855,7 @@
   <context>
     <name>TestingWidget</name>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="168" />
+      <location filename="../Testing/TestingWidget.py" line="169" />
       <location filename="../Testing/TestingWidget.ui" line="0" />
       <source>Testing</source>
       <translation type="unfinished" />
@@ -78946,6 +78964,21 @@
     </message>
     <message>
       <location filename="../Testing/TestingWidget.ui" line="0" />
+      <source>Marker Expression:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/TestingWidget.ui" line="0" />
+      <source>Enter a marker expression or name to filter tests</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/TestingWidget.ui" line="0" />
+      <source>Press to show a window with the list of defined markers</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Testing/TestingWidget.ui" line="0" />
       <source>Run Parameters</source>
       <translation type="unfinished" />
     </message>
@@ -79021,172 +79054,172 @@
       <translation type="unfinished">空闲</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="102" />
+      <location filename="../Testing/TestingWidget.py" line="103" />
       <source>Show Output...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="105" />
+      <location filename="../Testing/TestingWidget.py" line="106" />
       <source>Show the output of the test runner process</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="108" />
+      <location filename="../Testing/TestingWidget.py" line="109" />
       <source>&lt;b&gt;Show Output...&lt;/b&lt;p&gt;This button opens a dialog containing the output of the test runner process of the most recent run.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="116" />
+      <location filename="../Testing/TestingWidget.py" line="117" />
       <source>Show Coverage...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="119" />
+      <location filename="../Testing/TestingWidget.py" line="120" />
       <source>Show code coverage in a new dialog</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="122" />
+      <location filename="../Testing/TestingWidget.py" line="123" />
       <source>&lt;b&gt;Show Coverage...&lt;/b&gt;&lt;p&gt;This button opens a dialog containing the collected code coverage data.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="130" />
+      <location filename="../Testing/TestingWidget.py" line="131" />
       <source>Start</source>
       <translation type="unfinished">开始</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="133" />
+      <location filename="../Testing/TestingWidget.py" line="134" />
       <source>Start the selected testsuite</source>
       <translation type="unfinished">开启所选测试套件</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="135" />
+      <location filename="../Testing/TestingWidget.py" line="136" />
       <source>&lt;b&gt;Start Test&lt;/b&gt;&lt;p&gt;This button starts the test run.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="141" />
+      <location filename="../Testing/TestingWidget.py" line="142" />
       <source>Rerun Failed</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="144" />
+      <location filename="../Testing/TestingWidget.py" line="145" />
       <source>Reruns failed tests of the selected testsuite</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="147" />
+      <location filename="../Testing/TestingWidget.py" line="148" />
       <source>&lt;b&gt;Rerun Failed&lt;/b&gt;&lt;p&gt;This button reruns all failed tests of the most recent test run.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="155" />
+      <location filename="../Testing/TestingWidget.py" line="156" />
       <source>Stop</source>
       <translation type="unfinished">中止</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="157" />
+      <location filename="../Testing/TestingWidget.py" line="158" />
       <source>Stop the running test</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="159" />
+      <location filename="../Testing/TestingWidget.py" line="160" />
       <source>&lt;b&gt;Stop Test&lt;/b&gt;&lt;p&gt;This button stops a running test.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="271" />
+      <location filename="../Testing/TestingWidget.py" line="274" />
       <source>{0} (not available)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="566" />
+      <location filename="../Testing/TestingWidget.py" line="569" />
       <source>Running</source>
       <translation type="unfinished">正在运行</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="622" />
+      <location filename="../Testing/TestingWidget.py" line="625" />
       <source>Python3 Files ({0});;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="627" />
+      <location filename="../Testing/TestingWidget.py" line="630" />
       <source>Python Files (*.py);;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="712" />
+      <location filename="../Testing/TestingWidget.py" line="768" />
       <source>&lt;h3&gt;Versions of Frameworks and their Plugins&lt;/h3&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="726" />
+      <location filename="../Testing/TestingWidget.py" line="782" />
       <source>&lt;tr&gt;&lt;td&gt;{0}&lt;/td&gt;&lt;td&gt;{1}&lt;/td&gt;&lt;/tr&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="735" />
+      <location filename="../Testing/TestingWidget.py" line="791" />
       <source>No version information available.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="738" />
+      <location filename="../Testing/TestingWidget.py" line="794" />
       <source>Versions</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="775" />
+      <location filename="../Testing/TestingWidget.py" line="831" />
       <source>Preparing Testsuite</source>
       <translation type="unfinished">准备测试套件</translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="838" />
+      <location filename="../Testing/TestingWidget.py" line="895" />
       <source>pending</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="866" />
+      <location filename="../Testing/TestingWidget.py" line="923" />
       <source>Failure</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="876" />
-      <location filename="../Testing/TestingWidget.py" line="869" />
+      <location filename="../Testing/TestingWidget.py" line="933" />
+      <location filename="../Testing/TestingWidget.py" line="926" />
       <source>Collection Error</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="877" />
+      <location filename="../Testing/TestingWidget.py" line="934" />
       <source>&lt;p&gt;There was an error while collecting tests.&lt;/p&gt;&lt;p&gt;{0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="898" />
+      <location filename="../Testing/TestingWidget.py" line="955" />
       <source>running</source>
       <translation type="unfinished">运行中</translation>
     </message>
     <message numerus="yes">
-      <location filename="../Testing/TestingWidget.py" line="949" />
+      <location filename="../Testing/TestingWidget.py" line="1006" />
       <source>Ran %n test(s) in {0}s</source>
       <translation type="unfinished">
         <numerusform />
       </translation>
     </message>
     <message numerus="yes">
-      <location filename="../Testing/TestingWidget.py" line="961" />
+      <location filename="../Testing/TestingWidget.py" line="1018" />
       <source>Ran %n test(s)</source>
       <translation type="unfinished">
         <numerusform />
       </translation>
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="982" />
+      <location filename="../Testing/TestingWidget.py" line="1039" />
       <source>not run</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Testing/TestingWidget.py" line="1027" />
+      <location filename="../Testing/TestingWidget.py" line="1084" />
       <source>Test Run Output</source>
       <translation type="unfinished" />
     </message>

eric ide

mercurial