Macaca 如何给开源项目做贡献

Super-Ps · August 14, 2019 · Last by xdf replied at September 29, 2019 · 6062 hits
本帖已被设为精华帖!

为什么我会参与开源项目

从事测试工作以来,熟悉目前主流的 JavaScript 系,Python 系,以及Java 系的各类测试框架,在实际项目落地过程中发现只是语法不一样,提供的 API 的功能都大同小异,对于自定义的功能都有着同样的局限,需要扩展。随着现在产品功能迭代加快对测试的快速验证能力越来越高,从而需要有对测试框架有扩展功能和对整个持续交付,部署集成的能力。

正好我在公司负责落地不同维度的自动化实施,对比单元,接口而言 UI 的落地具有特殊性。因为我们的产品是基于 Electron 封装的跨平台应用,于是顺手研究 Electron 并做了 Demo 发现本质上也是基于 Chrome 的,那当然是可以采用业界主流 SE 加上各种不同的测试驱动框架来完成,于是把当前能做 Electron 测试的找了个遍,只发现 Macaca 有这样的功能,眼前一亮,一顿操作之后发现并不支持路劲参数,也就是调不起来应用,查阅了一下 Electron 官网在测试和调试找到了 Spectron,WebDriverJs,WebdriverIO 三种不同的做法,其中就有 SE 支持的驱动库 WebDriverJs,于是就开始做了....

技术栈与公司保持一致(node),第一次尝试:采用了 Mocha +Selenium-webdriver,除了依赖的驱动版本需要手动指定以外其他正常使用,相信使用过 SE 的同学都有个心烦的事,就是下载的驱动版本与 Chrome 的版本对不上,然后要去手动找版本,如果你本地更新了又得找版本,Macaca 也有同样的问题,所以这是1个问题。虽然折腾1下也能用,但是发现用了测试框架那么多种,在实际落地之后会发现为了满足多端跨平台的需求导致了测试框架种类多,形态各异,一听就知道维护是个大问题,且对于新手来说学习成本较高,所以开始了第二次尝试采用 Macaca 实现。但是之前也说过 Macaca 对 electron 应用支持不彻底,要是彻底支持 ElectronApp 就完美的解决了 UI 的全平台支持了,而且随着 JavaScript 各个端的发展 Electron 成为桌面解决方案的主流,当遇到基于 ElectronApp 的应用时,相信会有更多的测试同学跟我面临一样得问题。

所以,如果希望 Macaca 全面的支持 Electron,需要解决如下问题:1.将现有的 selenium-webdriver 集成在 Macaca 的依赖中,像安装移动端,Web 端那样简单,不用再到处找解决方案,使得他们变成1个整体;2.解决自动下载对应的驱动版本,且支持不同平台。明白了要做什么之后剩下的就是解决问题,开始干!

提起pr的过程描述

以 macaca-chromedriver 项目举例:

  1. 先确认此项目还有人维护,不然浪费自己精力

  2. 检查已经存在的 issues 和 pull requests,确保不要做别人已经在做的事情

  3. 找到项目 macaca-chromedriver 点击 Fork,在你的Github主页也会存在此项目的拷贝,一定要先 Fork!我忽略了这一步,然后在坑里蹲了一会...

  4. 将 macaca-chromedriver Fork 的项目本地 Clone; 我的是git clone https://github.com/Super-Ps/macaca-chromedriver.git

  5. 进入刚才 Clone 的 Macaca-chromedriver 项目,建立本地仓库跟原始项目的的链接:git remote add upstream https://github.com/macacajs/macaca-chromedriver.git这样可以随时从原始项目pull最新的内容

  6. 查看远程仓库列表此时应该有2个仓库,一个你Frok的项目,一个原始的项目,我的是这样的:

