• golang代码覆盖率


    写了自动化,就得统计代码覆盖率= =

    原链接:https://www.elastic.co/blog/code-coverage-for-your-golang-system-tests

    其实看了原链接我并没有能成功统计出来,还是看了同事的笔记才成功的。

    操作步骤 -- 按我实际操作的步骤写的

    1 创建main函数的test文件

    2 编译代码,生成可执行文件

    3 统计覆盖率

    一  Main函数的test文件

    package main
    // This file is mandatory as otherwise the filebeat.test binary is not generated correctly.
    import (
      "testing"
      "flag"
    )
    var systemTest *bool
    func init() {
      systemTest = flag.Bool("systemTest", false, "Set to true when running system tests")
    }
    // Test started when the test binary is started. Only calls main.
    func TestSystem(t *testing.T) {
      if *systemTest {
         main()
      }
    }

    注意:

    1 命名:看一下自己代码的main()函数所在的go文件名称,直接命名为*_test.go文件即可;  比如,代码文件名 main_server.go,可直接命名为main_server_test.go

    2 目录:放在与被测文件同目录下 @1

    二  编译代码

    1  查看main函数,将其中的os.Exit()更改为return (根据实际情况分别为return/return 0/return 255...)

    2 原编译命令为go build

      此处使用命令go test -c -covermode=count -ldflags "-X main._VERSION_=$VERSION.${reversion}"  -coverpkg  ./gopath/src/mvdsp/module/,./gopath/src/mvdsp/extractor/,./gopath/src/mvdsp/mvutil/,./gopath/src/mvdsp/protocol/ -o dsp_server.test

    ① -c 表示 生成测试二进制文件

    ② -covermode=count 表示 生成的二进制中包含覆盖率计数信息

    ③ -ldflags 用来将版本信息写入二进制文件,而不使用额外的version文件

    ④ -coverpkg 后面是要统计覆盖率的文件源码

    ⑤ -o 后面是输出的二进制文件名

    ⑥ ......可能还有更多的可用参数,我就不知道了

    3 执行命令,生成一个可执行的二进制文件,拷贝到部署目录下

    4 启动服务,在启动命令后加参数: -systemTest -test.coverprofile coverage/coverage.cov

    ① -systemTest 用来启动前面说过的main test

    ②  -test.coverprofile 用来指定覆盖率信息写入到哪个文件

    三  统计覆盖率

    1 执行自动化

    2 执行如下命令,生成覆盖率文件coverage.cov

    pid_server=`ps -ef | grep "my_server -systemTest" | grep -v "grep" | awk '{print $2}'`
    kill $pid_server

    覆盖率产生的条件是程序需要正常退出/结束, 因此当自动化运行完毕后,我们需要给程序发送消息表示结束才可以得到覆盖率文件

    对此:go是需要return,即可以kill server_pid(若服务使用supervisor启动,还会自己拉起来,不会影响后续调用)

               c/c++ 是需要exit?,发送p __gcov_flush(),见http://www.cnblogs.com/zhaoxd07/p/5608177.html

               python需要触发atexit模块注册一个回调函数,可使用CTRL+C或者kill -2

    3 生成测试报告 

    go tool cover -html=./coverage/coverage.cov -o /data/reports/coverage.html
    ./coverage/gocover-cobertura < coverage.cov > /data/reports/coverage.xml  

    生成xml报告时需要安装一个小插件:go get github.com/t-yuki/gocover-cobertura

    将bin下的gocover-cobertura放到方便执行的目录下即可使用

    4 将测试报告集成到jenkins,大功告成啦

  • 相关阅读:
    ATL正则表达式库使用
    用InternetOpen()的下载者
    获取IWebBrowser2指针的方法
    IE自动登陆-Navigate篇
    用WinInet开发Internet客户端应用指南
    VC中的GetKeyState和GetAsyncKeyState的区别
    通过IWebBrowser2的Navigate2来打开网页,怎样判断网页是否全部加载完毕
    利用IWebBrowser2接口的Navigate2方法实现Http POST传输
    IE撤销机制CtrlZ功能会在由于Js动态改变页面元素失效
    Web安全渗透测试之信息搜集篇(下)
  • 原文地址:https://www.cnblogs.com/zhaoxd07/p/8028847.html
Copyright © 2020-2023  润新知