使用golang 做复杂流程自动化


本文摘自网络,作者doelle,侵删。

go webdriver

  • 首先说一下我最初想写这个的初衷。因为公司业务流程非常复杂,每次需求改动之后,在体测前的阶段,需要自己对整个流程进行串测一遍,但是因为业务流程非常复杂,自己走一遍流程需要2-3个小时,通常的状态是先去a平台,操作完业务之后,转向B 平台操作,再转向C app 操作…… 非常繁琐复杂。后来我思考是否可以通过程序控制浏览器,自动化流程测试,我查找了现有成熟的各个测试框架, 像seleniumpuppet 都非常成熟。但是考虑到复杂的流程,需要开发的工作量挺大,并且随着前端后端不断的迭代,自己编写的自动化代码需要不断的更新,想来也不是很合适。于是,我查找了webdriver的api , 自己编写一套适用于自己的业务需求的框架,每次迭代更新之后,只需要在后台中调整一下参数,启动一下,整个流程就能进行下去。 我把其中核心的部分驱动浏览器的一些方法打包,分享给大家,有些工作尚未完成,期待大家指正。

  • 项目地址:https://github.com/zhouzhe1157/go-webdriver.git

功能说明

go-webdriver 是使用golang 开发的一套基于 w3c-webdriver 协议开发的一套chrome 浏览器驱动, 该包依赖 chromedriver 浏览器驱动, chrome 浏览器, 用程序控制模拟用户操作浏览器,功能类似 selenium

用途

  • 模拟用户操作,配合用户操作,全自动化流程测试,或者半自动化测试
  • 页面数据抓取,而不需要进行各种复杂的破解

使用方法

  • 依赖

    • chrome 浏览器, 此处依赖 chrome 87.0.4280.141 chrome 87.0.4280.88 均正常(chrome 版本查看 chrome 设置 -> 帮助 -> 关于google chrome);
    • chromedriver chrome 浏览器驱动,下载和浏览器版本匹配的chromedriver。 下载地址:chromedriver。 使用 chromedriver 87.0.4280.88 等版本测试过正常;

    • 启动 chromedriver

      ./chromedriver --port=9515 --allow-ips=
      
  • 引用

    • go.mod中新增

      zhouzhe1157/go-webdriver => github.com/zhouzhe1157/go-webdriver v1.0.29
      
    • 加载依赖

      go mod tidy
      go mod vendor
      
  • 实例, 流程流转,只需要不断的增加action, 就可以实现流程的自动化流转

    //logDir := "E:\\logs\\" + util.RandString(16)
    opts := excutor.ChromeOptions{IsHeadless: false, UserDataDir:""}
    resp, err := driver.GetSession(opts)
    if err != nil {
        return err
    }

    // 构建单通道
    pip := pipline.Pipline{Data: pipline.PipData{Actions: []action.Action{}}}

    // 邮箱名称
    // len := util.RandInt(9, 14)
    // username := util.RandString(len)

    // 操作步骤
    action1 := action.Action {
        ActionName: "打开页面",
        ActionType: action.ACTION_NAVIGATETO,
        ActionTarget: "https://www.baidu.com",
    }

    action2 := action.Action {
        ActionName: "输入参数",
        ActionType: action.ACTINO_SEND_KEYS,
        ActionTarget: "#kw",
        ActionValue: "golang",
    }

    action3 := action.Action {
        ActionName: "搜索",
        ActionType: action.ACTION_CLICK,
        ActionTarget: "#su",
        ActionDelay: 1,
    }

    pip.Data.Actions = append(pip.Data.Actions, action1, action2, action3)
    _ = pip.SetSessionId(resp.SessionId).Start()
  • 示例 需要人为介入或者阻塞流程使用方法(等待用户输入了关键词之后,才会自动执行搜索操作)
    //logDir := "E:\\logs\\" + util.RandString(16)
    opts := excutor.ChromeOptions{IsHeadless: false, UserDataDir:""}
    resp, err := driver.GetSession(opts)
    if err != nil {
        return err
    }

    // 构建单通道
    pip := pipline.Pipline{Data: pipline.PipData{Actions: []action.Action{}}}

    // 邮箱名称
    // len := util.RandInt(9, 14)
    // username := util.RandString(len)

    // 操作步骤
    action1 := action.Action {
        ActionName: "打开页面",
        ActionType: action.ACTION_NAVIGATETO,
        ActionTarget: "https://www.baidu.com",
    }

    action2 := action.Action {
        ActionName: "输入参数",
        ActionType: action.ACTION_VIEW_VALUE,
        ActionTarget: "#kw",
        ExpectType: action.EXPECT_TYPE_EXIST,
    }

    action3 := action.Action {
        ActionName: "搜索",
        ActionType: action.ACTION_CLICK,
        ActionTarget: "#su",
        ActionDelay: 1,
        PreAction: &action2
    }

    pip.Data.Actions = append(pip.Data.Actions, action1, action3)
    _ = pip.SetSessionId(resp.SessionId).Start()

待完成功能

  • 更多版本浏览器,以及chromedriver的兼容
  • webdriver Command 支持完善
  • 更多场景的支持
  • 对多浏览器的支持

欢迎咨询,期待更多的小伙伴一起加入(QQ: 1157667735)


相关阅读 >>

手撸Golang 行为型设计模式 策略模式

Golang遇到高并发秒杀~

24 Goroutine channel实现并发和并行(一)

nginx 服务搭建

Golang实现选择排序

kubeedge v1.3部署指南

聊聊dapr的consistent hash

Golang语言学习之基本语法

Go实现字符串的逆序

3.树莓派常用软件&篇程语言&篇程环境(32位/64位)

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...