最近在项目中在配置CodeCov
以及Travis
和 AppVeyor
做持续集成时,遇到了一些问题,也解决了一些问题。顺便拿来分享一下。
首先时Travis,这个主要是来跑基于 Linux 环境下的一些测试的。你可以自定义push到 master上 或者 进行 pull request 时自动进行。
其次时 AppVeyor 这个我在项目中主要是来跑Windows环境的,虽然说这个两个环境都可以跑。
还有时 CodeCov 这个用来你的代码测试用例的可视化的,查看代码的覆盖率。
下面就是各个 .yaml 文件的大致配置:
# .travis.yml
language: csharp
sudo: true
mono: none
dotnet: 2.2
dist: xenial
branches:
only:
- master
install:
- dotnet tool install --global altcover.visualizer
- cd Tests/ && dotnet add package AltCover && cd ../
- dotnet restore
script:
- dotnet build
- if [ $ACCESS_KEY_ID == "" ]; then dotnet test --filter Category!=FeatureTest /p:AltCover=true; else dotnet test /p:AltCover=true; fi
after_success:
- cd Tests/
- bash <(curl -s https://codecov.io/bash) -c -F unittest
# .appveyor.yml
version: "1.0.{build}"
image: Visual Studio 2017
branches:
only:
- master
init:
- cmd: git config --global core.autocrlf true
install:
- cmd: dotnet --version
- cmd: dotnet tool install --global altcover.visualizer
- cmd: cd Tests/ && dotnet add package AltCover && cd ../
build_script:
- cmd: dotnet restore
- cmd: dotnet build
test_script:
- dotnet build
- IF NOT DEFINED ACCESS_KEY_ID (dotnet test aliyun-net-sdk-core.Tests /p:AltCover=true) ELSE (dotnet test /p:AltCover=true)
on_finish:
- cmd: cd Tests
- ps: |
$env:PATH = 'C:msys64usrin;' + $env:PATH
Invoke-WebRequest -Uri 'https://codecov.io/bash' -OutFile codecov.sh
bash codecov.sh -f "coverage.xml" -c -F unittest
#.codecov.yml
codecov:
notify:
after_n_builds: 2
coverage:
status:
project:
default: off
unittest:
flags: unittest
target: 85%
featuretest:
flags: featuretest
flags:
unittest:
# only test unittests
paths:
- Tests/
featuretest:
# only test featuretest
paths:
- feature-test/
之前有一个需求是,执行具体的测试的时候不进行CodeCov, 比如进行 Feature Test 的时候就不用进行 Codecov,那么在配置文件中如何配置呢?
这就需要使用 Codecov 的Flag 标签,执行测试的时候指定具体要执行的目录和标签。就可以解决这个问题了。
flags:
unittest:
# only test unittests
paths:
- Tests/
然后在生成时改成这个命令即可: bash codecov.sh -f "coverage.xml" -c -F unittest