Running flutter based application tests in gitlab pipelines
Published on

Lets save you and future me 5 minutes of precious time as of how to parse the dart tests and coverage results in gitlab pipeline.
tl;dr
In your .gitlab-ci.yml
image: instrumentisto/flutter:latest
stages:
- test
test:
stage: test
before_script:
- export PATH="$PATH":"$HOME/.pub-cache/bin"
- flutter pub get
- flutter clean
- flutter pub global activate junitreport
- flutter pub global activate cobertura
script:
- flutter test --coverage --machine | tojunit -o report.xml
- genhtml coverage/lcov.info --output=coverage
- cobertura convert
coverage: '/^\s*lines\.+: (\d+\.\d+)% .*/'
artifacts:
when: always
paths:
- report.xml
- coverage/
reports:
junit:
- report.xml
coverage_report:
coverage_format: cobertura
path: coverage/cobertura.xml
expire_in: 1 week
A bit of explanation
- export PATH="$PATH":"$HOME/.pub-cache/bin"
- Is needed to make packages we install globally callable by the script
- flutter pub get
- You likely need your stuff to run tests don’t you?
- flutter pub global activate junitreport
- A package that converts test results output of dart to a junit format which gitlab understands
- flutter pub global activate cobertura
- A package that converts coverage report from lcov
format used by dart into cobertura.xml
that gitlab understands.
| tojunit -o report.xml
- tests conversion, the resulting path will be %project_root%/report.xml
, feel free to change to your liking, but you’ll also need to adjust the artifacts
section of the step accordingly.
- genhtml coverage/lcov.info --output=coverage
- Conversion dart coverage result into an xml report. By default, dart test suit outputs it to the coverage/lcov.info
. This command converts lcov.info
into xml parsable by the cobertura. You’ll need lcov OS package to be installed for this to work, I use image instrumentisto/flutter with it being included.
cobertura convert
- Gives us a final result. Cobertura package will generate a file called cobertura.xml
in a directory you tell it, in this case its %project_root/coverage/
.
coverage: '/^\s*lines\.+: (\d+\.\d+)% .*/'
- Regexp to parse the coverage percentage which will be shown as your pipeline result and in you repo stats. (Se pictures below, just don’t look at the number. Really, don’tπ« )
In the artifacts
part we are telling gitlab where to find the reports and what each of them mean. Adjust the paths here if you changed them previously.
As a result you can see individual test results, the execution time in the piepline, and a coverage in the MR diff and the pipeline.