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

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
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

js纯前端实现语音播报,朗读功能(2024-04-15)

实现语音播报要有两个原生API 分别是【window.speechSynthesis】【SpeechSynthesisUtterance】 项目代码 // 执行函数 initVoice({text: 项目介绍,vol: 1,rate: 1 })// 函数 export function initVoice(config) {window.speechSynthesis.cancel();//播报前建议调用取消的函数…

HCIP【ospf综合实验】

目录 实验要求: 实验拓扑图: 实验思路: 实验步骤: 一、划分网段 二、配置IP地址 三、搞通私网和公网 (1)先搞通私网(基于OSPF协议,在各个路由器上进行网段的宣告&#xff0c…

使用icpc tool进行滚榜操作

前言 参加ACM的同学都知道,比赛非常有趣的环节就是赛后的滚榜环节,所以为了一个比赛的完整性,自己办比赛时也想要加入滚榜的操作,经过一段时间的研究学习,已经可以将滚榜程序与domjudege程序成功完成融合,…

BypassUAC漏洞挖掘和代码集成

什么是UAC UAC是UserAccountControl的缩写,即用户帐户控制。是Windows操作系统中的一种安全特性,旨在保护计算机不被未经授权的应用程序和操作所破坏。UAC通过提示用户是否允许某个应用程序或操作修改计算机的设置或访问敏感数据,来帮助用户…

AntDesign震撼发布!阿里企业级设计体系引领行业风向!

企业级产品设计系统Antdesign是蚂蚁集团经过大量项目实践和总结,逐步打磨出来的产品。随着近两年b端产品的逐渐白热化,越来越多的用户对更好的用户体验有了进一步的要求。 作为国内研发团队量身定制的在线协作工具,设计师可以直接预览并在即…

C语言 | Leetcode C语言题解之第25题K个一组翻转链表

题目: 题解: /* 定义保存两个地址的结构体* 用来保存反转后结果的头节点和尾节点*/ typedef struct {struct ListNode* head; struct ListNode* tail; } TwoAddress; // 反转中间链表 TwoAddress* reverse(struct ListNode* head){struct ListNode* pr…

Java IO流-字节流

简介 IO流的输入与输出,都在站在内存的角度来看的,因为毕竟是和内促你打交道的嘛! 分类 IO流是可以根据方向,或者最小单位进行划分的 上述两两结合一下,就得到四种大的分类 IO流的继承体系 字节输入流InputStream 创建…

邮件群发系统如何确保效率?怎么评估性能?

邮件群发系统构建方法?邮件群发系统有哪些关键功能? 如何确保邮件群发系统的效率,以及如何评估其性能,却成为摆在众多使用者面前的一大问题。AokSend将围绕这两个方面展开讨论,帮助读者更好地理解和应用邮件群发系统。…

链表OJ1——删除链表中等于给定值 val 的所有节点

题目 力扣OJ链接:. - 力扣(LeetCode) 解法 我们来看看这个题目啊,怎么做呢? 有两种解法 三指针法 我们完全可以定义三个指针来进行这个删除操作 假设我们要移除的是2 这样子就完成了 特殊情况 开头——假设我们…

【学习】黑盒测试用例设计方法都有哪些

在软件测试中,黑盒测试是一种重要的测试方法,它专注于软件的外部行为,而不关心其内部结构和实现。黑盒测试的目标是确保软件的功能符合需求规格说明书中的要求。为了有效地进行黑盒测试,需要设计合理的测试用例。本文将详细介绍黑…

java:多线程中的死锁

多线程:死锁 当多个线程互相争抢资源导致都在互相等待资源的僵局时,如果没有外力,将会一直僵持下去,这就是死锁. 就像两个人分一双筷子,如果一人拿到一根筷子,都在等待对方手里的那根,将没有人能完成吃饭的任务. 死锁的必要条件 1,互斥 即资源只能被一个线程调用 2,不可剥…

idea 卡怎么办

设置内存大小 清缓存重启 idea显示内存全用情况 右下角

【图解】卖USDT的风险

张三涉足一项神秘行业,有时也会参与加密货币的交易。有一天,他添加了邵律师的微信,向他咨询:如何更安全地出售U币?因此,便有了这张图片。 他看了我的回复后叹了口气,说:“是的&#…

Docker容器tomcat中文名文件404错误不一定是URIEncoding,有可能是LANG=zh_CN.UTF-8引起

使用Docker部署tomcat,出现中文名文件无法读取,访问就是404错误。在网上搜索一通,都说是在tomcat的配置文件server.xml中修改一下URIEncoding为utf-8就行,但是我怎么测试都不行。最终发现,是Docker启动时,传…

攻防世界---Reversing-x64Elf-100

1.下载附件,先查壳,无壳 2.用IDA分析,找到main函数,使用fnf5,反编译 3.分析代码 4.双击进入条件函数中查看代码 5.编写代码,来源:https://blog.csdn.net/2303_80796023/article/details/1370866…

Kingbase(人大金仓数据库)(总结全网精华,虚拟机:从安装到操作数据库一条龙)

前言: 前一阵子一直在捣鼓人大金仓数据库,虽然国产化的数据库很值得夸赞,但是网上的资料确实少的可怜。特此记录一下我在学习这个数据库的心酸历程。 安装就看这个大哥的,我之前安装就是看的他的,非常靠谱。 linux安装…

Python人工智能教学之掌握机器学习深度学习并提升实战能力(共72个视频教学+课程资料)云盘下载

人工智能是未来的发展方向,掌握了人工智能,就掌握了钱图。。。 Python人工智能教学之掌握机器学习深度学习并提升实战能力(共72个视频教学课程资料) 下载地址: 链接:https://pan.baidu.com/s/1ryJd5PNx1tLD…

C# 字面量null对于引用类型变量和值类型变量

编译器让相同的字符串字面量共享堆中的同一内存位置以节约内存。 在C#中,字面量(literal)是指直接表示固定值的符号,比如数字、字符串或者布尔值。而关键字(keyword)则是由编程语言定义的具有特殊含义的标…

设计模式之状态模式(上)

状态模式 1)概述 1.定义 允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。 2.作用 状态模式用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题。 3.方案 状态模式将一个对象的状态从该对象中分离出来&…

VulNyx - Ready

目录 信息收集 arp nmap nikto Redis未授权访问漏洞 漏洞扫描 redis-cli 写入公钥 ssh连接 get root.txt 信息收集 arp ┌─[rootparrot]─[~/vulnyx] └──╼ #arp-scan -l Interface: enp0s3, type: EN10MB, MAC: 08:00:27:16:3d:f8, IPv4: 192.168.9.102 Starti…