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

news2024/9/28 23:26:27

1、计划

  压测完成后需要编写性能测试报告,报告中所需数据截图较多,使用自动化操作方便快捷,就编写一个界面工具以便后续复用。
基于PyAutoGUI图片定位的自动化截图工具–jmeter部分
基于PyAutoGUI图片定位的自动化截图工具–jmeter部分(2)
  上次把jm部分的识别测试写完了,开始截图功能就大致修改一下循环逻辑就能用。lr部分大部分功能与jm流程一致,针对修改挺快的。

2、jm开始截图

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

  1. 函数首先校验是否选中监听器与报告,然后校验选中监听器是否有识别图,最后校验【JMeter】的窗口是否打开,并切换窗口。
  2. 在指定位置新建"Report diagram"文件夹,存放截图。
  3. 开始遍历报告,然后遍历监听器截图。
    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
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1614853.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux命令接着学习

which命令,找到各种命令程序所处在的位置 语法:which查找的命令 那么对于我们想查找其他类型文件所在的位置,我们可以用到find命令 find命令 选项为-name,表示按照文件名进行查找 find命令中通配符 find命令和前面rm命令一样&…

2024/4/21周报

文章目录 摘要Abstract文献阅读题目问题贡献方法卷积及池化层LSTM层CNN-LSTM模型 数据集参数设置评估指标实验结果 深度学习使用GRU和LSTM进行时间预测1.库的导入&数据集2.数据预处理3.模型定义4.训练过程5.模型训练 总结 摘要 本周阅读了一篇基于CNN-LSTM黄金价格时间序列…

数据结构与算法笔记:线性建堆

ACM大牛带你玩转算法与数据结构-课程资料 本笔记属于船说系列课程之一,课程链接: 哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep66799?csourceprivate_space_class_null&spm_id_from333.999.0.0 你也可以选择购买『船说系列课程-年度会…

IBM SPSS Statistics for Mac:强大的数据分析软件

IBM SPSS Statistics for Mac是一款功能强大的数据分析软件,专为Mac用户设计,提供了一系列专业的统计分析和数据管理功能。无论是科研人员、数据分析师还是学生,都能从中获得高效、准确的数据分析支持。 IBM SPSS Statistics for Mac v27.0.1…

Python与上位机开发day01

程序注释 程序注释主要是对代码进行解释说明,并不参与程序的运行 注释可以分为:单行注释和多行注释 1. 单行注释 单行注释以#开头,#后空一格后跟上注释的内容 # 这是单行注释 print(歪比巴卜)2. 多行注释 如果注释内容比较多的话,可以使用多行注释 多行注释以&…

电梯节能的推广意义

之前关于电梯能量回馈设备,小伍已经做了很多介绍,那么小伙伴们,他的推广意义你真的了解了么? 第一:节电降耗,电梯在运行过程中会产生大量的惯性能量,这些能量如果不被利用就会浪费。能量回馈技术…

SAP专家级实施商解读:SAP S/4HANA Cloud(PCE私有云) 的五大误解

五个关于SAP S/4HANA Cloud(PCE私有云)的重要疑问: ■ SAP太贵了? ■ SAP S/4HANA Cloud 只适用于大型企业? ■ ERP项目,尤其是 SAP 解决方案,太耗时了? ■ ERP项目/云项目没有优势&…

Sound Siphon for Mac:音频处理与录制工具

Sound Siphon for Mac是一款专为Mac用户设计的音频处理与录制工具,以其出色的性能、丰富的功能和简便的操作而备受赞誉。 Sound Siphon for Mac v3.6.8激活版下载 该软件支持多种音频格式,包括MP3、WAV、AAC、FLAC等,用户可以轻松导入各种音频…

一文扫盲(5):实验室管理系统的界面设计

本次带来第5期:实验室管理系统的设计,从系统定义、功能模块、界面构成和设计着力点四个方面讲解,大千UI工场愿意持续和大家分享,欢迎关注、点赞、转发。 一、什么是实验室管理系统 实验室管理系统是一种用于管理和监控实验室运作…

