V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jiangwei2222
V2EX  ›  GitHub

Github 的 PR 可以引入测试流程吗?

  •  
  •   jiangwei2222 · 13 天前 · 595 次点击

    写了个开源项目,随着项目越来越大,项目 bug 越来越多,因此想在 PR 流程中引入自动化测试,自动化测试全部通过才允许合入。

    期望:

    1 、单元测试( go 项目,也就是执行一下 go test )

    2 、接口测试

    目前我们公司内部的接口测试工具,启动测试的时候自动创建 redis 、mysql 等等容器,然后启动项目,执行测试 case

    比如有一个登录接口,在测试工具中我可以创建登录接口,然后指定登录账号密码,然后断言接口返回值。登录成功的话可能还会在 redis 记录 token ,在 mysql 记录登录日志。然后断言也能写 redis key ,mysql 查询语句,然后断言返回值

    登录成功后的 token 、session 等数据传给后续用例使用

    测试 case 可以设置分组、并行执行(主要是测试效率,比如我们 5 万+测试 case ,10 分钟可以跑完,不影响代码合入效率)

    我找了一圈,接口测试好像都没有类似的工具?想来问问开源项目中有没有类似的工具,并且能够引入 Github PR 流程的?

    11 条回复    2024-04-28 15:41:03 +08:00
    guanzhangzhang
        2
    guanzhangzhang  
       13 天前
    你 makefile 里写对应 target 就行,至于什么中间件,你可以自己 compose 啥的启动,但是那样好像没看到啥开源项目这样搞。
    一般都是纯 go test 使用 github.com/golang/mock 之类的库做单元测试,很多开源项目里你看接口实现,跳转里你可以看到 mock 啥的实现的
    jiangwei2222
        3
    jiangwei2222  
    OP
       13 天前
    @guanzhangzhang PR 创建的时候可以使用 action? 我在 action 说明里面确实找到了 PR 时触发,但是怎么保证 ation 成功才能合并呢?
    wdssmq
        4
    wdssmq  
       13 天前
    @jiangwei2222

    https://github.com/DIYgod/RSSHub/pull/15395

    执行结果会在相应 pr 下显示,人工目视决定要不要合。。
    BeautifulSoap
        5
    BeautifulSoap  
       13 天前 via Android
    GitHub Actions 了解下。我司基本大部分 CI/CD 都已经全交给 Github Actions 来做了,比 Jenkins 好用太多了真的(除了调试太地狱)

    Actions 当然可以用 PR 为 trigger ,并且可以设置所有的 Github Actions 流程必须通过之后,PR 才能合并(在 repo 设置里)
    jiangwei2222
        6
    jiangwei2222  
    OP
       13 天前
    @wdssmq 请问是直接配一个 PR 类型的 action 就会在 PR 信息里面显示吗?我找了很久也没在 github 找到哪里有 PR 设置,看他这个 action 内容,也没有调用 api 设置 PR 评论
    jiangwei2222
        7
    jiangwei2222  
    OP
       13 天前
    @BeautifulSoap '设置所有的 Github Actions 流程必须通过之后,PR 才能合并(在 repo 设置里)' 这个是必须配置 Action 才有设置吗,我没找到这个设置呢,现在项目有 release action
    crazzy
        8
    crazzy  
       13 天前
    设置 Pull Request 触发的 Action 语法

    ```yaml
    on:
    pull_request:
    ```

    还可以具体一点的设置是打开、关闭 PR 的时候触发 https://github.com/DIYgod/RSSHub/blob/master/.github/workflows/lint.yml


    ---


    强制 Action 成功后合并,印象中 GitHub 似乎是没有的,但是 GitLab 有。

    不过可以换个思路去理解,有合并权限的基本上都有写权限,既然有写权限,那么就算 CI 不成功他可以直接写进去啊 ;)

    GitLab 的权限是比较严格的。针对目录、文件级别的权限,必须要指定哪些人审核了才行,还可以强制指定需要审核同意数量。


    ---

    简而言之就是,如果不是很多人天天专职在一个仓库提交,因为这个浪费的时间很多,没必要折腾这个。等你觉得这是必需品了再去折腾。开源的东西,就 GitHub Action 差不多就够了。

    当然也不是没有人觉得不够,他们选择自建 CI/CD ,例如 Kubernetes 就不用 GitHub Action 。但是他们的 CI/CD 是结合 Workflow 的,更进一步。
    BeautifulSoap
        9
    BeautifulSoap  
       13 天前
    @jiangwei2222 Repo 的 Settings - Branches , 然后为指定分支或者用通配符设置分支保护,分支保护选项里勾上 "Require status checks to pass before merging"。顺便还能勾上 "Require a pull request before merging", "Require conversation resolution before merging" 等选项加强限制( Github Actions 能很简单地配合 linter 自动给 pr 做 code rebview ,然后直接以 code 评论地形式指出代码里不符合 linter 规范的地方,配合分支保护里的设置能很好处理 pr )
    guanzhangzhang
        11
    guanzhangzhang  
       13 天前
    @jiangwei2222 #3 下面可以看 action 的绿色成功,成功就可以合并了,大项目的下面好多的,例如 rpm 打包,deb 打包,static 打包,单元测试,特定系统上跑单元测试啥的。都绿色后,没啥影响就可以决定合入了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3017 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 14:00 · PVG 22:00 · LAX 07:00 · JFK 10:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.