/// <summary>
/// runs the given test and returns resutls
/// </summary>
/// <param name="testPath"></param>
/// <param name="errorReason"></param>
/// <param name="runCanclled"></param>
/// <returns></returns>
public TestRunResults RunTest(TestInfo testinf, ref string errorReason, RunCancelledDelegate runCanclled)
{
var testPath = testinf.TestPath;
TestRunResults runDesc = new TestRunResults();
ConsoleWriter.ActiveTestRun = runDesc;
ConsoleWriter.WriteLine(DateTime.Now.ToString(Launcher.DateFormat) + " Running: " + testPath);
runDesc.ReportLocation = testPath;
runDesc.TestPath = testPath;
runDesc.TestState = TestState.Unknown;
_runCancelled = runCanclled;
if (!Helper.IsQtpInstalled())
{
runDesc.TestState = TestState.Error;
runDesc.ErrorDesc = string.Format(Resources.GeneralQtpNotInstalled, System.Environment.MachineName);
ConsoleWriter.WriteErrLine(runDesc.ErrorDesc);
Environment.ExitCode = (int)Launcher.ExitCodeEnum.Failed;
return(runDesc);
}
string reason = string.Empty;
if (!Helper.CanUftProcessStart(out reason))
{
runDesc.TestState = TestState.Error;
runDesc.ErrorDesc = reason;
ConsoleWriter.WriteErrLine(runDesc.ErrorDesc);
Environment.ExitCode = (int)Launcher.ExitCodeEnum.Failed;
return(runDesc);
}
try
{
ChangeDCOMSettingToInteractiveUser();
var type = Type.GetTypeFromProgID("Quicktest.Application");
lock (_lockObject)
{
_qtpApplication = Activator.CreateInstance(type) as Application;
Version qtpVersion = Version.Parse(_qtpApplication.Version);
if (qtpVersion.Equals(new Version(11, 0)))
{
runDesc.ReportLocation = Path.Combine(testPath, "Report");
if (Directory.Exists(runDesc.ReportLocation))
{
Directory.Delete(runDesc.ReportLocation, true);
Directory.CreateDirectory(runDesc.ReportLocation);
}
}
// Check for required Addins
LoadNeededAddins(testPath);
if (!_qtpApplication.Launched)
{
if (_runCancelled())
{
QTPTestCleanup();
KillQtp();
runDesc.TestState = TestState.Error;
return(runDesc);
}
// Launch application after set Addins
_qtpApplication.Launch();
_qtpApplication.Visible = false;
}
}
}
catch (Exception e)
{
errorReason = Resources.QtpNotLaunchedError;
runDesc.TestState = TestState.Error;
runDesc.ReportLocation = "";
runDesc.ErrorDesc = e.Message;
return(runDesc);
}
if (_qtpApplication.Test != null && _qtpApplication.Test.Modified)
{
var message = Resources.QtpNotLaunchedError;
errorReason = message;
runDesc.TestState = TestState.Error;
runDesc.ErrorDesc = errorReason;
return(runDesc);
}
_qtpApplication.UseLicenseOfType(_useUFTLicense
? tagUnifiedLicenseType.qtUnifiedFunctionalTesting
: tagUnifiedLicenseType.qtNonUnified);
if (!HandleInputParameters(testPath, ref errorReason, testinf.GetParameterDictionaryForQTP()))
{
runDesc.TestState = TestState.Error;
runDesc.ErrorDesc = errorReason;
return(runDesc);
}
GuiTestRunResult guiTestRunResult = ExecuteQTPRun(runDesc);
runDesc.ReportLocation = guiTestRunResult.ReportPath;
if (!guiTestRunResult.IsSuccess)
{
runDesc.TestState = TestState.Error;
return(runDesc);
}
if (!HandleOutputArguments(ref errorReason))
{
runDesc.TestState = TestState.Error;
runDesc.ErrorDesc = errorReason;
return(runDesc);
}
QTPTestCleanup();
return(runDesc);
}