$ git remote -v
origin https://github.com/Super-Ps/macaca-chromedriver.git (fetch)
origin https://github.com/Super-Ps/macaca-chromedriver.git (push)
upstream https://github.com/macacajs/macaca-chromedriver.git (fetch)
upstream https://github.com/macacajs/macaca-chromedriver.git (push)

  1. 想好要修改文件之前,先创建一个分支,且切换在该分支上 git checkout -b BRANCH_NAME

  2. 现在可以修改项目了,要清楚现在是在你自己Fork的项目上操作的,跟原始的项目没暂时没关系,所以自己 push到Fork项目之前,要从原始项目拉1次最新代码,比如我这里的远程upstream 仓库pull最新的修改。

  3. 修改并提交完成之后,推送 git push origin BRANCH_NAME,这个分支名 是你 Fork 项目时创建的分支,现在是往 Forx 上 push,不是原始的仓库。

  4. 现在可以 pull request 了,打开你的 github Fork 的 macaca-chromedriver 项目 ,点击 new pull request ,可以查看原始项目和你 Fork 项目的不同分支,查看对比你修改的部分,如果你确定你的提交是没有问题的,点击确定,等待作者的反馈

  5. 收尾工作,如果贡献代码被采用合并了,或者被拒绝了,就可以删除本地分支了: git branch -D BRANCH_NAME ,删除 GitHub 上的分支: git push origin --delete BRANCH_NAME ,如果需要同步源项目代码到 Fork 项目 ,先把代码从源项目更新到最新 git pull upstream master 合并git merge upstream/master 再 push 到 Fork 项目上 git push origin master

总结

在 PR 过程中频频被拒绝的几个问题以及反思:

问题1

代码逻辑混乱,有鸡肋,因为怕改动原有逻辑导致扩展写的复杂且重复; 反思:需要深刻梳理你所修改的功能的整体性,保持代码简洁,不能只顾实现而修修补补。

问题2

let const var 不规范使用; 反思:加深对JavaScript 规范不断的熟悉。

问题3

本地测试一顿提交,长如葫芦串,还没实际意义;反思:需要提交时做到有意义的提交,一个功能一个提交,便于其他维护者查看。

当别人在看你写的代码并给你指出问题的时候,总有那么点不好意思或者很慌张,但是我们都知道这是一种成长,何况还是大神看你的代码,且先收起畏惧,并谦虚的接受并改正,勇敢的面对自己的不足。我跟很多人刚开始心态一样,我们就用用别人的东西就好了,开源项目还看要看源码好难,麻烦,没时间,没决心,其实当你勇敢的前进第一步可能会信心倍增!激增你的兴趣,学习了别人的思路,也提高了代码质量,拉开了与其他只会调 api 测试的距离,更重要的是帮助了更多的人。

接下来的计划

目前只是完善了问题2的版本问题,还剩余对 LIUNX ,WIN 的支持,还需要将 macaca-chromedriver 作为依赖 做成1个支持 Electron 的驱动。

完成 Electron App 方案的开发,给开源社区贡献的同时能给有基于同样需求的同学收益,希望有更多有开源精神的同学加入!

最佳回复

不错,最近的TTF建设也需要这种类似的教程

坚持下去,期待把完整的方案带给大家。

这几天跟 @Lihuazhang @chenhengjie123 交流过如何引导和鼓励更多同学参与到中文社区开源项目来,有社区组织这块应该会越做越好的。

共收到 11 条回复 时间 点赞
Super-Ps 关闭了讨论 15 Aug 19:23
Super-Ps 重新开启了讨论 15 Aug 19:23

坚持下去,期待把完整的方案带给大家。

这几天跟 @Lihuazhang @chenhengjie123 交流过如何引导和鼓励更多同学参与到中文社区开源项目来,有社区组织这块应该会越做越好的。

不错,最近的TTF建设也需要这种类似的教程

陈恒捷 将本帖设为了精华贴 15 Aug 22:55

赞思寒

xdf 回复

👍

加油加油!!!希望有一天我也能如此厉害

深入浅出,搞起来!

@yoyo0322 @Minguanz 不要闲置你们的github账户哦 💪

xdf 回复

赞达峰😂

楼主的行为会给很大一批测试童鞋带来继续学习的动力(包括我),作为技术工作者本该具备这种钉子精神,只有不断的钻研才能成就不一样的自我,希望楼主后续能给大家分享更多的经验,一起学习成长。。。💪 💪 💪

Super-Ps 使用 Macaca 测试 Electron 桌面 App 中提及了此贴 26 Sep 22:29
需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up