Thanks & Regards,@future(callout = true)
public static void getResultTestRun() {
Integer intTotalPercentageCovered = 0;
String objectIdQuery = 'SELECT PercentCovered FROM ApexOrgWideCoverage';
String environmentURL = URL.getSalesforceBaseUrl().toExternalForm() + '/services/data/v37.0/tooling/query/?q=' + EncodingUtil.urlEncode(objectIdQuery, 'UTF-8');
String username = 'shasahu@hcl.com';
String password = 'Myhcl12⌗';
partnerSoapSforceCom.Soap sp = new partnerSoapSforceCom.Soap();
partnerSoapSforceCom.LoginResult loginResult = sp.login(username, password);
//sessionId = loginResult.sessionId;
//system.debug('sessionId: '+sessionId);
HttpRequest req = new HttpRequest();
req.setHeader('Authorization', 'Bearer ' + loginResult.sessionId);
req.setHeader('Content-Type', 'application/json');
req.setEndpoint(environmentURL);
req.setMethod('GET');
Http h = new Http();
HttpResponse res = h.send(req);
system.debug('==1==' + res.getBody());
for(JSON2Apex2.Records objRec : JSON2Apex2.parse(res.getBody()).records) {
System.debug(objRec.PercentCovered );
if(objRec.PercentCovered != null)
intTotalPercentageCovered = objRec.PercentCovered;
else
intTotalPercentageCovered = 0;
}
List<ApexTestResult> lstART = [select ApexClassId , MethodName , Id, ApexClass.Name ,Outcome, Message from ApexTestResult];
string header = 'Class Name, MethodName, Message \n';
string finalstr = header ;
for(ApexTestResult a: lstART) {
if(a.Outcome != 'Pass') {
string recordString = a.ApexClass.Name+','+a.MethodName+','+a.Message.normalizeSpace()+'\n';
finalstr = finalstr +recordString;
}
}
// Callout ⌗2
HttpRequest req2 = new HttpRequest();
req2.setHeader('Authorization', 'Bearer ' + loginResult.sessionId);
req2.setHeader('Content-Type', 'application/json');
req2.setEndpoint(URL.getSalesforceBaseURL().toExternalForm()+'/services/data/v33.0/tooling/query/?q=Select+id,ApexClassorTrigger.Name,NumLinesCovered,NumLinesUncovered+from+ApexCodeCoverageAggregate');
req2.setMethod('GET');
Http h2 = new Http();
HttpResponse res2 = h2.send(req2);
System.debug('response: '+res2.getBody());
Map<String, Integer > clsVsCov = new Map<String, Integer>();
Integer totalCovered = 0;
Integer totalUnCovered = 0;
for(JSON2Apex.Records objRec : JSON2Apex.parse(res2.getBody()).records) {
System.debug(objRec.ApexClassOrTrigger.Name);
System.debug(objRec.ApexClassOrTrigger.attributes);
if(objRec.NumLinesCovered != null && objRec.NumLinesUncovered != null) {
System.debug('AAAA: '+objRec.NumLinesCovered + objRec.NumLinesUncovered );
if(objRec.NumLinesCovered + objRec.NumLinesUncovered != 0 ) {
totalCovered = totalCovered+objRec.NumLinesCovered;
totalUnCovered = totalUnCovered+objRec.NumLinesUncovered;
Double totalNOLines = objRec.NumLinesCovered + objRec.NumLinesUncovered;
System.debug('Total Number of Lines: '+totalNOLines);
System.debug('objRec.NumLinesCovered: '+objRec.NumLinesCovered);
Double coveredPercent = (objRec.NumLinesCovered/totalNOLines)*100;
System.debug('coveredPercent: '+coveredPercent);
clsVsCov.put(objRec.ApexClassOrTrigger.Name , integer.valueOf(Math.round(coveredPercent)));
}
else
clsVsCov.put(objRec.ApexClassOrTrigger.Name , 0);
}
}
Integer totalCovered2 = 0;
Integer totalClass = 0;
String header1 = 'Classe Name , Percentage Covered \n';
String finalstr1 = header1 ;
for(String strKey : clsVsCov.keySet()) {
string recordString = strKey+','+clsVsCov.get(strKey)+'\n';
finalstr1 = finalstr1 +recordString;
}
Messaging.EmailFileAttachment csvAttc = new Messaging.EmailFileAttachment();
blob csvBlob = Blob.valueOf(finalstr);
string csvname= 'Failed Classes Status.csv';
csvAttc.setFileName(csvname);
csvAttc.setBody(csvBlob);
Messaging.EmailFileAttachment csvAttc1 = new Messaging.EmailFileAttachment();
blob csvBlob1 = Blob.valueOf(finalstr1);
string csvname1= 'Pass Classes Status.csv';
csvAttc1.setFileName(csvname1);
csvAttc1.setBody(csvBlob1);
List<Run_Test__c> RunTestCS = Run_Test__c.getall().values();
System.debug(RunTestCS[0].Org_Name__c);
String orgName = RunTestCS[0].Org_Name__c;
String email = RunTestCS[0].Recipient__c;
Messaging.SingleEmailMessage email1 =new Messaging.SingleEmailMessage();
String[] toAddresses1 = new list<string> {email};
String subject1 ='Code Coverage Result : ' + Datetime.now().format('dd MMMM YYYY');
email1.setSubject(subject1);
email1.setToAddresses(toAddresses1);
//email1.setPlainTextBody('Total Percentage covered of org is : ' + intTotalPercentageCovered);
String messageBody='<html><body><p>Hi All, <br><br> As of today, overall code coverage of '+orgName+' Org is Below </p><table border=1 cellpadding=10 style=border-collapse:collapse; > <tr> <th>SL No.</th> <th>Instance</th> <th>Code Coverage in %</th> </tr> <tr> <td align=center>1</td> <td align=center>'+orgName+'</td> <td align=center>'+ intTotalPercentageCovered +'</td> </tr></table> <p> Thanks & Best Regards,<br>HCL Managed Service Team </p></body></html>';
email1.setHtmlBody(messageBody);
email1.setFileAttachments(new Messaging.EmailFileAttachment[]{csvAttc, csvAttc1});
Messaging.SendEmailResult [] r1 = Messaging.sendEmail(new Messaging.SingleEmailMessage[] {email1});
//Below code addere to remover the test checker job
List<CronTrigger> crt = [SELECT id FROM CronTrigger where CronJobDetail.Name like '%Test Run Job Checker%'];
if(crt.size()>0){
for(CronTrigger cr:crt){
System.abortJob(cr.id);
}
}
}
Javwad Azeem
Hi Azeem,Please check once below URL : http://salesforceprasad.blogspot.sg/2017/05/test-class-for-xml-dom-parser-and.htmlThanksVaraprasad