最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PyQt5+Python-docx實(shí)現(xiàn)一鍵生成測(cè)試報(bào)告

 更新時(shí)間:2025年05月04日 10:02:47   作者:Python測(cè)試之道  
作為一名測(cè)試工程師,你是否經(jīng)歷過(guò)手動(dòng)填寫(xiě)測(cè)試報(bào)告的痛苦,本文將用Python的PyQt5和python-docx庫(kù),打造一款測(cè)試報(bào)告一鍵生成工具,感興趣的可以了解下

引言

作為一名測(cè)試工程師,你是否經(jīng)歷過(guò)手動(dòng)填寫(xiě)測(cè)試報(bào)告的痛苦?就像用放大鏡在沙地上寫(xiě)詩(shī)——費(fèi)力、易改、還容易被風(fēng)吹散。

今天,我們將用Python的PyQt5和python-docx庫(kù),打造一款測(cè)試報(bào)告一鍵生成工具,讓你像搭積木一樣快速完成報(bào)告,像做蛋糕一樣優(yōu)雅分配時(shí)間!

工具功能亮點(diǎn)

1.圖形化界面交互:你的“樂(lè)高積木”

  • 通過(guò)PyQt5設(shè)計(jì)的界面,就像一盒五顏六色的樂(lè)高積木,
  • 每個(gè)輸入框都是一個(gè)模塊,輕輕一搭,數(shù)據(jù)就位!

2.時(shí)間智能劃分:你的“時(shí)間蛋糕”大師

根據(jù)測(cè)試起止時(shí)間,像切蛋糕一樣按比例分配需求評(píng)審、

用例設(shè)計(jì)、執(zhí)行、回歸測(cè)試及報(bào)告編寫(xiě)的時(shí)間。

(例如:需求評(píng)審10%、用例設(shè)計(jì)20%…)

3.模板化報(bào)告生成:你的“填字游戲”助手

基于python-docx庫(kù),像玩填字游戲一樣自動(dòng)填充Word文檔,

模板一放,數(shù)據(jù)自動(dòng)到位。

4.可擴(kuò)展性強(qiáng):你的“建筑藍(lán)圖”

代碼結(jié)構(gòu)清晰,像建筑藍(lán)圖一樣模塊化,

方便后續(xù)集成更多功能(如圖表生成、歷史記錄保存)。

工具設(shè)計(jì)思路

1. 界面設(shè)計(jì):PyQt5實(shí)現(xiàn)數(shù)據(jù)輸入

輸入字段:

  • 系統(tǒng)測(cè)試環(huán)境地址 → 類比為“快遞地址”,確保報(bào)告能準(zhǔn)確送達(dá)。
  • 項(xiàng)目經(jīng)理、測(cè)試經(jīng)理等 → 像“團(tuán)隊(duì)角色卡牌”,明確責(zé)任分工。
  • 測(cè)試起止時(shí)間 → 類比為“馬拉松起點(diǎn)終點(diǎn)”,為時(shí)間分配提供基準(zhǔn)。
  • 用例數(shù)與Bug數(shù) → 像“考試成績(jī)表”,直觀展示測(cè)試成果。

時(shí)間智能劃分:

  • 根據(jù)起止時(shí)間,按比例分配階段時(shí)間,
  • 就像切蛋糕:需求評(píng)審(10%)、用例設(shè)計(jì)(20%)、執(zhí)行(30%)、
  • 回歸測(cè)試(20%)、報(bào)告編寫(xiě)(20%)。每個(gè)階段都有清晰的“時(shí)間標(biāo)簽”。

2. 文檔生成:python-docx填充模板

模板結(jié)構(gòu):

  • 標(biāo)題與基本信息 → 類比為“簡(jiǎn)歷封面”,展示項(xiàng)目核心信息。
  • 時(shí)間安排表 → 像“日程表”,讓時(shí)間分配一目了然。
  • 測(cè)試數(shù)據(jù)統(tǒng)計(jì) → 如“成績(jī)單”,用表格展示用例數(shù)、Bug數(shù)。
  • 測(cè)試結(jié)論 → 類似“總結(jié)發(fā)言”,簡(jiǎn)潔有力。

動(dòng)態(tài)數(shù)據(jù)填充:

  • 通過(guò)占位符替換或直接插入段落/表格,
  • 像“填字游戲”一樣自動(dòng)填充數(shù)據(jù)。

工具實(shí)現(xiàn)代碼

1. 安裝依賴

pip install PyQt5 python-docx

2. PyQt5界面代碼

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QDateEdit, QPushButton, QVBoxLayout, QHBoxLayout, QFormLayout

