With only two python libraries and some line of codes, you are able to create very nice test-reports in PDF format. This tutorial should give you a hint. Feel free to improve with your requirements.
Preconditions
- Python > 2.7 installed
- matplotlib
- reportlab (Open-Source)
Example
matplotlib==1.4.3 reportlab==3.2.0
# -*- coding: utf-8 -*- import time import matplotlib.pyplot as plt from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Image from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.enums import TA_JUSTIFY from reportlab.lib.pagesizes import letter from reportlab.lib.units import inch class CreateTestReport(object): """Example test report class""" def __init__(self, test_results, file_name): """Constructor method""" self.data = test_results self.file_name = file_name self.story = list() self.styles = getSampleStyleSheet() self.styles.add(ParagraphStyle(name='Justify', alignment=TA_JUSTIFY)) def __create_overview(self): """Create overview graphic and pdf content""" requests = list() duration = list() for lists in self.data: requests.append(lists[0]) duration.append(lists[1]) plt.plot(duration) plt.xlabel('http requests') plt.ylabel('response time') plt.xticks(range(len(duration)), requests) plt.grid(True) plt.savefig('overview.png') text = '<font size=18>Overview</font>' self.story.append(Paragraph(text, self.styles["Heading2"])) picture = Image('overview.png', 6*inch, 4*inch, hAlign='LEFT') self.story.append(picture) text = '<font size=12>Lorem ipsum dolor sit amet, <br/>\ consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt \ ut labore et dolore magna aliquyam erat, sed diam voluptua.<br/>\ At vero eos et accusam et justo duo dolores et ea rebum. <br/>\ Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum \ dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing \ elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore \ magna aliquyam erat, sed diam voluptua. <br/>\ At vero eos et accusam et justo duo dolores et ea rebum. <br/>\ Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum \ dolor sit amet.</font>' self.story.append(Paragraph(text, self.styles["Normal"])) self.story.append(Spacer(1, 192)) def __create_round_trips(self): """Create round trip graphics and pdf content""" for lists in self.data: text = '<font size=18>%s: %s HTTP/1.1</font>' % (lists[3], lists[4]) self.story.append(Paragraph(text, self.styles["Heading2"])) text = '<font size=12>Status Code: %s</font>' % lists[2] self.story.append(Paragraph(text, self.styles["Normal"])) self.story.append(Spacer(1, 12)) file_name = 'request_' + str(lists[0]) + '.png' title = 'Request Circle (' + str(lists[1]) + ' sec.)' plt.figure(figsize=(4, 4)) plt.title(title) values = lists[5] labels = ['Request', 'Server', 'Response'] plt.pie(values, labels=labels) plt.savefig(file_name) picture = Image(file_name, 2.5*inch, 2.5*inch, hAlign='LEFT') self.story.append(picture) self.story.append(Spacer(1, 24)) def create_pdf(self, report_title, author, base_url, margins): """Create PDF document""" formatted_time = time.ctime() pdf = SimpleDocTemplate(self.file_name, pagesize=letter, title=report_title, author=author, topMargin=margins[0], leftMargin=margins[1], rightMargin=margins[2], bottomMargin=margins[3]) # Add headline, created date/time and author text = '<font size=24>%s</font>' % report_title self.story.append(Paragraph(text, self.styles["Heading1"])) self.story.append(Spacer(1, 12)) text = '<font size=10>%s<br/>by %s<br/>%s</font>' % (formatted_time, author, base_url) self.story.append(Paragraph(text, self.styles["Italic"])) self.story.append(Spacer(1, 24)) # Add overview self.__create_overview() # Add results self.__create_round_trips() # Create and store report pdf.build(self.story) if __name__ == '__main__': # some test result data data = ([1, 0.5, 200, 'GET', '/api/getUser', [40, 40, 20]], [2, 0.75, 200, 'POST', '/api/createUser', [50, 30, 20]], [3, 0.25, 404, 'PUT', '/api/updateUser', [50, 25, 25]], [4, 2, 301, 'GET', '/api/Logout', [25, 50, 25]], [5, 0.25, 200, 'POST', '/api/Login', [45, 35, 20]]) # create report CREATE = CreateTestReport(data, 'TestReport.pdf') CREATE.create_pdf('Example Test Report', 'Lupin3000', 'http://example.com', [20, 20, 20, 10])
You can call it simply by
# execute without compile $ python -B ExampleReport.py