痛点:一个接口十几个甚至几十个业务字段 使用postman进行测试,或者写接口文档时,在填写这些字段名时就要耗费很久并且很弱智的复制粘贴
解决方法:使用 pyautogui工具 省去重复性工作
平台:macbook pro 16-inch
注意点:
- 在使用windows时,快捷键 和 macos不同;
- 运行脚本时,输入法应该为英文
- 运行脚本时,尽量不要动 鼠标键盘
- 脚本中的 鼠标开始点击的位置 按照各自屏幕大小进行修改
- 脚本每个函数的入参 使用空格分开,因为 我使用了Alfred的追加复制功能
效果图如下:
postman如下(为了图片大小限制,有些模糊):
接口文档(用的 https://kl3s.w.eolinker.com/ ) 变量名 效果图(因为动图过大,改为只循环一次,请刷新查看):
接口文档 参数的说明 效果图(因为动图过大,改为只循环一次,请刷新查看):
安装方式:
pip install pyautogui
脚本如下:
# -*- coding: utf-8 -*-
"""
All rights reserved
create time '2020/4/28 14:56'Module usage:
注意点:输入法为英文
"""
import timeimport pyautogui
import pyperclippyautogui.FAILSAFE = True
# 函数每次执行后暂停的时间,因为可能存在 程序的变化(如postman)跟不上函数的执行速度 出现问题
pyautogui.PAUSE = 0.1def get_mouse_position():while True:mouse_x, mouse_y = pyautogui.position()print(mouse_x, mouse_y)time.sleep(1)def check_chinese(_str):"""检查是否存在中文:param _str::return:"""import reRE = re.compile(u'[\u4e00-\u9fa5]', re.UNICODE)match = re.search(RE, _str)if match is None:pyautogui.typewrite(message=f'{_str}')else:paste(_str)def paste(_str):"""对于中文进行 复制粘贴:param _str::return:"""pyperclip.copy(_str)pyautogui.hotkey('command', 'v')def str2list(_str):"""字符串转为list:param _str::return:"""return _str.split(' ')def postman_fill(_str):'''postman输入 http请求 body 参数名:param _str::return:'''# 获取需要输入的str list_list = str2list(_str)# 鼠标移动到指定位置并左击pyautogui.click(320, 376, button='left', duration=0.1)pyautogui.click(button='left')for item in _list:print(f'输入:{item}')check_chinese(item)for tab_item in range(3):pyautogui.press('tab')def api_doc_val_name_fill(_str):'''api文档输入参数名:param _str::return:'''# 获取需要输入的str list_list = str2list(_str)# 鼠标移动到指定位置并左击pyautogui.click(376, 906, button='left', duration=0.1)pyautogui.click(button='left')for item in _list:print(f'输入:{item}')check_chinese(item)for tab_item in range(7):pyautogui.press('tab')def api_doc_val_note_fill(_str):'''api文档输入参数的说明:param _str::return:'''# 获取需要输入的str list_list = str2list(_str)# 鼠标移动到指定位置并左击pyautogui.click(1061, 906, button='left', duration=0.1)pyautogui.click(button='left')for item in _list:print(f'输入:{item}')check_chinese(item)for tab_item in range(7):pyautogui.press('tab')if __name__ == '__main__':# postman输入 http请求 body 参数名postman_fill('a b c 你好 d')# api文档输入参数名# api_doc_val_name_fill('a b c')# api文档输入参数的说明# api_doc_val_note_fill('a1 b1 c1')# 获取鼠标当前位置# get_mouse_position()
相关链接:
https://github.com/asweigart/pyautogui