Github 的 PR 可以引入测试流程吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
AutumnVerse
V2EX    GitHub

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

  •  
  •   AutumnVerse 2024-04-28 11:01:13 +08:00 1828 次点击
    这是一个创建于 586 天前的主题,其中的信息可能已经有所发展或是发生改变。

    写了个开源项目,随着项目越来越大,项目 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
    kkhaike
        1
    kkhaike  
       2024-04-28 11:08:02 +08:00
    guanzhangzhang
        2
    guanzhangzhang  
       2024-04-28 11:19:16 +08:00
    你 makefile 里写对应 target 就行,至于什么中间件,你可以自己 compose 啥的启动,但是那样好像没看到啥开源项目这样搞。
    一般都是纯 go test 使用 github.com/golang/mock 之类的库做单元测试,很多开源项目里你看接口实现,跳转里你可以看到 mock 啥的实现的
    AutumnVerse
        3
    AutumnVerse  
    OP
       2024-04-28 11:51:05 +08:00
    @guanzhangzhang PR 创建的时候可以使用 action? 我在 action 说明里面确实找到了 PR 时触发,但是怎么保证 ation 成功才能合并呢?
    wdssmq
        4
    wdssmq  
       2024-04-28 14:07:22 +08:00
    @jiangwei2222

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

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

    Actions 当然可以用 PR 为 trigger ,并且可以设置所有的 Github Actions 流程必须通过之后,PR 才能合并(在 repo 设置里)
    AutumnVerse
        6
    AutumnVerse  
    OP
       2024-04-28 14:18:09 +08:00
    @wdssmq 请问是直接配一个 PR 类型的 action 就会在 PR 信息里面显示吗?我找了很久也没在 github 找到哪里有 PR 设置,看他这个 action 内容,也没有调用 api 设置 PR 评论
    AutumnVerse
        7
    AutumnVerse  
    OP
       2024-04-28 14:20:19 +08:00
    @BeautifulSoap '设置所有的 Github Actions 流程必须通过之后,PR 才能合并(在 repo 设置里)' 这个是必须配置 Action 才有设置吗,我没找到这个设置呢,现在项目有 release action
    crazzy
        8
    crazzy  
       2024-04-28 14:34:45 +08:00
    设置 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  
       2024-04-28 15:10:40 +08:00
    @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  
       2024-04-28 15:41:03 +08:00
    @jiangwei2222 #3 下面可以看 action 的绿色成功,成功就可以合并了,大项目的下面好多的,例如 rpm 打包,deb 打包,static 打包,单元测试,特定系统上跑单元测试啥的。都绿色后,没啥影响就可以决定合入了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5140 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 42ms UTC 09:26 PVG 17:26 LAX 01:26 JFK 04:26
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86