使用自动化脚本工具pyautogui在postman/接口文档 等实现参数名快速填写

痛点:一个接口十几个甚至几十个业务字段 使用postman进行测试,或者写接口文档时,在填写这些字段名时就要耗费很久并且很弱智的复制粘贴

解决方法:使用 pyautogui工具 省去重复性工作

平台:macbook pro 16-inch

注意点:

  • 在使用windows时,快捷键 和 macos不同;
  • 运行脚本时,输入法应该为英文
  • 运行脚本时,尽量不要动 鼠标键盘
  • 脚本中的 鼠标开始点击的位置 按照各自屏幕大小进行修改
  • 脚本每个函数的入参 使用空格分开,因为 我使用了Alfred的追加复制功能

 

效果图如下:

postman如下(为了图片大小限制,有些模糊):

接口文档(用的 https://kl3s.w.eolinker.com/ ) 变量名 效果图(因为动图过大,改为只循环一次,请刷新查看):

使用自动化脚本工具pyautogui在postman/接口文档 等实现参数名快速填写_第1张图片

接口文档 参数的说明 效果图(因为动图过大,改为只循环一次,请刷新查看):

使用自动化脚本工具pyautogui在postman/接口文档 等实现参数名快速填写_第2张图片

 

安装方式:

pip install pyautogui

 

脚本如下: 

# -*- coding: utf-8 -*-
"""
All rights reserved
create time '2020/4/28 14:56'

Module usage:
注意点:输入法为英文
"""
import time

import pyautogui
import pyperclip

pyautogui.FAILSAFE = True
# 函数每次执行后暂停的时间,因为可能存在 程序的变化(如postman)跟不上函数的执行速度 出现问题
pyautogui.PAUSE = 0.1


def 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 re
    RE = 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

 

 

你可能感兴趣的:(pyautogui,python,python)