Send test result via e-mail in subject
SOLVED- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Send test result via e-mail in subject
I need to run my test project in TestComplete10 every night, and I need to be able to send result (Succeded/Error(s) occurred) as a part of a email subject.
I run the test project through command line (or I should say batch files) and I also use command line to send emails. First I thought that I always send the .mht file as an attachment, but it is to large even after compression, so I cannot use this solution. I read some other threads about this and everybody solves this using TestCompletes SendMail method. So I just wonder if there is some way to get the result from commandline.
Thanks!
Miriam
Solved! Go to Solution.
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
http://support.smartbear.com/viewarticle/56306
Marsha_R
[Community Hero]
____
[Community Heroes] are not employed by SmartBear Software but
are just volunteers who have some experience with the tools by SmartBear Software
and a desire to help others. Posts made by [Community Heroes]
may differ from the official policies of SmartBear Software and should be treated
as the own private opinion of their authors and under no circumstances as an
official answer from SmartBear Software.
The [Community Hero] signature is used with permission by SmartBear Software.
https://community.smartbear.com/t5/custom/page/page-id/hall-of-fame
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
If you do have this issue then try sending a summary of test results via email and writing the .mht log file to somewhere such as the testing machine or a network drive.
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Maybe sending just some summary in the body of e-mail will suffice, but that I don't know how to get. Is there any way to get the summary from TestComplete and then sending it in email? No matter if it's using the SendMail method in TestComplete or using command line.
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I use a script unit function to do this.
What language are you scripting in? I use VBScript and a CDO object to generate mail. Details here: http://www.paulsadowski.com/wsh/cdo.htm
It's pretty simple to set up. I just pass the relevant info to go into the email (who to send to, subject, text, attachment locations etc) into my function and it does the rest.
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I use JScript. I guess I am able to write function for sending e-mail using the CDO or at least rewrite it from VB. But what do you mean by writing your own build files?
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
function sendResults(message) {
var emailRecipients = "firstperson@yoursite.com,secondperson@yoursite.com";
SendMail(emailRecipients, "yoursmtp.yoursite.com", "QA", "", "Test Results", message);
}
Write an additional script that generates your message to pass to the function.
The way I generate a message is to use project suite variables to keep count of the passing and failing tests and then insert these metrics into the email message. I also write the .mht file to a network drive location and include a URL in the message body that links to the log file location on the network drive.
There is a Jscript example for CDO in TC documentation: http://support.smartbear.com/viewarticle/56308/#CDO
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
can you please tell me how you get the count of failed/passed test items? And the example of how to upload the mht file to some location and how to generate the URL would be also usefull 🙂
Thanks!
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
All my stuff runs within a framework built using script extensions. I have three layers of detail in the output (2 levels of results - high and low level - and a layer of logging) from any given test and how much of it, where it gets stored, and who gets e-mailed, is all controlled by switches in the tests.
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
we had a similar requirement and here's how we tackled this:
1. Create a global variable (e.g. "strTestResult") that would hold the global test result. This is what will appear in your eMail subject later
2. Override GeneralEvent_OnStopTest and add sth. like this
/*
Function: GeneralEvents_OnStopTest()
This method assigns global test result (FAILED, WARNING, OK) to test project according to single test results.
Bubbles up to higher severity level, i.e. if WARNING is recorded in any of test cases and no FAILED recorded anywhere,
global test outcome is WARNING. If FAILED is recorded in any test case, global result will be FAILED.
*/
function GeneralEvents_OnStopTest(Sender)
{
if (Log.ErrCount > 0)
strTestResult = "FAILED";
else if (Log.WrnCount > 0 && Log.ErrCount == 0)
strTestResult = strTestResult != "FAILED" ? "WARNING" : "FAILED";
else
strTestResult = strTestResult != "FAILED" ?
(strTestResult != "WARNING" ? "OK" : "WARNING") : "FAILED";
}
3. Export the test results from TestComplete to a temprary file after the run and then parse it for desired attributes.
We have following method to do this, the output will be a small HTML table with a quick summary
function GetTestSummary()
{
var tempFolder = "C:\\temp\\" + GetTickCount() + "\\";
if (0 != aqFileSystem.CreateFolder(tempFolder))
{
Log.Error("The " + tempFolder + " temp folder was not created");
return "";
}
Log.SaveResultsAs(tempFolder, lsXML);
var xDoc = Sys.OleObject("MSXML2.DOMDocument.4.0");
xDoc.load(tempFolder + "Description.tcLog");
// Warning count
var wrnC = VarToInteger(xDoc.selectSingleNode('Nodes/Node[@name="root"]/Prp[@name="warning count"]/@value').text);
//Error count
var errC = VarToInteger(xDoc.selectSingleNode('Nodes/Node[@name="root"]/Prp[@name="error count"]/@value').text);
//Execution time
var startTime = parseFloat(xDoc.selectSingleNode('Nodes/Node[@name="root"]/Prp[@name="start time"]/@value').text);
var stopTime = parseFloat(xDoc.selectSingleNode('Nodes/Node[@name="root"]/Prp[@name="stop time"]/@value').text);
aqFileSystem.DeleteFolder(tempFolder, true);
var cellStyle = "style=\"padding-left:5px; padding-right:5px";
var errCntCellBg = "; background-color:" + (errC > 0 ? "#FF704D\"" : "#ACD630\"");
var wrnCntCellBg = "; background-color:" + (wrnC > 0 ? "#FFFF75\"" : "#ACD630\"");
var res = "<table border =\"1\">" +
"<tr><td " + cellStyle + "\">Errors: </td><td " + cellStyle + errCntCellBg + "\">" + errC + "</td></tr>" +
"<tr><td " + cellStyle + "\">Warnings: </td><td " + cellStyle + wrnCntCellBg + "\">" + wrnC + "</td></tr>" +
"<tr><td " + cellStyle + "\">Start Time: </td><td " + cellStyle + "\">" + aqConvert.DateTimeToStr(startTime) + "</td></tr>" +
"<tr><td " + cellStyle + "\">Stop Time: </td><td " + cellStyle + "\">" + aqConvert.DateTimeToStr(stopTime) + "</td></tr>" +
"<tr><td " + cellStyle + "\">Run Time: </td><td " + cellStyle + "\">" + aqConvert.DateTimeToFormatStr(stopTime - startTime, "%H:%M:%S") + "</td></tr>" +
"</table>";
return res;
}
4. Then call the method above and save the HTML output to a variable (see "strTestSummary"). Also save the .mht file to a directory of your choice on the server and store the path in the variable -> this will be the link to the file in the automatic eMail sent later (see below):
function SaveAndEmailTestResults()
{
var FileName, NowValue, strNowValue, strTestSummary;
strTestSummary = GetTestSummary();
// Obtain the current date and time
NowValue=aqDateTime.Now();
// Convert the returned date/time value to string value
strNowValue = aqConvert.DateTimeToFormatStr(NowValue, "%Y%m%d%H%M%S");
FileName = strLogFilePath + "\\" + strNowValue + ".mht";
Log.SaveResultsAs(FileName, 2);
//Send eMail
SendCDOEmail(strTestResult, strTestSummary, strAppVersionInfo, FileName);
//re-initialize global test result flag
strTestResult="";
}
5. Invoke automatic sending of eMail (see "SendCDOEmail" call above). Make sure to supply the correct input parameters (SMTP credentials etc.) :
function SendCDOEmail(testResult,resultSummary, versionInfo, file)
{
var i, schema, mConfig, mMessage, mSubject, mBody;
var strTestServerIP = "\\\\10.20.30.40";
var strFileLink = aqString.Replace(file,"C:",strTestServerIP);
mBody="Application " + versionInfo + "<br><br>" + resultSummary + "<br>Log file: <a href =\"" + strFileLink + "\">" + strFileLink + "</a>";
mSubject= "Automated test notification: " + testResult;
try
{
schema = "http://schemas.microsoft.com/cdo/configuration/";
mConfig = Sys.OleObject("CDO.Configuration");
mConfig.Fields.Item(schema + "sendusing") = 2; // cdoSendUsingPort
mConfig.Fields.Item(schema + "smtpserver") = strLogSMTPServer; // SMTP server
mConfig.Fields.Item(schema + "smtpserverport") = 25; // Port number
mConfig.Fields.Item(schema + "MailboxURL")= strLogMailBoxUrl;
//mConfig.Fields.Item(schema + "sendusername") = "user"; // User name (if needed)
//mConfig.Fields.Item(schema + "sendpassword") = "pwd"; // User password (if needed)
mConfig.Fields.Update();
mMessage = Sys.OleObject("CDO.Message");
mMessage.MimeFormatted = true;
mMessage.Configuration = mConfig;
mMessage.From = strLogSenderName;
mMessage.To = strLogRecipientAddress;
mMessage.Subject = mSubject;
mMessage.HTMLBody = mBody;
mMessage.Send();
}
catch (exception)
{
Log.Error("E-mail cannot be sent", exception.description);
return false;
}
Log.Message("Message to <" + strLogRecipientAddress + "> was successfully sent");
return true;
}
Hope this helps to point you to the right direction.
Marin
