您正在查看: Other-新手教程 分类下的文章

Go多个pkg的单元测试覆盖率

在go test命令后面添加 -cover参数开启测试覆盖率统计,其结果如下:

ok models 0.012s coverage: 71.4% of statements in models

-coverpkg 标记来指定要被统计的代码包之后,未被指定的代码则肯定不会被统计,即使是被直接测试的那个代码包。go test -coverpkg=./... pkg2可以跑pkg2下的所有单元测试及pkg2所用到的其他包的覆盖率情况。
但是由于go不支持go test -coverpkg=./... ./...如果我们有多个pkg,则无法一次性统计出所有的测试覆盖率和跑完全部单元测试。所以需要挨个跑完单元测试然自己来合并覆盖率的结果:

src
├── pkg1
│   ├── pkg11
│   └── pkg12
└── pkg2
    ├── pkg21
    └── pkg22

go test -coverprofile=pkg1.cover.out -coverpkg=./... pkg1
go test -coverprofile=pkg1.cover.out -coverpkg=./... pkg2

-coverprofile用来指定统计测试覆盖率信息的输出路径,其内容如下:

mode: set
models/bot.go:32.40,46.18 12 1
models/bot.go:49.2,57.35 5 1
...

第一行是测试覆盖的mode,可取值为:set,count,atomic。剩下的行遵循以下的格式:
name.go:line.column,line.column numberOfStatements count
所以对每个pkg跑完单元测试后可以用以下的命令来合并:

echo "mode: set" > coverage.out && cat *.cover.out | grep -v mode: | sort -r | \
awk '{if($1 != last) {print $0;last=$1}}' >> coverage.out

然后用go自带的工具来将其输出为HTML:
go tool cover -html=coverage.out -o cover.html
把整个流程串起来写成脚本如下:

#!/bin/bash

set -e

profile="cover.out"
htmlfile="cover.html"
mergecover="merge_cover"
mode="set"

for package in $(go list ./...|grep -v src); do
    coverfile="$(echo $package | tr / -).cover"
    go test -covermode="$mode" -coverprofile="$coverfile" -coverpkg="$package" "$package"
done

# merge all profiles
grep -h -v "^mode:" *.cover | sort > $mergecover

# aggregate duplicated code-block data
echo "mode: $mode" > $profile
current=""
count=0
while read line; do
    block=$(echo $line | cut -d ' ' -f1-2)
    num=$(echo $line | cut -d ' ' -f3)
    if [ "$current" == "" ]; then
        current=$block
        count=$num
    elif [ "$block" == "$current" ]; then
        count=$(($count + $num))
    else
        echo $current $count >> $profile
        current=$block
        count=$num
    fi
done < $mergecover

if [ "$current" != "" ]; then
    echo $current $count >> $profile
fi

# save result
go tool cover -html=$profile -o $htmlfile
go tool cover -func=$profile

转载自:https://singlecool.com/2017/06/11/golang-test/

HECO节点升级v1.2.0注意事项

  1. 默认会开启snapshot加速结构,首次生成过程会非常慢,并且(若节点性能较差)可能导致节点无法实时跟上最新区块高度。建议临时升级服务器配置
  2. 节点可能遭遇 “BAD BLOCK” 问题,并导致区块停止同步。此问题由以太坊 Geth v1.10.8 引入,并已有以太坊用户报告,详见这里 https://github.com/ethereum/go-ethereum/issues/23531 及这里 https://github.com/ethereum/go-ethereum/issues/23546
    此问题跟首次生成snapshot这个过程有关,并且只是偶尔出现。主要有两种方案处理此问题:
    (1)遇到此问题时,重启节点,重启后预期就可以恢复正常并可继续同步区块;
    (2)若对此问题敏感,可以在节点启动时加入参数 “ --snapshot=false" 以禁用快照加速结构,直到此问题完全解决,再尝试开启。
  3. 新版本配置项有变更,DiscoveryURLs 已删除,取而代之的是两个配置项:EthDiscoveryURLs 和 SnapDiscoveryURLs。若之前有提供 DiscoveryURLs,建议可直接删掉该项。

《关于防范虚拟货币交易炒作风险的公告》

近期国务院金融稳定发展委员会再次明确针对虚拟币的严监管态度,中国互联网金融协会、中国银行业协会、中国支付清算协会联合发布了《关于防范虚拟货币交易炒作风险的公告》,BCSkill区块链中文技术社区成员必须严格遵守相关政策,社区内禁止一切虚拟货币交易炒作,如有不同意者请自行退出,如有违规,群管理有权立刻踢出。区块链技术社区存在的意义是为大家提供一个纯技术交流讨论和互相学习的环境。请大家珍惜一起学习的环境和机会。

https://baijiahao.baidu.com/s?id=1700566758712252608

Ubuntu 安装或更新对应版本cmake

编译对应版本的cmake

sudo apt update
sudo apt-get install -y build-essential libssl-dev
wget https://github.com/Kitware/CMake/releases/download/v3.19.2/cmake-3.19.2.tar.gz
tar -zxvf cmake-3.19.2.tar.gz
cd cmake-3.19.2/
./bootstrap
make

安装

sudo make install

sudo ln -sf /usr/local/bin/* /usr/bin/
sudo ln -sf /usr/local/bin/* /home/${USER}/bin/

查看版本

cmake -version