• 4
  • 3
分享
  • 5个步骤,轻松获取代码覆盖率报告
  • 曼倩诙谐 2020-11-06 10:08:55 字数 2050 阅读 2528 收藏 3


  小编前期所测项目多为go语言研发,为了获取自动化测试代码覆盖率及报告,调研并使用go test进行覆盖率统计。现将实战过程留档,并分享出来以供有需要小伙伴参考。

  获取流程如下:

Y1.png


  各个阶段详细介绍有:

  1、创建main函数的test文件

  想要获取覆盖率,首先要创建main.go文件相应测试文件main_test.go,在main_test.go中使用一个端口,该端口可以控制服务在运行完测试用例后退出并将内存中的覆盖率信息写入文件。端口写在源码中,使得每次修改都要重新编译才生效。此处使用配置文件管理控制端口,修改方便且直观。该控制端口在配置文件main_test_port.toml中管理,配置文件格式举例有:

  [common]
  port = 8888

  main_test.go中控制逻辑有监听端口,接收到信号后主动提出应用。写出main_test.go完整内容。

func startServer(){
      go main();
  }
  func TestExternal(t *testing.T){
  // start server need be tested in separate go thread
  go startServer()
  // go test starts a dummy http server, which is used to
  // end the current. go test gracefully when it is accessed
  http.HandleFunc(“/”, testHandler)
  fdir := getExecutePath()
  fpath := fdi+ “/../conf/testing/main_test_port.toml”
  var conf Config
  if _, err := toml.DecodeFile(fpath, &conf); err != nil {
      fmt.Println(“decode config file err”)
  }
  port := conf.Common.Port
  go http.ListenAndServe(“:” + port, nil)
  exitChan = make(chan int)
  sigChan := make(chan os.Signal)
  signal.Notify(sigChan, os.Interrupt)
  select{
  case sig := <-sigChan:
      fmt.Printf(“exit as received signal:%v\n”, sig)
  case val := <-exitChan:
      fmt.Printf(“exit as received http request:%v\n”, val)
  }
  }

  2、插桩方式编译源码

  该阶段通过工具既定命令编译源码,生成打桩了的可执行文件。运行打桩的可执行文件,才能采集到测试用例所覆盖的代码逻辑。我们用到的编译命令有。

  go test –c –covermode=count -coverpkg src –o main.test

  其中,-o main.test指定编译产出的名称为main.test;-covermode指定覆盖模式,count标识记录语句执行;coverpkg 指定统计的源码目录集合,各项之间以英文逗号连接。 

  3、运行主服务

  命令行格式运行打桩版本编译产出,并指定生成覆盖率统计数据写入coverage.out中,指定命令如下。

 ./main.test –test.coverprofile coverage.out

  服务启动后,占用两个端口:一个为原本可接受http请求的端口;另外一个为步骤1中使用的控制端口。

  4、执行测试用例

  执行项目自动化用例。小编所在团队用例使用robot编写,此处可通过平台或者命令行执行可用用例。

  5、优雅退出主服务,并生成覆盖率报告

  向控制端口发送中断信号后,主服务优雅退出,并生成步骤3中指定命名为coverage.out的覆盖率文件。通过curl命令发送中断信息,命令有

  curl ip:port

  其中,ip为服务运行机器的ip地址;port为步骤1中指定的控制端口。

  当前生成的coverage.out文件仅记录各个文件的覆盖行数等信息,可读性差。通过现用工具将coverage.out作为数据源,为每个源码文件生成一个对应的html报告文件,样式见下图。

Y2.png

  其中,各行通过不同颜色标识是否被覆盖,绿色标识被覆盖,红色表示未覆盖。

  为了使得各个服务的各个版本的覆盖率报告可历史遍历,可将数据留档至数据库中,将实现一个前端平台展示。



作者:郝继飞   

来源:51Testing软件测试网原创

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   今年,Google将提前两个月,于 8 月 13 日举行年度硬件发布会。届时,除了Pixel 9 系列手机,Pixel Watch 3也有望亮相。Pixel Watch 将首次推出两种尺寸--这已经得到了 FCC 的确认。今天,一则新的消息透露了更多细节,据称该消息来自Google内部。据说,Pixel Watch 3 将使用骁龙 W5 SoC,并搭配一个定制的协处理器。  41 毫米的 Watch 3 配备了 310 毫安时电池,而 45 毫米的型号将配备 420 毫安时电池,较小的 Watch 3 显示屏尺寸为 32x32 毫米(比Pixel Watch 2 的 30x30 毫米大),...
            0 0 359
            分享
          • 背景近期团队打算做一个小程序自动化测试的工具,期望能够做到业务人员操作一遍小程序后,自动还原之前的操作路径,并且捕获操作过程中发生的异常,以此来判断这次发布是否会影响小程序的基础功能。上述描述看似简单,但是中间还是有些难点的,第一个难点就是如何在业务人员操作小程序的时候记录操作路径,第二个难点就是如何将记录的操作路径进行还原。自动化 SDK如何将操作路径还原这个问题,首选官方提供的 SDK: miniprogram-automator。小程序自动化 SDK 为开发者提供了一套通过外部脚本操控小程序的方案,从而实现小程序自动化测试的目的。通过该 SDK,你可以做到以下事情:控制小程序跳转到指定页...
            0 0 3785
            分享
          • 读者提问:有没有一款工具是集 API 文档、API 调试、API Mock、API 自动化测试四种功能为一身的 ?公司现状是这样:开发定义 API 使用 Swagger,后端开发调试 API 使用 Postman,前端 API 数据 Mock 使用 RAP,测试做 API 自动化测试或压力测试使用 Jmeter。开发团队协同效率很低,接口变更了往往做不到各方同步,很让人崩溃。阿常回答:有,Apifox。Apifox 就是 API 文档、API 调试、API Mock、API 自动化测试一体化协作平台,定位 Postman + Swagger + Mock + JMeter。官网链接:https...
            0 0 1303
            分享
          •        在当今移动互联网盛行的时代,网络的形态除了有线连接,还有2G/3G/4G/5G/WiFi等多种手机网络连接方式。不同的协议、不同的制式、不同的速率,使移动应用运行的场景更加丰富。目前移动端产品的使用用户所处的网络并非完全流畅的网络环境,因移动端产品使用场景多变,如进地铁、上公交、进电梯等,使得弱网测试显得尤为重要。毕竟考虑到各种场景的客户端展示及容错,能极大提升产品印象和用户体验。本文就和大家分享一下如何上手弱网测试,弱网测试工具的使用。1. 什么是弱网测试?       弱网测试作为健壮性测试的重要...
            12 12 3169
            分享
          •   对于有能力的人,除了金三银四、金九银十换工作的季节外,任何时刻都可能出现机会,准备了大半年终于到了换工作的时机。在此给大家分享下个人面试前后的一些准备工作以及面试过程中的一些常见问题分析。  测试思维  面试中很经常看到一个问题就是“给你一个登录页面/给你一根笔,你怎么测试?”,实际上面试官主要考察的是你的测试思维,这个时候你要从以下几个方面去回答:UI测试、功能测试、用户体验、安全性、性能等等几个方面去考虑。然后每个方面进行扩展,简单讲述几个用例即可。  1.熟练背好测试思维的几个方向  背好测试思维的几个方向的目的,是希望在面对面试官问题的时候,你能有条不紊的阐述你的测试思路,除了减少...
            0 0 1207
            分享
      • 51testing软件测试圈微信