使用SonarTS创建进行typescript代码质量扫描(续):如何设定除外的文件

mac2025-02-13  9

在前面的文章中介绍了如何使用SonarQube结合Karma与Jasmine进行前端单元测试并显示测试覆盖率,这篇文章介绍一下如何指定扫描目录和除外文件。

事前准备

SonarQube环境搭建

可以使用SonarQube的各个版本进行验证,此处使用SonarQube LTS 7.9.1版本 + Postgresql 12版本。详细环境搭建可以参看:

SonarQube 7.9.1 环境搭建

Angular应用+Karma+Jasmine

单元测试覆盖率的获取,事前必须需要首先执行单元测试,然后SonarQube实际上会分析此结果才能进行覆盖率的展示。而这个过程中则需要多种工具包括Karma和Jasmine等,而由于Angular CLI创建的应用框架中已经默认几乎配置完毕,而且包含示例的测试文件,所以只需要如下步骤即可:

步骤1: ng new demo --style=less步骤2: cd demo && npm install步骤3: 设定karma的配置文件步骤4: ng test --code-coverage

详细的说明和解释可以参看如下内容:

Angular前端测试Karma + Jasmine + SonarQube的前端测试覆盖率确认

Sonar-Scanner

liumiaocn:~ liumiao$ sonar-scanner --version INFO: Scanner configuration file: /usr/local/share/sonar/sonar-scanner-3.2.0.1227-linux/conf/sonar-scanner.properties INFO: Project root configuration file: NONE INFO: SonarQube Scanner 3.2.0.1227 INFO: Java 1.8.0_191 Oracle Corporation (64-bit) INFO: Mac OS X 10.14 x86_64 liumiaocn:~ liumiao$

测试执行

使用ng --code-coverage进行测试,并生成测试结果文件lcov.info,并将此文件作为参数传给Sonar-Scanner进行覆盖率的确认。

执行命令: sonar-scanner -Dsonar.projectKey=coveragetest -Dsonar.sources=src -Dsonar.typescript.lcov.reportPaths=coverage/demo/lcov.info -Dsonar.host.url=http://192.168.31.242:9001 -Dsonar.login=admin -Dsonar.password=admin

覆盖率信息详细信息如下所示:

设定除外文件列表

缺省的设定之下,覆盖率为18.5,而这个覆盖率的计算是上述7个文件的整体单元测试结果。如果将不希望进行覆盖率的文件进行除外,可以使用sonar.exclusions进行指定,具体执行示例如下所示:

执行命令: sonar-scanner -Dsonar.projectKey=coveragetest -Dsonar.sources=src -Dsonar.typescript.lcov.reportPaths=coverage/demo/lcov.info -Dsonar.host.url=http://192.168.31.242:9001 -Dsonar.login=admin -Dsonar.password=admin -Dsonar.exclusions=src/**.spec.ts,src/app/app-routing.module.ts,src/environments/environment*.ts,src/main.ts

执行日志如下所示:

