基于PyAutoGUI图片定位的自动化截图工具--完成了

1、计划

压测完成后需要编写性能测试报告,报告中所需数据截图较多,使用自动化操作方便快捷,就编写一个界面工具以便后续复用。
基于PyAutoGUI图片定位的自动化截图工具--jmeter部分
基于PyAutoGUI图片定位的自动化截图工具--jmeter部分(2)

上次把jm部分的识别测试写完了,开始截图功能就大致修改一下循环逻辑就能用。lr部分大部分功能与jm流程一致,针对修改挺快的。

2、jm开始截图

对【开始截图】按钮增加信号槽函数jm_start()。

  1. 函数首先校验是否选中监听器与报告,然后校验选中监听器是否有识别图,最后校验【JMeter】的窗口是否打开,并切换窗口。
  2. 在指定位置新建"Report diagram"文件夹,存放截图。
  3. 开始遍历报告,然后遍历监听器截图。
python 复制代码
    def jm_start(self):
        """开始截图"""
        jtq = [item.text(0) for item in self.mkliebiao_2.selectedItems()]   # 选中项目校验
        bg = [item.text(0) for item in self.mkliebiao_1.selectedItems()]
        if not jtq or not bg:
            self.ts.xinxi("请选择监听器与报告")
            return

        with open(JM_JSON, 'r', encoding='utf-8') as f:
            data = json.load(f)
        init_tu1 = data.get('init', {}).get('tu1', {})   # 初始化,识别图校验
        if init_tu1 == {}:
            self.daochulog.append(f"未获取到【初始化】:识别图")
            return

        for key in jtq:                                  # 监听器,识别图校验
            for i in range(1, 4):
                tus = data[key].get(f'tu{i}', {})
                if i != 3 and tus == {}:
                    self.daochulog.append(f"未获取到【{key}】识别图{i}")
                    return

        if activate_window("Apache JMeter"):             # jmeter启动判断
            time.sleep(1)
        else:
            self.ts.xinxi("没找到名称包含【JMeter】的窗口,请检查jmeter是否启动")
            return

        self.daochulog.append(f"开始截图:\n")
        if self.report.text():                          # 截图保存文件夹
            path = self.report.text()
        else:
            path = QStandardPaths.writableLocation(QStandardPaths.StandardLocation.DownloadLocation)
        full_path = os.path.join(path, "Report diagram")
        os.makedirs(full_path, exist_ok=True)           # 新建文件夹

        pg.click(100, 600)
        pg.press('home')                                # 切换顶部,避免按钮选中
        count_bg = 0            # 计数
        count_image = 0
        try:
            for b in bg:
                self.daochulog.append(f"{b}:开始")
                for key in jtq:
                    tu1 = data[key].get(f'tu1', {})     # 获取识别图
                    tu2 = data[key].get(f'tu2', {})
                    tu3 = data[key].get(f'tu3', {})
                    lisener = data[key].get(f'lisener', (0, 0, 1, 1))
                    self.locate(tu1)                    # 点击监听器按钮
                    self.locate(init_tu1)               # 清空监听器数据
                    self.locate(tu2)                    # 点击文件输入框
                    pg.hotkey('ctrl', 'a')
                    pg.press('delete')
                    pyperclip.copy(self.file_names[b])  # 将路径复制到剪贴板
                    pg.hotkey('ctrl', 'v')              # 粘贴路径       绕过无法输入中文路径的问题
                    pg.press('enter')
                    time.sleep(1)
                    pg.hotkey('ctrl', 'a')              # 清空路径,避免后续无法识别
                    pg.press('delete')
                    if tu3 != {}:                       # 计算动态高度
                        x, y = self.locate(tu3)
                        lisener[3] = int(y - lisener[1] + 20)
                    pg.screenshot(f"{full_path}\\{b}-{key}.png", region=lisener)  # 报告截图
                    count_image += 1
                count_bg += 1

        except pg.FailSafeException:
            self.daochulog.append("\nPyAutoGUI失效保护触发。已停止自动化操作。")
        except Exception as e:
            self.daochulog.append(f"出错了:{e}")
        finally:
            self.daochulog.append(f"\n截图文件保存路径:{full_path}")
            self.daochulog.append(f"已选:报告【{len(bg)}】 X 监听器【{len(jtq)}】 = 预计截图【{len(bg)*len(jtq)}】张")
            self.daochulog.append(f"已截:报告【{count_bg}】个              图片共【{count_image}】张")
            activate_window("Report screenshot", max=1)

在点击函数locate中,返回了异常pg.FailSafeException,方便外部循环触发:PyAutoGUI失效保护,停止自动化操作。触发方法是鼠标移动到屏幕左上角。

3、截图实现情况

之前已经添加了监听器截图范围与识别图,现在选择报告文件夹,然后选中报告,点击开始。

选择的两个报告与监听器完成截图,一共6张图片。

4、loadrunner界面部分

  1. 界面与jmeter部分差不多,去掉了初始化按钮,所有的识别图需要在每个Graph信息页面截取。

  2. Graph信息编辑页面,增加了报告按钮的增加流程识别图。可以添加默认报告没有的Graph。

5、工具完成界面

工具到现在就完成了,实现了loadrunner与jmeter压测报告的自动化截图,方便后续编写报告图片数据的收集与展示。

代码放这里Gitee

相关推荐
Envyᥫᩣ10 分钟前
Python中的自然语言处理:从基础到高级
python·自然语言处理·easyui
哪 吒11 分钟前
华为OD机试 - 几何平均值最大子数(Python/JS/C/C++ 2024 E卷 200分)
javascript·python·华为od
我是陈泽14 分钟前
一行 Python 代码能实现什么丧心病狂的功能?圣诞树源代码
开发语言·python·程序员·编程·python教程·python学习·python教学
hakesashou14 分钟前
python全栈开发是什么?
python
创作小达人33 分钟前
家政服务|基于springBoot的家政服务平台设计与实现(附项目源码+论文+数据库)
开发语言·python
ZPC821043 分钟前
Python使用matplotlib绘制图形大全(曲线图、条形图、饼图等)
开发语言·python·matplotlib
镜花照无眠1 小时前
Python爬虫使用实例-mdrama
开发语言·爬虫·python
aaasssdddd961 小时前
python和c
c语言·开发语言·python
爱写代码的小朋友1 小时前
Python的几个高级特性
python
Eric.Lee20211 小时前
数据集-目标检测系列- 螃蟹 检测数据集 crab >> DataBall
python·深度学习·算法·目标检测·计算机视觉·数据集·螃蟹检测