基于Springboot+Mybatis-Plus+mysql+html旅游网站

博主介绍: 大家好,本人精通Java、Python、C#、C、C编程语言,同时也熟练掌握微信小程序、Php和Android等技术,能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验,能够为学生提供各类…

【每日算法】理论:深度学习基础 刷题:KMP算法思想

上期文章 【每日算法】理论:常见网络架构 刷题:力扣字符串回顾 文章目录 上期文章一、上期问题二、本期理论问题1、注意力机制2、BatchNorm 和 LayerNorm 的区别3、Bert 的参数量是怎么决定的。4、为什么现在的大语言模型都采用Decoder only架构&#x…

【CAD打开提示未处理异常C0000027(c0000027h)的两种解决方法。】

cad打开提示错误c0000027h的第一种解决方法 去掉区域里的beta语言勾选。 https://autodesk8.com/cad/86.html 如果第一种方法没解决,尝试第二种方法大概率能解决 点击autoremove的扩展功能,输入c0000027点击搜索,然后双击出现的这个按钮既可…

键盘打字练习游戏代码

效果图 部分代码 index.html <!DOCTYPE html> <html lang"zh"> <head> <meta charset"UTF-8" /> <meta name"viewport" content"widthdevice-width, initial-scale1.0" /> <meta http-equiv"…

初识java——jdk?环境变量?及关于安装jdk的步骤

文章目录 JDK的安装在安装JDK时遇到的问题&#xff1a; 背景知识一 什么是jdkjdk简介jdk文件详解&#xff1a;1 bin目录&#xff1a;2 lib目录&#xff1a;3 include目录.exe文件是可执行的应用程序&#xff0c;这个我们都清楚&#xff0c;但.dll文件又是做什么的呢&#xff1f…

论文笔记:Leveraging Language Foundation Models for Human Mobility Forecasting

SIGSPATIAL 2022 1intro 语言模型POI客流量预测 2 方法 3 实验

Uds诊断协议的请求和响应的寻址

一根总线上挂载着很多ECU&#xff0c;那么基于CAN协议UDS的诊断请求报文&#xff0c;诊断仪是如何发给ECU的&#xff1f;如何精准的找到想要诊断的那个ECU&#xff1f;ECU又是如何将诊断响应的报文返回给诊断仪&#xff1f; 在UDS协议中&#xff0c;规定了诊断请求和响应报文发…

macSubstrate:一款针对macOS的代码注入和打桩测试工具

关于macSubstrate macSubstrate是一款针对macOS的代码注入和打桩测试工具&#xff0c;该工具可以在macOS操作系统上实现进程间代码注入测试&#xff0c;其功能类似于iOS上的Cydia Substrate。 在该工具的帮助下&#xff0c;广大研究人员可以轻松将自己的安全测试插件&#xff…

8-云原生监控体系-PromQL-函数

Prometheus支持几个函数来操作数据。 文章目录 1. 函数语法解释2. count(v instant-vector)3. topk(n, v instant-vector)4. bottomk(n, v instant-vector)5. increase(v range-vector)6. rate(v range-vector)7. rate 和 increase8. irate(v range-vector)9. predict_linear(…

HubSpot流量转化:从访客到客户的转化策略

在当今数字化时代&#xff0c;企业营销获客的关键在于如何将网站访客转化为实际客户。作为HubSpot的合作伙伴&#xff0c;我们深知HubSpot软件在流量转化方面的强大功能。今天运营坛将带领大家深入探讨HubSpot流量转化的核心原理&#xff0c;并介绍如何利用个性化营销策略、构建…

【C++】友元--最全解析(友元是什么?我们应该如何理解友元?友元可以应用在那些场景?)

目录 一、前言 二、友元是什么&#xff1f; 三、友元的感性理解和分类 &#x1f95d;友元的感性理解 &#x1f34b;友元的三种分类 ✨友元 --- 全局函数 ✨友元 --- 成员函数 ✨友元 --- 类 四、友元函数的应用场景 &#x1f34d;操作符重载 :"<<" 与…