liumiaocn:demo liumiao$ sonar-scanner -Dsonar.projectKey=coveragetest \ > -Dsonar.sources=src \ > -Dsonar.typescript.lcov.reportPaths=coverage/demo/lcov.info \ > -Dsonar.host.url=http://192.168.31.242:9001 \ > -Dsonar.login=admin \ > -Dsonar.password=admin \ > -Dsonar.exclusions=src/**.spec.ts,src/app/app-routing.module.ts,src/environments/environment*.ts,src/main.ts INFO: Scanner configuration file: /usr/local/share/sonar/sonar-scanner-3.2.0.1227-linux/conf/sonar-scanner.properties INFO: Project root configuration file: NONE INFO: SonarQube Scanner 3.2.0.1227 INFO: Java 1.8.0_191 Oracle Corporation (64-bit) INFO: Mac OS X 10.14 x86_64 INFO: User cache: /Users/liumiao/.sonar/cache INFO: SonarQube server 7.9.1 INFO: Default locale: "en_CN", source code encoding: "UTF-8" (analysis is platform dependent) WARN: SonarScanner will require Java 11+ to run starting in SonarQube 8.x INFO: Load global settings INFO: Load global settings (done) | time=457ms INFO: Server id: 46AF5D23-AW4QVqQKMR98oZUMGunZ INFO: User cache: /Users/liumiao/.sonar/cache INFO: Load/download plugins INFO: Load plugins index INFO: Load plugins index (done) | time=396ms INFO: Load/download plugins (done) | time=412ms INFO: Process project properties INFO: Project key: coveragetest INFO: Base dir: /Users/liumiao/demo INFO: Working dir: /Users/liumiao/demo/.scannerwork INFO: Load project settings for component key: 'coveragetest' INFO: Load project settings for component key: 'coveragetest' (done) | time=415ms INFO: Load quality profiles INFO: Load quality profiles (done) | time=477ms INFO: Load active rules INFO: Load active rules (done) | time=1033ms WARN: SCM provider autodetection failed. Please use "sonar.scm.provider" to define SCM of your project, or disable the SCM Sensor in the project settings. INFO: Indexing files... INFO: Project configuration: INFO: Excluded sources: src/**.spec.ts, src/app/app-routing.module.ts, src/environments/environment*.ts, src/main.ts INFO: 9 files indexed INFO: 0 files ignored because of inclusion/exclusion patterns INFO: Quality profile for ts: Sonar way INFO: ------------- Run sensors on module coveragetest INFO: Load metrics repository INFO: Load metrics repository (done) | time=345ms INFO: Sensor SonarTS [typescript] INFO: Load project repositories INFO: Load project repositories (done) | time=393ms INFO: Analyzing 4 typescript file(s) with the following configuration file /Users/liumiao/demo/tsconfig.json INFO: 4 files analyzed out of 4 INFO: Sensor SonarTS [typescript] (done) | time=3122ms INFO: Sensor SonarTS Coverage [typescript] INFO: Analysing [/Users/liumiao/demo/coverage/demo/lcov.info] INFO: Sensor SonarTS Coverage [typescript] (done) | time=6ms INFO: ------------- Run sensors on project INFO: Sensor Zero Coverage Sensor INFO: Sensor Zero Coverage Sensor (done) | time=0ms INFO: No SCM system was detected. You can use the 'sonar.scm.provider' property to explicitly specify it. INFO: 2 files had no CPD blocks INFO: Calculating CPD for 2 files INFO: CPD calculation finished INFO: Analysis report generated in 52ms, dir size=16 KB INFO: Analysis report compressed in 25ms, zip size=8 KB INFO: Analysis report uploaded in 393ms INFO: ANALYSIS SUCCESSFUL, you can browse http://192.168.31.242:9001/dashboard?id=coveragetest INFO: Note that you will be able to access the updated dashboard once the server has processed the submitted analysis report INFO: More about the report processing at http://192.168.31.242:9001/api/ce/task?id=AW42VurRzxaMqkyn8AZV INFO: Analysis total time: 7.147 s INFO: ------------------------------------------------------------------------ INFO: EXECUTION SUCCESS INFO: ------------------------------------------------------------------------ INFO: Total time: 8.991s INFO: Final Memory: 11M/197M INFO: ------------------------------------------------------------------------ liumiaocn:demo liumiao$

SonarQube覆盖率确认

整体覆盖率确认:100% 各文件测试覆盖率信息列表:2个文件,100%

另外使用sonar.inclusions也可以根据需要进行扫描文件的指定,使用方法类似,不再赘述。

淼叔 认证博客专家 神经网络 TensorFlow NLP 资深架构师,PMP、OCP、CSM、HPE University讲师,EXIN DevOps Professional与DevOps Master认证讲师,曾担任HPE GD China DevOps & Agile Leader,帮助企业级客户提供DevOps咨询培训以及实施指导。熟悉通信和金融领域,有超过十年金融外汇行业的架构设计、开发、维护经验,在十几年的IT从业生涯中拥有了软件开发设计领域接近全生命周期的经验和知识积累,著有企业级DevOps技术与工具实战。
最新回复(0)