
前言:
日常測試流程中,時常需要將測試結果輸出為報告文檔予以公示。而如果能夠?qū)蟾嫖臋n生成的過程自動化實現(xiàn),省去每次編輯表格、格式、圖片的時間,無疑是一項可觀的效率提升。
針對這一目標,我了解并嘗試了通過python中的docx模塊進行word文檔自動化生成,于此將其基本方法與實現(xiàn)過程同大家交流分享。
安裝:
由于使用的是python3,實踐過程中發(fā)現(xiàn),如果直接使用pip命令安裝模塊:
pip install docx
import模塊會因版本問題報錯,應前往:https://www.lfd.uci.edu/~gohlke/pythonlibs/下載最新的python_docx-0.8.10-py2.py3-none-any.whl再卸載原版本并重新安裝此whl文件:
pip uninstall docx
此時再次嘗試import docx則不再有報錯提示,即安裝成功。
基本方法:
安裝成功后,則可以開始著手根據(jù)格式、內(nèi)容需求來生成文檔,下面根據(jù)文檔生成過程中的一些要素來介紹一些docx模塊的基本方法。
首先是創(chuàng)建空白文檔,其后的所有操作都需要基于文檔對象document來進行操作:
from docx import Document
其次則是為文檔添加標題、段落這樣的基本元素:
document.add_heading('This is my title', 1) #添加1級標題
但以此方式添加的標題、段落,其格式只能為docx模塊默認格式且內(nèi)容不易修改,實踐中采取了一種更為靈活的方式:
head = document.add_heading(level=1) #添加標題
由此,使用run對象進行內(nèi)容追加,即可于后續(xù)直接對其字體等文字屬性進行修改,例如:
run.font.name = fontName #設置英文字體
而關于字號、加粗、顏色等其他屬性的設置方式和字體設置類似,此處以一個集成函數(shù)為例:
from docx.shared import Inches, Pt, RGBColor, Cm
同樣的,也可以修改段落相關屬性以契合預期表現(xiàn)效果:
from docx.enum.text import WD_ALIGN_PARAGRAPH
在完善了文檔中文字、段落的格式之后,還需要針對測試報告中不可或缺的圖片與表格進行添加與設置:
# 添加圖片并居中,'pic.png'為相對路徑,width為圖片相對大小
# 添加表格,rows和cols為行列數(shù)、Table Grid為實體邊框樣式
最后,考慮到文檔的整體樣式,可以對其頁面進行設置:
#頁面設置,A4,窄邊距
實現(xiàn)過程:
先來列舉兩個實現(xiàn)過程中的問題以作示例,繼而對文檔自動化生成的整體思路進行引申。
其一,報告內(nèi)容中存在著多處需要加粗或改變字體的文字,那么如何便捷地適配每處文字的具體表現(xiàn)呢?此處的方案是先預設一些‘關鍵詞’如:'V5.1'、'高端機'等,再組成適配re.split()的正則表達式去對報告內(nèi)容進行分割與設置:
# 根據(jù)預設關鍵詞拼接正則表達式
其二,考慮到表格著存在不同形式的合并需求,那么如何使其合并方式自動化地適配數(shù)據(jù)呢?此處的方案為在預設表格數(shù)據(jù)時,將合并的表格內(nèi)數(shù)據(jù)重復寫一次,即:
#表格數(shù)據(jù)——“評測項目”首行1-2列合并則寫了2次、”對比產(chǎn)品“首列5-8行合并寫了4次
其后于腳本的表格輸出方法中,直接根據(jù)所讀取到的重復數(shù)據(jù)項分布方式來決定表格的合并形式,如首行1-2列數(shù)據(jù)重復,則:
table.cell(0, 0).merge(table.cell(0, 1))
由以上兩個問題進行舉一反三,實際上整篇文檔均是采取了預設數(shù)據(jù)、讀取數(shù)據(jù)、輸出數(shù)據(jù)這樣的流程進行生成的,其中預設數(shù)據(jù)指的是:
而數(shù)據(jù)讀取環(huán)節(jié),則是去遍歷content_data.items()中的內(nèi)容,由此找到報告文檔中每一小節(jié)中對應的預設內(nèi)容,再去根據(jù)內(nèi)容標識進行區(qū)分使用對應的方法進行數(shù)據(jù)輸出:
總結:
軟件測試、接口測試、自動化測試、面試經(jīng)驗交流。感興趣可以關注我們愛碼小士,公眾號內(nèi)會有不定期的發(fā)放免費的資料鏈接,還有同行一起技術交流。這些資料都是從各個技術網(wǎng)站搜集、整理出來的,如果你有好的學習資料可以私聊發(fā)我,我會注明出處之后分享給大家。
綜上,自動化測試報告生成腳本便完成了,在其后的版本迭代過程中只需更改預設數(shù)據(jù)中的內(nèi)容,不同樣式或內(nèi)容的報告即可自動生成,希望本文能夠?qū)Υ蠹矣兴鶐椭?,歡迎各位同行發(fā)表你的看法。