使用golang 做复杂流程自动化

doelle · · 2594 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

### go webdriver * 首先说一下我最初想写这个的初衷。因为公司业务流程非常复杂,每次需求改动之后,在体测前的阶段,需要自己对整个流程进行串测一遍,但是因为业务流程非常复杂,自己走一遍流程需要2-3个小时,通常的状态是先去a平台,操作完业务之后,转向B 平台操作,再转向C app 操作…… 非常繁琐复杂。后来我思考是否可以通过程序控制浏览器,自动化流程测试,我查找了现有成熟的各个测试框架, 像`selenium`,`puppet` 都非常成熟。但是考虑到复杂的流程,需要开发的工作量挺大,并且随着前端后端不断的迭代,自己编写的自动化代码需要不断的更新,想来也不是很合适。于是,我查找了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](https://npm.taobao.org/mirrors/chromedriver/)。 使用 `chromedriver 87.0.4280.88` 等版本测试过正常; * 启动 chromedriver ```golang ./chromedriver --port=9515 --allow-ips= ``` * 引用 * 在`go.mod`中新增 ```golang zhouzhe1157/go-webdriver => github.com/zhouzhe1157/go-webdriver v1.0.29 ``` * 加载依赖 ```golang go mod tidy go mod vendor ``` * 实例, 流程流转,只需要不断的增加action, 就可以实现流程的自动化流转 ```golang //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() ``` * 示例 需要人为介入或者阻塞流程使用方法(等待用户输入了关键词之后,才会自动执行搜索操作) ```golang //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)

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2594 次点击  ∙  1 赞  
加入收藏 微博
被以下专栏收入,发现更多相似内容
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传