基于PyAutoGUI图片定位的自动化截图工具--完成了
1、计划
压测完成后需要编写性能测试报告,报告中所需数据截图较多,使用自动化操作方便快捷,就编写一个界面工具以便后续复用。
基于PyAutoGUI图片定位的自动化截图工具–jmeter部分
基于PyAutoGUI图片定位的自动化截图工具–jmeter部分(2)
上次把jm部分的识别测试写完了,开始截图功能就大致修改一下循环逻辑就能用。lr部分大部分功能与jm流程一致,针对修改挺快的。
2、jm开始截图
对【开始截图】按钮增加信号槽函数jm_start()。
- 函数首先校验是否选中监听器与报告,然后校验选中监听器是否有识别图,最后校验【JMeter】的窗口是否打开,并切换窗口。
- 在指定位置新建"Report diagram"文件夹,存放截图。
- 开始遍历报告,然后遍历监听器截图。
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界面部分
-
界面与jmeter部分差不多,去掉了初始化按钮,所有的识别图需要在每个Graph信息页面截取。
-
Graph信息编辑页面,增加了报告按钮的增加流程识别图。可以添加默认报告没有的Graph。
5、工具完成界面
工具到现在就完成了,实现了loadrunner与jmeter压测报告的自动化截图,方便后续编写报告图片数据的收集与展示。
代码放这里Gitee
原文地址:https://blog.csdn.net/weixin_43820813/article/details/137813152
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!