Last active
September 23, 2022 10:02
-
-
Save Sunil02kumar/4d855dd715181cab30f929d6ab9522cb to your computer and use it in GitHub Desktop.
Way to export Code Coverage of Individual ApexClass or Trigger in .csv format
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class apexCodeCoverageWrapper { | |
public Integer size {get;set;} | |
public Integer totalSize {get;set;} | |
public Boolean done {get;set;} | |
public String entityTypeName {get;set;} | |
public List<Records> records {get;set;} | |
} | |
public class Records { | |
public String ApexTestClassId {get;set;} | |
public String ApexClassOrTriggerId {get;set;} | |
public Integer NumLinesCovered {get;set;} | |
public Integer NumLinesUncovered {get;set;} | |
} | |
HttpRequest req = new HttpRequest(); | |
req.setHeader('Authorization', 'Bearer ' + UserInfo.getSessionID()); | |
req.setHeader('Content-Type', 'application/json'); | |
String domainUrl=URL.getSalesforceBaseUrl().toExternalForm(); | |
system.debug('********domainUrl:'+domainUrl); | |
req.setEndpoint(domainUrl+'/services/data/v43.0/tooling/query/?q=SELECT+ApexClassorTriggerId,+ApexTestClassId,+NumLinesCovered,NumLinesUncovered+FROM+ApexCodeCoverage'); | |
req.settimeout(12000); | |
req.setMethod('GET'); | |
Http h = new Http(); | |
HttpResponse res = h.send(req); | |
string resBody = res.getBody(); | |
system.debug(res.getBody()); | |
apexCodeCoverageWrapper JSONDetails=(apexCodeCoverageWrapper) System.JSON.deserialize(resBody, apexCodeCoverageWrapper.class); | |
system.debug('*********JSONDetails.records size='+JSONDetails.records.size()); | |
system.debug('*********JSONDetails.records size='+JSONDetails.records[0]); | |
Map<Id,String> apexClassIdNameMap = new Map<Id,String>(); | |
Map<Id,String> apexTriggerIdNameMap = new Map<Id,String>(); | |
for(ApexClass ap:[select id,name from apexclass]){ | |
apexClassIdNameMap.put(ap.id,ap.name); | |
} | |
for(ApexTrigger at:[select id,Name from ApexTrigger]){ | |
apexTriggerIdNameMap.put(at.id,at.Name); | |
} | |
string header = 'Name , Id, ClassOrTrigger,ApexTestClassId,ApexTestClassName,NumLinesCovered, NumLinesUncovered,Code Coverage \n'; | |
string finalstr = header ; | |
for(Records rec: JSONDetails.records){ | |
string recordString=''; | |
decimal covPerc; | |
decimal totalLines = rec.NumLinesCovered+rec.NumLinesUncovered; | |
if(totalLines >0){ | |
covPerc = ((rec.NumLinesCovered)/(totalLines))*100; | |
}else{ | |
covPerc = 0; | |
} | |
if(apexClassIdNameMap.get(rec.ApexClassOrTriggerId)!=null){ | |
recordString = apexClassIdNameMap.get(rec.ApexClassOrTriggerId)+','+rec.ApexClassOrTriggerId+',ApexClass,'+rec.ApexTestClassId+','+apexClassIdNameMap.get(rec.ApexTestClassId)+','+rec.NumLinesCovered+','+rec.NumLinesUncovered+','+covPerc+'\n'; | |
}else if(apexTriggerIdNameMap.get(rec.ApexClassOrTriggerId)!=null){ | |
recordString = apexTriggerIdNameMap.get(rec.ApexClassOrTriggerId)+','+rec.ApexClassOrTriggerId+',ApexTrigger,'+rec.ApexTestClassId+','+apexClassIdNameMap.get(rec.ApexTestClassId)+','+rec.NumLinesUncovered+','+covPerc+'\n'; | |
} | |
finalstr = finalstr +recordString; | |
} | |
Messaging.EmailFileAttachment csvAttc = new Messaging.EmailFileAttachment(); | |
blob csvBlob = Blob.valueOf(finalstr); | |
string csvname= 'ApexCodeCoverage report.csv'; | |
csvAttc.setFileName(csvname); | |
csvAttc.setBody(csvBlob); | |
Messaging.SingleEmailMessage email =new Messaging.SingleEmailMessage(); | |
String[] toAddresses = new list<string> {UserInfo.getUserEmail()}; | |
String subject ='Apex Code Coverage Report'; | |
email.setSubject(subject); | |
email.setToAddresses( toAddresses ); | |
email.setPlainTextBody(subject); | |
email.setFileAttachments(new Messaging.EmailFileAttachment[]{csvAttc}); | |
Messaging.SendEmailResult [] r = Messaging.sendEmail(new Messaging.SingleEmailMessage[] {email}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment