基于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

相关推荐
程序员大雄学编程15 小时前
「用Python来学微积分」16. 导数问题举例
开发语言·python·数学·微积分
B站_计算机毕业设计之家16 小时前
预测算法:股票数据分析预测系统 股票预测 股价预测 Arima预测算法(时间序列预测算法) Flask 框架 大数据(源码)✅
python·算法·机器学习·数据分析·flask·股票·预测
yj155816 小时前
装修中怎样避坑
python
景彡先生17 小时前
Python函数定义与调用全解析:从基础语法到实战技巧
linux·开发语言·python
m***记17 小时前
Python字符串操作:如何判断子串是否存在
linux·服务器·python
小白银子17 小时前
零基础从头教学Linux(Day 56)
linux·运维·python
B站计算机毕业设计之家18 小时前
计算机视觉:python手写数字识别系统 手写数字检测 CNN算法 卷积神经网络 OpenCV和Keras模型 大数据毕业设计(建议收藏)✅
python·神经网络·opencv·计算机视觉·cnn·手写数字·数字识别
ii_best18 小时前
按键精灵安卓/iOS脚本辅助,OpenCV实现自动化高效率工具
ios·自动化·编辑器·安卓
B站计算机毕业设计之家18 小时前
Python手势识别检测系统 基于MediaPipe的改进SSD算法 opencv+mediapipe 深度学习 大数据 (建议收藏)✅
python·深度学习·opencv·计算机视觉·1024程序员节
分布式存储与RustFS18 小时前
RustFS:MinIO的“平替”还是“乱杀”?
python·rust·对象存储·minio·存储·企业存储·rustfs