1.Jenkins CI 持续集成
2.SonarQube 静态扫描
3.写了Python项目的单元测试
4.及单元测试覆盖率的统计
继续说明后面的3点,先说Python项目单元测试
单元测试
测试用例场景
准备测试数据和初始化测试对象的阶段
所有用例开始之前初始化测试数据或对象
所有用例结束之后销毁测试数据或对象
每个用例开始之前初始化测试数据或对象
每个用例结束之后销毁测试数据或对象
在每个/所有module的用例开始之前初始化数据或对象
在每个/所有module的用例开始之后销毁数据或对象...
参数化
参考资料直接看这个链接,这里讲的不错
常见套路
示例
SonarQube
代码静态分析
Docker Compose 安装 version: "3.7"
services:
db:
image: postgres
container_name: postgres
ports:
- "5432:5432"
environment:
- POSTGRES_USER=sonar
- POSTGRES_PASSWORD=sonar
sonarqube:
image: sonarqube
container_name: sonarqube
restart: always
ports:
- "9000:9000"
volumes:
# mac 下根目录~
- ~/sonarqube/conf:/opt/sonarqube/conf
- ~/sonarqube/data:/opt/sonarqube/data
- ~/sonarqube/logs:/opt/sonarqube/logs
- ~/sonarqube/extensions:/opt/sonarqube/extensions
links:
- db
environment:
- sonar.jdbc.username=sonar
- sonar.jdbc.password=sonar
- sonar.jdbc.url=jdbc:postgresql://db:5432/sonar
运行
测试
admin/admin登录
安装Python语言插件(及中文包, 你懂的~😄)
单元测试&覆盖率统计&代码静态扫描
单元测试框架pyTest:allure报告
覆盖率统计
官方资料1
官方资料2
策略
单元测试策略 从独立 到 业务耦合
utils > service > features/steps
命名
测试文件以test_开头
测试类以Test开头
测试函数以test_开头
如:
config_parser.py -> test_config_parser.py
集成jenkins
安装Jenkins插件
allure report
SonarQube scanner
shell 执行脚本 #!/bin/bash
set -e
# 每个脚本都应该在文件开头加上set -e,这句语句告诉bash如果任何语句的执行结果不是true则应该退出。
. /etc/profile.d/pyenv.sh
python --version
pyenv local 3.7.2
python --version
if [[ -f requirements.txt ]]; then
pip install -r requirements.txt
fi
apt-get install -y pylint
# apt-get 默认安装路径 /usr/local/bin/
if [[ -d utest-results ]]; then
rm -rf utest-results
fi
# 执行测试,设置代码覆盖率统计配置
pytest --cov-config=setup.cfg --cov=. utest/ --alluredir utest-results
SonarQube 配置
sonar-scanner调用pylint, 然后将 单元测试覆盖率/ 静态扫描数据交给sonar服务器
sonar.projectKey=RestApiBDD
sonar.projectName=RestApiBDD
sonar.projectVersion=1.0
sonar.sources=.
sonar.language=py
sonar.sourceEncoding=UTF-8
# Test Results
#sonar.python.xunit.reportPath=utest-results
# Coverage
sonar.python.coverage.reportPath=coverage.xml
# sonar-scanner调用pylint静态骚麦哦,然后数据交给sonar服务器;
sonar.python.pylint=/usr/local/bin/pylint
sonar.python.pylint_config=.pylintrc
sonar.python.pylint.reportPath=./pylint-report.txt
邮件通知设置
结果
单元测试结果
静态扫描及单元测试覆盖率
代码覆盖率
静态扫描后发现的问题
自定义 质量/质量阀 代码规则配置
遇到的问题:
Q1. 因为是访问宿主机的localhost,所以SonarURL不能用localhost,要用实际IP或域名