class TestReportTool(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("測(cè)試報(bào)告一鍵生成工具")
        self.init_ui()

    def init_ui(self):
        # 表單布局
        form_layout = QFormLayout()

        # 輸入字段(積木模塊)
        self.system_url = QLineEdit()
        self.pm_name = QLineEdit()
        self.tm_name = QLineEdit()
        self.tl_name = QLineEdit()
        self.tester_name = QLineEdit()
        self.start_date = QDateEdit()
        self.end_date = QDateEdit()
        self.func_cases = QLineEdit()
        self.func_bugs = QLineEdit()
        self.regression_cases = QLineEdit()
        self.regression_bugs = QLineEdit()

        # 添加字段到表單
        form_layout.addRow("系統(tǒng)測(cè)試環(huán)境地址:", self.system_url)
        form_layout.addRow("項(xiàng)目經(jīng)理:", self.pm_name)
        form_layout.addRow("測(cè)試經(jīng)理:", self.tm_name)
        form_layout.addRow("測(cè)試組長(zhǎng):", self.tl_name)
        form_layout.addRow("測(cè)試人員:", self.tester_name)
        form_layout.addRow("測(cè)試起始時(shí)間:", self.start_date)
        form_layout.addRow("測(cè)試結(jié)束時(shí)間:", self.end_date)
        form_layout.addRow("功能測(cè)試用例數(shù):", self.func_cases)
        form_layout.addRow("功能測(cè)試Bug數(shù):", self.func_bugs)
        form_layout.addRow("回歸測(cè)試用例數(shù):", self.regression_cases)
        form_layout.addRow("回歸測(cè)試缺陷數(shù):", self.regression_bugs)

        # 生成按鈕
        self.generate_btn = QPushButton("生成測(cè)試報(bào)告")
        self.generate_btn.clicked.connect(self.generate_report)

        # 主布局
        main_layout = QVBoxLayout()
        main_layout.addLayout(form_layout)
        main_layout.addWidget(self.generate_btn)
        self.setLayout(main_layout)

    def generate_report(self):
        # 收集數(shù)據(jù)
        data = {
            "system_url": self.system_url.text(),
            "pm_name": self.pm_name.text(),
            "tm_name": self.tm_name.text(),
            "tl_name": self.tl_name.text(),
            "tester_name": self.testers_name.text(),
            "start_date": self.start_date.date().toString("yyyy-MM-dd"),
            "end_date": self.end_date.date().toString("yyyy-MM-dd"),
            "func_cases": self.func_cases.text(),
            "func_bugs": self.func_bugs.text(),
            "regression_cases": self.regression_cases.text(),
            "regression_bugs": self.regression_bugs.text(),
        }

        # 計(jì)算時(shí)間塊并添加到data
        time_blocks = calculate_time_blocks(data["start_date"], data["end_date"])
        for phase, dates in time_blocks.items():
            key = f"{phase}_time"
            data[key] = dates

        # 計(jì)算通過(guò)率
        func_pass_rate = round((1 - int(data["func_bugs"]) / int(data["func_cases"])) * 100, 2)
        data["func_pass_rate"] = f"{func_pass_rate}%"
        reg_pass_rate = round((1 - int(data["regression_bugs"]) / int(data["regression_cases"])) * 100, 2)
        data["reg_pass_rate"] = f"{reg_pass_rate}%"

        # 調(diào)用文檔生成函數(shù)
        from docx_generator import generate_docx
        generate_docx(data)
        print("測(cè)試報(bào)告生成成功!")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = TestReportTool()
    window.show()
    sys.exit(app.exec_())

3. Word文檔生成代碼

from docx import Document
from datetime import datetime, timedelta

def calculate_time_blocks(start_date_str, end_date_str):
    start_date = datetime.strptime(start_date_str, "%Y-%m-%d")
    end_date = datetime.strptime(end_date_str, "%Y-%m-%d")
    total_days = (end_date - start_date).days
    if total_days <= 0:
        return {}
    
    # 按比例劃分階段(時(shí)間蛋糕)
    phases = {
        "需求評(píng)審": 0.1,
        "用例設(shè)計(jì)": 0.2,
        "用例執(zhí)行": 0.3,
        "回歸測(cè)試": 0.2,
        "報(bào)告編寫(xiě)": 0.2
    }
    time_blocks = {}
    current_date = start_date
    for phase, ratio in phases.items():
        days = int(total_days * ratio)
        end_phase = current_date + timedelta(days=days)
        time_blocks[phase] = f"{current_date.strftime('%Y-%m-%d')} - {end_phase.strftime('%Y-%m-%d')}"
        current_date = end_phase
    return time_blocks

def generate_docx(data):
    # 讀取模板文檔
    doc = Document('template.docx')  # 假設(shè)模板文件為 template.docx

    # 替換段落中的占位符
    for paragraph in doc.paragraphs:
        for key, value in data.items():
            if key in paragraph.text:
                paragraph.text = paragraph.text.replace(f'{{{key}}}', value)  # 使用雙大括號(hào)包裹

    # 替換表格中的占位符
    for table in doc.tables:
        for row in table.rows:
            for cell in row.cells:
                for key, value in data.items():
                    if key in cell.text:
                        cell.text = cell.text.replace(f'{{{key}}}', value)

    # 保存文檔
    doc.save("TestReport.docx")

模板化樣本

# 測(cè)試報(bào)告模板(變量占位符版)
---

## 一、測(cè)試基本信息  
系統(tǒng)測(cè)試環(huán)境地址:{{{system_url}}}  
項(xiàng)目經(jīng)理:{{{pm_name}}}  
測(cè)試經(jīng)理:{{{tm_name}}}  
測(cè)試組長(zhǎng):{{{tl_name}}}  
測(cè)試人員:{{{tester_name}}}  

---

## 二、測(cè)試時(shí)間安排  
需求評(píng)審:{{{需求評(píng)審_time}}}  
用例設(shè)計(jì):{{{用例設(shè)計(jì)_time}}}  
用例執(zhí)行:{{{用例執(zhí)行_time}}}  
回歸測(cè)試:{{{回歸測(cè)試_time}}}  
報(bào)告編寫(xiě):{{{報(bào)告編寫(xiě)_time}}}  

---

## 三、測(cè)試數(shù)據(jù)統(tǒng)計(jì)  
| 測(cè)試類型 | 用例數(shù) | 缺陷數(shù) | 通過(guò)率 |  
|----------|--------|--------|--------|  
| 功能測(cè)試 | {{{func_cases}}} | {{{func_bugs}}} | {{{func_pass_rate}}} |  
| 回歸測(cè)試 | {{{regression_cases}}} | {{{regression_bugs}}} | {{{reg_pass_rate}}} |  

---

## 四、測(cè)試結(jié)論  
{{{test_conclusion}}}  

工具使用示例

1.準(zhǔn)備模板:

  • 創(chuàng)建一個(gè)名為 template.docx 的Word文檔,內(nèi)容如上所示的模板樣本。
  • 確保模板中使用 {{{variable_name}}} 形式的占位符。

2.運(yùn)行界面:

  • 打開(kāi)工具后,在界面中輸入測(cè)試數(shù)據(jù)。
  • 點(diǎn)擊“生成測(cè)試報(bào)告”按鈕。

3.生成結(jié)果:

自動(dòng)生成名為 TestReport.docx 的Word文檔,內(nèi)容如下:

  • 測(cè)試基本信息:系統(tǒng)環(huán)境、人員信息(簡(jiǎn)歷封面)。
  • 測(cè)試時(shí)間安排:按比例劃分的各階段時(shí)間(日程表)。
  • 測(cè)試數(shù)據(jù)統(tǒng)計(jì):用表格展示功能測(cè)試與回歸測(cè)試的用例數(shù)、缺陷數(shù)、通過(guò)率(成績(jī)單)。
  • 測(cè)試結(jié)論:簡(jiǎn)要總結(jié)測(cè)試結(jié)果(總結(jié)發(fā)言)。

擴(kuò)展建議

模板自定義:在模板中添加公司Logo、頁(yè)眉頁(yè)腳或顏色主題,提升專業(yè)度。

數(shù)據(jù)導(dǎo)出:集成 openpyxl 庫(kù),將測(cè)試數(shù)據(jù)導(dǎo)出為Excel表格。

圖表生成:使用 matplotlib 生成缺陷趨勢(shì)圖,并嵌入到Word文檔中。

歷史記錄:將用戶輸入的數(shù)據(jù)保存為JSON文件,支持歷史記錄查詢。

結(jié)語(yǔ)

這款工具的核心在于將重復(fù)性工作自動(dòng)化,讓測(cè)試工程師專注于測(cè)試設(shè)計(jì)與執(zhí)行。

通過(guò)PyQt5的圖形化界面和python-docx的文檔生成能力,我們不僅提高了效率,還降低了人為錯(cuò)誤的風(fēng)險(xiǎn)。

到此這篇關(guān)于PyQt5+Python-docx實(shí)現(xiàn)一鍵生成測(cè)試報(bào)告的文章就介紹到這了,更多相關(guān)PyQt5 Python-docx生成測(cè)試報(bào)告內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python使用pip安裝Matplotlib的方法詳解

    Python使用pip安裝Matplotlib的方法詳解

    在網(wǎng)上看見(jiàn)許多matplotlib的安裝教程都是比較復(fù)雜,需要配置許多環(huán)境,對(duì)于電腦基礎(chǔ)不好的人來(lái)說(shuō)可是一件頭疼的事情,今天我介紹一個(gè)簡(jiǎn)單的安裝方法,下面這篇文章主要給大家介紹了關(guān)于Python使用pip安裝Matplotlib的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • Python腳本實(shí)現(xiàn)datax全量同步mysql到hive

    Python腳本實(shí)現(xiàn)datax全量同步mysql到hive

    這篇文章主要和大家分享一下mysql全量同步到hive自動(dòng)生成json文件的python腳本,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參加一下
    2024-10-10
  • Python RabbitMQ實(shí)現(xiàn)簡(jiǎn)單的進(jìn)程間通信示例

    Python RabbitMQ實(shí)現(xiàn)簡(jiǎn)單的進(jìn)程間通信示例

    這篇文章主要介紹了Python RabbitMQ實(shí)現(xiàn)簡(jiǎn)單的進(jìn)程間通信示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 對(duì)Python通過(guò)pypyodbc訪問(wèn)Access數(shù)據(jù)庫(kù)的方法詳解

    對(duì)Python通過(guò)pypyodbc訪問(wèn)Access數(shù)據(jù)庫(kù)的方法詳解

    今天小編就為大家分享一篇對(duì)Python通過(guò)pypyodbc訪問(wèn)Access數(shù)據(jù)庫(kù)的方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • 使用Python實(shí)現(xiàn)Excel文件轉(zhuǎn)換為SVG格式

    使用Python實(shí)現(xiàn)Excel文件轉(zhuǎn)換為SVG格式

    SVG(Scalable Vector Graphics)是一種基于XML的矢量圖像格式,這種格式在Web開(kāi)發(fā)和其他圖形應(yīng)用中非常流行,提供了一種高效的方式來(lái)呈現(xiàn)復(fù)雜的矢量圖形,本文將介紹如何使用Python轉(zhuǎn)換Excel文件為SVG格式,需要的朋友可以參考下
    2024-07-07
  • python中如何實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用

    python中如何實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用

    這篇文章主要介紹了python中如何實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03
  • Python Numpy教程之排序,搜索和計(jì)數(shù)詳解

    Python Numpy教程之排序,搜索和計(jì)數(shù)詳解

    這篇文章主要為大家詳細(xì)介紹了Python?NumPy中排序,搜索和計(jì)數(shù)的實(shí)現(xiàn),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下
    2022-08-08
  • Python3實(shí)現(xiàn)計(jì)算兩個(gè)數(shù)組的交集算法示例

    Python3實(shí)現(xiàn)計(jì)算兩個(gè)數(shù)組的交集算法示例

    這篇文章主要介紹了Python3實(shí)現(xiàn)計(jì)算兩個(gè)數(shù)組的交集算法,結(jié)合2個(gè)實(shí)例形式總結(jié)分析了Python3針對(duì)數(shù)組的遍歷、位運(yùn)算以及元素的添加、刪除等相關(guān)操作技巧,需要的朋友可以參考下
    2019-04-04
  • python操作gmail實(shí)例

    python操作gmail實(shí)例

    這篇文章主要介紹了python操作gmail的方法,實(shí)例分析了python針對(duì)gmail操作的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-01-01
  • Python實(shí)現(xiàn)語(yǔ)音啟動(dòng)電腦應(yīng)用程序

    Python實(shí)現(xiàn)語(yǔ)音啟動(dòng)電腦應(yīng)用程序

    這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)語(yǔ)音啟動(dòng)電腦應(yīng)用程序功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一學(xué)習(xí)一下
    2025-03-03

最新評(píng)論

高台县| 馆陶县| 六安市| 阜平县| 普宁市| 五指山市| 黔西| 社会| 曲阜市| 绵阳市| 蓝田县| 渑池县| 绥芬河市| 都安| 米林县| 苏尼特右旗| 文登市| 景宁| 铜陵市| 固始县| 乌什县| 沽源县| 古浪县| 清原| 石林| 特克斯县| 田林县| 绵竹市| 旅游| 霍城县| 乌拉特后旗| 弥勒县| 准格尔旗| 连山| 平舆县| 米林县| 深泽县| 宣汉县| 临泽县| 灵寿县| 阿拉尔市|