from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Image, PageBreak, Table, TableStyle
from reportlab.lib.styles import ParagraphStyle, getSampleStyleSheet
from reportlab.lib.units import mm
from reportlab.lib import colors
from reportlab.lib.enums import TA_CENTER, TA_LEFT
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from autoTestMySql import mySqlOperator
import os
import xlwt
__author = "王庆武"
__date = "2020-04"
pdfmetrics.registerFont(TTFont('pingbold', 'simsun.ttf'))
pdfmetrics.registerFont(TTFont('ping', 'simsun.ttf'))
pdfmetrics.registerFont(TTFont('hv', 'simsun.ttf'))
class testData(mySqlOperator):
def __init__(self, testCasesContent, testCasesSelection):
mySqlOperator.__init__(self)
self.testCasesContent = testCasesContent
self.testCasesSelection = testCasesSelection
self.basic_data = self.getBasicData()
# 根据测试用例获取测试报告表格中合并单元格项
def getRowNumberMerge(self):
rowNumber = []
for _ in self.basic_data:
if _[0]:
rowNumber.append(self.basic_data.index(_) + 1)
return rowNumber
# 获取测试用例的测试步骤
def getTestSteps(self, singleTestCasesSelection):
for _ in self.testCasesContent:
if singleTestCasesSelection in _:
index = self.testCasesContent.index(_)
testSteps = ['_'.join(testStepDetail[3].split('_')[1:])
for testStepDetail in self.testCasesContent[index][4]]
return testSteps
# TODO 获取预期,实际结果,判定后需更新
def getBasicData(self):
basicData = [['序号', '操作步骤', '预期结果', '实际结果', '判定']]
for index in range(len(self.testCasesSelection) - 1):
if len(self.testCasesSelection[index]) < len(self.testCasesSelection[index + 1]):
basicData.append([self.testCasesSelection[index],
self.getTestDescription(self.testCasesSelection[index])])
else:
basicData.append([self.testCasesSelection[index],
self.getTestDescription(self.testCasesSelection[index])])
testSteps = self.getTestSteps(self.testCasesSelection[index])
for steps in testSteps:
basicData.append(['', steps])
basicData.append([self.testCasesSelection[-1],
self.getTestDescription(self.testCasesSelection[-1])])
for steps in self.getTestSteps(self.testCasesSelection[-1]):
basicData.append(['', steps])
return basicData
# 获取描述
def getTestDescription(self, singleTestCasesSelection):
descriptionIndexList = singleTestCasesSelection.split('.')
if len(descriptionIndexList) == 1:
return self.getSelectNavigationCatelog(descriptionIndexList[-1])
elif len(descriptionIndexList) == 2:
return self.getSelectConcreteModul(descriptionIndexList[-1])
else:
return self.getSelectTestItems(descriptionIndexList[-1])
# 生成PDF文件
class reportGenerator(testData):
def __init__(self, filename, testCasesContent, testCasesSelection):
testData.__init__(self, testCasesContent, testCasesSelection)
self.filename = filename
seperator = self.filename.split('/')
self.file_path = './report/'
for _ in seperator[:-1]:
self.file_path += _ + r'/'
if os.path.exists(self.file_path):
pass
else:
os.mkdir(self.file_path)
# --------------------------------------------------------------------------------------------------------------
# PDF相关格式
self.title_style = ParagraphStyle(name="TitleStyle", fontName="pingbold", fontSize=48, alignment=TA_LEFT,)
self.sub_title_style = ParagraphStyle(name="SubTitleStyle", fontName="hv", fontSize=32,
textColor=colors.HexColor(0x666666), alignment=TA_LEFT, )
self.content_style = ParagraphStyle(name="ContentStyle", fontName="ping", fontSize=18,
leading=25, spaceAfter=10,
underlineWidth=1, alignment=TA_LEFT, )
self.content_style1 = ParagraphStyle(name="ContentStyle", fontName="ping", fontSize=10, leading=25,
spaceAfter=2,
underlineWidth=1, alignment=TA_LEFT, textColor=colors.HexColor(0x666666))
self.foot_style = ParagraphStyle(name="FootStyle", fontName="ping", fontSize=14,
textColor=colors.HexColor(0xB4B4B4), leading=25,
spaceAfter=20, alignment=TA_CENTER, )
self.table_title_style = ParagraphStyle(name="TableTitleStyle", fontName="pingbold", fontSize=20, leading=25,
spaceAfter=10, alignment=TA_LEFT, )
self.sub_table_style = ParagraphStyle(name="SubTableTitleStyle", fontName="ping", fontSize=16, leading=25,