月度归档: 2021 年 2 月

  • 集成测试的测试覆盖率统计

    单元测试的覆盖率一般都很好处理,直接使用对应的jacoco插件即可。但是一个项目不单单只有单元测试,还有集成测试等其他类型的测试。对于这些测试类型,测试覆盖率的统计还需要稍微处理下。

    首先集成测试是在先将测试工程打包成jar包再封装到docker镜像中,考虑到操作性和便利性,肯定要挂在一部分主机目录到镜像中。具体的统计使用jacoco的agent模式,参数上只配置输出文件,其他都采用默认值。

    首先是下载jacoco的agent和cli工具到jacoco目录中

    mkdir jacoco && wget https://repo1.maven.org/maven2/org/jacoco/org.jacoco.agent/0.8.6/org.jacoco.agent-0.8.6-runtime.jar -O jacoco/jacoco.jar && wget https://repo1.maven.org/maven2/org/jacoco/org.jacoco.cli/0.8.6/org.jacoco.cli-0.8.6-nodeps.jar -O jacoco/jacoco-cli.jar

    docker镜像启动时挂在目录到/jacoco目录,并在JAVA_OPTS参数中新增

    -javaagent:/jacoco/jacoco.jar=destfile=/jacoco/jacoco.exec

    这样就会在jacoco目录生成jacoco.exec文件了。

    第二部就是把exec文件转为报告,一般是xml格式的,这一步使用jacoco-cli即可。

    java -jar jacoco/jacoco-cli.jar report jacoco/jacoco.exec --classfiles dubbo-admin-server/target/classes/ --sourcefiles dubbo-admin-server/src --xml jacoco/jacoco.xml

    具体目录按照需要调整,源代码不是必选项。

    最后就是计算变更等后续处理了,由于使用的是codecov平台,这里使用flag区别下集成测试和单元测试就行了。

    效果如图:

    …
  • reqwest交叉编译移除对于openssl的依赖

    对于有reqwest依赖的rust项目,如果使用的是cross进行交叉编译,比如

    cross build --target x86_64-unknown-linux-gnu --release

    会提示openssl找不到。

    虽然可以通过自定义镜像等方式提供openssl的依赖,让编译通过,但是更直接的方法是使用rustls。这是一个由纯rust编写TLS库。

    在Cargo.toml中修改reqwest依赖

    reqwest = { version = "0.11", features = ["json", "blocking", "rustls-tls"], default-features = false }

    在features中新增rustls-tls,同时禁用掉默认features。

    …