forked from qt-creator/qt-creator
AutoTest: Disable timeout by default
Usually test frameworks or tools have their own timeout handling or not at all. Let the user decide whether to use a timeout or not. This is a behavior change as now the test run does not get automatically canceled anymore except when the user explicitly enables this feature. Fixes: QTCREATORBUG-30668 Change-Id: Ic5d98db0c52bfea092e427d317b12c41d6484ad0 Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io> Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -359,10 +359,6 @@
|
|||||||
found by the code based test frameworks and are registered as test
|
found by the code based test frameworks and are registered as test
|
||||||
with the build system.
|
with the build system.
|
||||||
|
|
||||||
If a test takes more than a minute to execute, the default timeout might
|
|
||||||
stop the test execution. To increase the timeout, go to \preferences >
|
|
||||||
\uicontrol {Testing} > \uicontrol General.
|
|
||||||
|
|
||||||
\section1 Select tests to run
|
\section1 Select tests to run
|
||||||
|
|
||||||
The \uicontrol Tests view shows all the tests found for the currently active
|
The \uicontrol Tests view shows all the tests found for the currently active
|
||||||
@@ -501,7 +497,7 @@
|
|||||||
the current project.
|
the current project.
|
||||||
\row
|
\row
|
||||||
\li \uicontrol {Timeout}
|
\li \uicontrol {Timeout}
|
||||||
\li The maximum time in seconds to execute a test case.
|
\li Set a maximum time in seconds to execute a test case.
|
||||||
\row
|
\row
|
||||||
\li \uicontrol {Reset Cached Choices}
|
\li \uicontrol {Reset Cached Choices}
|
||||||
\li Sometimes, \QC cannot deduce which executable or run configuration to
|
\li Sometimes, \QC cannot deduce which executable or run configuration to
|
||||||
|
|||||||
@@ -87,7 +87,11 @@ QList<ITestConfiguration *> CTestTreeItem::testConfigurationsFor(const QStringLi
|
|||||||
return {};
|
return {};
|
||||||
|
|
||||||
const ProjectExplorer::BuildSystem *buildSystem = target->buildSystem();
|
const ProjectExplorer::BuildSystem *buildSystem = target->buildSystem();
|
||||||
QStringList options{"--timeout", QString::number(testSettings().timeout() / 1000)};
|
QStringList options;
|
||||||
|
if (testSettings().useTimeout()) {
|
||||||
|
options << "--timeout"
|
||||||
|
<< QString::number(testSettings().timeout() / 1000);
|
||||||
|
}
|
||||||
options << theCTestTool().activeSettingsAsOptions();
|
options << theCTestTool().activeSettingsAsOptions();
|
||||||
CommandLine command = buildSystem->commandLineForTests(selected, options);
|
CommandLine command = buildSystem->commandLineForTests(selected, options);
|
||||||
if (command.executable().isEmpty())
|
if (command.executable().isEmpty())
|
||||||
|
|||||||
@@ -137,9 +137,11 @@ Environment prepareBasicEnvironment(const Environment &env)
|
|||||||
result.set("QT_FORCE_STDERR_LOGGING", "1");
|
result.set("QT_FORCE_STDERR_LOGGING", "1");
|
||||||
result.set("QT_LOGGING_TO_CONSOLE", "1");
|
result.set("QT_LOGGING_TO_CONSOLE", "1");
|
||||||
}
|
}
|
||||||
|
if (testSettings().useTimeout()) {
|
||||||
const int timeout = testSettings().timeout();
|
const int timeout = testSettings().timeout();
|
||||||
if (timeout > 5 * 60 * 1000) // Qt5.5 introduced hard limit, Qt5.6.1 added env var to raise this
|
if (timeout > 5 * 60 * 1000) // Qt5.5 introduced hard limit, Qt5.6.1 added env var to raise this
|
||||||
result.set("QTEST_FUNCTION_TIMEOUT", QString::number(timeout));
|
result.set("QTEST_FUNCTION_TIMEOUT", QString::number(timeout));
|
||||||
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -412,8 +412,10 @@ void TestRunner::runTestsHelper()
|
|||||||
}
|
}
|
||||||
process.setEnvironment(environment);
|
process.setEnvironment(environment);
|
||||||
|
|
||||||
|
if (testSettings().useTimeout()) {
|
||||||
m_cancelTimer.setInterval(testSettings().timeout());
|
m_cancelTimer.setInterval(testSettings().timeout());
|
||||||
m_cancelTimer.start();
|
m_cancelTimer.start();
|
||||||
|
}
|
||||||
|
|
||||||
qCInfo(runnerLog) << "Command:" << process.commandLine().executable();
|
qCInfo(runnerLog) << "Command:" << process.commandLine().executable();
|
||||||
qCInfo(runnerLog) << "Arguments:" << process.commandLine().arguments();
|
qCInfo(runnerLog) << "Arguments:" << process.commandLine().arguments();
|
||||||
|
|||||||
@@ -33,13 +33,19 @@ TestSettings::TestSettings()
|
|||||||
scanThreadLimit.setSpecialValueText("Automatic");
|
scanThreadLimit.setSpecialValueText("Automatic");
|
||||||
scanThreadLimit.setToolTip(Tr::tr("Number of worker threads used when scanning for tests."));
|
scanThreadLimit.setToolTip(Tr::tr("Number of worker threads used when scanning for tests."));
|
||||||
|
|
||||||
|
useTimeout.setSettingsKey("UseTimeout");
|
||||||
|
useTimeout.setDefaultValue(false);
|
||||||
|
useTimeout.setLabelText(Tr::tr("Timeout"));
|
||||||
|
useTimeout.setToolTip(Tr::tr("Use a timeout while executing test cases."));
|
||||||
|
|
||||||
timeout.setSettingsKey("Timeout");
|
timeout.setSettingsKey("Timeout");
|
||||||
timeout.setDefaultValue(defaultTimeout);
|
timeout.setDefaultValue(defaultTimeout);
|
||||||
timeout.setRange(5000, 36'000'000); // 36 Mio ms = 36'000 s = 10 h
|
timeout.setRange(5000, 36'000'000); // 36 Mio ms = 36'000 s = 10 h
|
||||||
timeout.setSuffix(Tr::tr(" s")); // we show seconds, but store milliseconds
|
timeout.setSuffix(Tr::tr(" s")); // we show seconds, but store milliseconds
|
||||||
timeout.setDisplayScaleFactor(1000);
|
timeout.setDisplayScaleFactor(1000);
|
||||||
timeout.setToolTip(Tr::tr("Timeout used when executing test cases. This will apply "
|
timeout.setToolTip(Tr::tr("Timeout used when executing test cases. This will apply "
|
||||||
"for each test case on its own, not the whole project."));
|
"for each test case on its own, not the whole project. "
|
||||||
|
"Overrides test framework or build system defaults."));
|
||||||
|
|
||||||
omitInternalMsg.setSettingsKey("OmitInternal");
|
omitInternalMsg.setSettingsKey("OmitInternal");
|
||||||
omitInternalMsg.setDefaultValue(true);
|
omitInternalMsg.setDefaultValue(true);
|
||||||
@@ -106,6 +112,7 @@ TestSettings::TestSettings()
|
|||||||
|
|
||||||
fromSettings();
|
fromSettings();
|
||||||
|
|
||||||
|
timeout.setEnabler(&useTimeout);
|
||||||
resultDescriptionMaxSize.setEnabler(&limitResultDescription);
|
resultDescriptionMaxSize.setEnabler(&limitResultDescription);
|
||||||
popupOnFail.setEnabler(&popupOnFinish);
|
popupOnFail.setEnabler(&popupOnFinish);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ public:
|
|||||||
void fromSettings();
|
void fromSettings();
|
||||||
|
|
||||||
Utils::IntegerAspect scanThreadLimit{this};
|
Utils::IntegerAspect scanThreadLimit{this};
|
||||||
|
Utils::BoolAspect useTimeout{this};
|
||||||
Utils::IntegerAspect timeout{this};
|
Utils::IntegerAspect timeout{this};
|
||||||
Utils::BoolAspect omitInternalMsg{this};
|
Utils::BoolAspect omitInternalMsg{this};
|
||||||
Utils::BoolAspect omitRunConfigWarn{this};
|
Utils::BoolAspect omitRunConfigWarn{this};
|
||||||
|
|||||||
@@ -50,8 +50,6 @@ private:
|
|||||||
|
|
||||||
TestSettingsWidget::TestSettingsWidget()
|
TestSettingsWidget::TestSettingsWidget()
|
||||||
{
|
{
|
||||||
auto timeoutLabel = new QLabel(Tr::tr("Timeout:"));
|
|
||||||
timeoutLabel->setToolTip(Tr::tr("Timeout used when executing each test case."));
|
|
||||||
auto scanThreadLabel = new QLabel(Tr::tr("Scan threads:"));
|
auto scanThreadLabel = new QLabel(Tr::tr("Scan threads:"));
|
||||||
scanThreadLabel->setToolTip("Number of worker threads used when scanning for tests.");
|
scanThreadLabel->setToolTip("Number of worker threads used when scanning for tests.");
|
||||||
|
|
||||||
@@ -98,7 +96,7 @@ TestSettingsWidget::TestSettingsWidget()
|
|||||||
s.displayApplication,
|
s.displayApplication,
|
||||||
s.processArgs,
|
s.processArgs,
|
||||||
Row { Tr::tr("Automatically run"), s.runAfterBuild, st },
|
Row { Tr::tr("Automatically run"), s.runAfterBuild, st },
|
||||||
Row { timeoutLabel, s.timeout, st },
|
Row { s.useTimeout, s.timeout, st },
|
||||||
Row { resetChoicesButton, st }
|
Row { resetChoicesButton, st }
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user