Add a generic process-test-results role

Takes an stestr or testr repo as input and generates a subunit
file and an html report out of it. The files are stored in the
staging area on the test node.

This in combination with a generic role to pull the staging
folder to the zuul executor is meant to eventually replace to
existing roles:
- fetch-testr-output
- fetch-stestr-output

Change-Id: Id6149d4e265ab9f0ab6d8faeffdec651c63dc056
This commit is contained in:
Andrea Frittoli (andreaf) 2017-10-04 14:41:48 +01:00 committed by Andrea Frittoli
parent 2ea8661801
commit 7bd86fcd99
3 changed files with 88 additions and 0 deletions

View File

@ -0,0 +1,35 @@
Process test results
Take a testr / stestr repo as input. Produce subunit from the latest
run and the html report using subunit2html.
**Role Variables**
.. zuul:rolevar:: test_results_dir
:default: None
The folder where the [s]testr repo lives.
.. zuul:rolevar:: tox_envdir
:default: venv
The name of the virtual environemnt created by tox to run tests.
This may be different from the name of the tox environment.
.. zuul:rolevar:: stage_dir
:default: {{ ansible_user_dir }}
Folder into which the output files will be written. Assumption is that
the user that runs this role has read access to test results and write
access to tempest_work_dir.
.. zuul:rolevar:: subunit2html
:default: /usr/os-testr-env/bin/subunit2html
The full path to subunit2html. This utility is part of os-testr,
and it's usually baked into test images, hence the default value.
.. zuul:rolevar:: test_results_stage_name
:default: test_results
The name of the subunit and html files generated.

View File

@ -0,0 +1,4 @@
tox_envdir: venv
stage_dir: "{{ ansible_user_dir }}"
subunit2html: /usr/os-testr-env/bin/subunit2html
test_results_stage_name: test_results

View File

@ -0,0 +1,49 @@
# NOTE(andreaf) There could be more than one repo in the test folder.
# Since that's unlikely we don't provide a variable to select the
# test runner and we pick the first hit.
- name: Discover stestr repo
stat:
path: "{{ test_results_dir }}/.stestr"
register: stestr_repo
- name: Discover testr repo
stat:
path: "{{ test_results_dir }}/.testrepository"
register: testr_repo
when: not stestr_repo.stat.exists
- name: Use stestr test runner
set_fact:
test_runner: ".tox/{{ tox_envdir }}/bin/stestr"
when: stestr_repo.stat.exists
- name: Use legacy testr test runner
set_fact:
test_runner: ".tox/{{ tox_envdir }}/bin/testr"
when: not stestr_repo.stat.exists and testr_repo.stat.exists
- name: Check if the venv has been created
stat:
path: "{{ test_results_dir }}/.tox/{{ tox_envdir }}"
register: run_venv
- name: Make sure test results are world readable
file:
path: "{{ test_results_dir }}"
mode: "a+rX"
recurse: true
become: true
- name: Create a subunit file from the last run
shell: "{{ test_runner }} last --subunit > {{ stage_dir }}/{{ test_results_stage_name }}.subunit"
args:
chdir: "{{ test_results_dir }}"
when: run_venv.stat.exists and test_runner is defined
register: subunit_report
- name: Generate the html report for the last run
command: "{{ subunit2html }} ./{{ test_results_stage_name}}.subunit {{ test_results_stage_name }}.html"
args:
chdir: "{{ stage_dir }}"
when: run_venv.stat.exists and test_runner is defined
register: html_report