这一篇是即上一篇的 Python 测试程序-Jenkins 集成
1.Jenkins CI 持续集成
2.SonarQube 静态扫描
3.写了 Python 项目的单元测试
4.及单元测试覆盖率的统计
继续说明后面的 3 点,先说 Python 项目单元测试
参考资料直接看这个链接,这里讲的不错
Java 语言 静态扫描说明
Python 语言 静态扫描说明
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 登录
SonarPython(安装完后重启,不然不能用)
中文包地址
单元测试框架pyTest:allure 报告
覆盖率统计
官方资料 1
官方资料 2
单元测试策略 从独立 到 业务耦合
utils > service > features/steps
测试文件以 test_开头
测试类以 Test 开头
测试函数以 test_开头
如:
config_parser.py -> test_config_parser.py
allure report
SonarQube scanner
#!/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
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 或域名