aboutsummaryrefslogtreecommitdiffstats
path: root/functest
diff options
context:
space:
mode:
authorCedric Ollivier <cedric.ollivier@orange.com>2018-02-19 20:17:35 +0000
committerGerrit Code Review <gerrit@opnfv.org>2018-02-19 20:17:35 +0000
commitde3160230a010e5fd2aaf03630e31e807aeee34f (patch)
tree0e7ba5bdea8f222f8e09362ce6103e24d91dd2c6 /functest
parentc49ada60d6b5390ea7e28d4e681195ad759b5214 (diff)
parent916e12ca41b90d581d44f78e5be3db15daf875c8 (diff)
Merge "Generate tempest verification report (HTML)"
Diffstat (limited to 'functest')
-rw-r--r--functest/opnfv_tests/openstack/tempest/tempest.py14
-rw-r--r--functest/tests/unit/openstack/tempest/test_tempest.py23
2 files changed, 31 insertions, 6 deletions
diff --git a/functest/opnfv_tests/openstack/tempest/tempest.py b/functest/opnfv_tests/openstack/tempest/tempest.py
index 105d1655..d474ec3a 100644
--- a/functest/opnfv_tests/openstack/tempest/tempest.py
+++ b/functest/opnfv_tests/openstack/tempest/tempest.py
@@ -193,11 +193,11 @@ class TempestCommon(testcase.TestCase):
f_stdout.close()
f_stderr.close()
- def parse_verifier_result(self):
- """Parse and save test results."""
if self.verification_id is None:
raise Exception('Verification UUID not found')
+ def parse_verifier_result(self):
+ """Parse and save test results."""
stat = self.get_verifier_result(self.verification_id)
try:
num_executed = stat['num_tests'] - stat['num_skipped']
@@ -236,6 +236,15 @@ class TempestCommon(testcase.TestCase):
LOGGER.info("Tempest %s success_rate is %s%%",
self.case_name, self.result)
+ def generate_report(self):
+ """Generate verification report."""
+ html_file = os.path.join(conf_utils.TEMPEST_RESULTS_DIR,
+ "tempest-report.html")
+ cmd = ["rally", "verify", "report", "--type", "html", "--uuid",
+ self.verification_id, "--to", html_file]
+ subprocess.Popen(cmd, stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT)
+
def run(self, **kwargs):
self.start_time = time.time()
@@ -255,6 +264,7 @@ class TempestCommon(testcase.TestCase):
self.apply_tempest_blacklist()
self.run_verifier_tests()
self.parse_verifier_result()
+ self.generate_report()
res = testcase.TestCase.EX_OK
except Exception as err: # pylint: disable=broad-except
LOGGER.error('Error with run: %s', err)
diff --git a/functest/tests/unit/openstack/tempest/test_tempest.py b/functest/tests/unit/openstack/tempest/test_tempest.py
index c4c8a777..77cf28af 100644
--- a/functest/tests/unit/openstack/tempest/test_tempest.py
+++ b/functest/tests/unit/openstack/tempest/test_tempest.py
@@ -147,9 +147,22 @@ class OSTempestTesting(unittest.TestCase):
conf_utils.TEMPEST_LIST = 'test_tempest_list'
cmd = ["rally", "verify", "start", "--load-list",
conf_utils.TEMPEST_LIST]
- self.tempestcommon.run_verifier_tests()
- mock_logger_info. \
- assert_any_call("Starting Tempest test suite: '%s'.", cmd)
+ with self.assertRaises(Exception):
+ self.tempestcommon.run_verifier_tests()
+ mock_logger_info. \
+ assert_any_call("Starting Tempest test suite: '%s'.", cmd)
+
+ @mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
+ 'subprocess.Popen')
+ def test_generate_report(self, mock_popen):
+ self.tempestcommon.verification_id = "1234"
+ html_file = os.path.join(conf_utils.TEMPEST_RESULTS_DIR,
+ "tempest-report.html")
+ cmd = ["rally", "verify", "report", "--type", "html", "--uuid",
+ "1234", "--to", html_file]
+ self.tempestcommon.generate_report()
+ mock_popen.assert_called_once_with(cmd, stdout=mock.ANY,
+ stderr=mock.ANY)
@mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
'os.path.exists', return_value=False)
@@ -245,7 +258,9 @@ class OSTempestTesting(unittest.TestCase):
mock.patch.object(self.tempestcommon,
'apply_tempest_blacklist'), \
mock.patch.object(self.tempestcommon, 'run_verifier_tests'), \
- mock.patch.object(self.tempestcommon, 'parse_verifier_result'):
+ mock.patch.object(self.tempestcommon,
+ 'parse_verifier_result'), \
+ mock.patch.object(self.tempestcommon, 'generate_report'):
self._test_run(testcase.TestCase.EX_OK)
e at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # Contributors: # Aihua Li, Huawei Technologies. include ../mk/master.mk include ../package-list.mk .PHONY: install force_make ifndef VHOST_USER VHOST_USER = n endif WORK_DIR = dpdk TAG_DONE_FLAG = $(WORK_DIR)/.$(DPDK_TAG).tag.done DPDK_VANILLA = ../../src_vanilla/dpdk DPDK_CUSE = ../../src_cuse/dpdk # the name has been changed from version to version ifeq ($(DPDK_TAG),v1.6.0r0) DPDK_TARGET = x86_64-default-linuxapp-gcc CONFIG_FILE = $(WORK_DIR)/config/defconfig_x86_64-default-linuxapp-gcc else DPDK_TARGET = x86_64-native-linuxapp-gcc CONFIG_FILE = $(WORK_DIR)/config/common_linuxapp endif all: force_make @echo "Finished making $(WORK_DIR) " INSTALL_TARGET = force_make # modify CONFIG_FILE to enable VHOST_USER build and restore original CONFIG_FILE after the build force_make: $(TAG_DONE_FLAG) $(AT)cd $(WORK_DIR) && git pull $(DPDK_URL) $(DPDK_TAG) $(AT)sed -i -e 's/CONFIG_RTE_LIBRTE_VHOST_USER=.\+/CONFIG_RTE_LIBRTE_VHOST_USER=$(VHOST_USER)/g' $(CONFIG_FILE) $(AT)sed -i -e 's/CONFIG_RTE_BUILD_COMBINE_LIBS=./CONFIG_RTE_BUILD_COMBINE_LIBS=y/g' $(CONFIG_FILE) $(AT)sed -i -e 's/CONFIG_RTE_LIBRTE_VHOST=./CONFIG_RTE_LIBRTE_VHOST=y/g' $(CONFIG_FILE) $(AT)sed -i -e 's/CONFIG_RTE_LIBRTE_KNI=./CONFIG_RTE_LIBRTE_KNI=n/g' $(CONFIG_FILE) $(AT)cd $(WORK_DIR); make install T=$(DPDK_TARGET) -j DESTDIR=$(WORK_DIR) $(AT)cd `dirname $(CONFIG_FILE)` && git checkout `basename $(CONFIG_FILE)` && cd - $(AT)echo "VHOST_USER = $(VHOST_USER)" ifeq ($(VHOST_USER),n) $(AT)cd $(WORK_DIR)/lib/librte_vhost/eventfd_link; make endif @echo "Make done" install: $(INSTALL_TARGET) $(AT)sudo cp -a $(WORK_DIR)/$(DPDK_TARGET)/kmod $(INSTALL_DIR)/lib/modules/$(KERNEL_VERSION) @echo "install done" # hard way to clean and clobber clean: $(AT)cd $(WORK_DIR) && git clean -xfd *.o clobber: $(AT)rm -rf $(WORK_DIR) $(AT)rm -rf $(DPDK_VANILLA) $(AT)rm -rf $(DPDK_CUSE) # distclean is for developer who would like to keep the # clone git repo, saving time to fetch again from url distclean: $(AT)cd $(WORK_DIR) && git clean -xfd && git checkout -f test: @echo "Make test in $(WORK_DIR) (stub) " sanity: @echo "Make sanity in $(WORK_DIR) (stub) " $(WORK_DIR): $(AT)git clone $(DPDK_URL) $(AT)mkdir -p $(DPDK_VANILLA) $(AT)cp -rf ./* $(DPDK_VANILLA) $(AT)mkdir -p $(DPDK_CUSE) $(AT)cp -rf ./* $(DPDK_CUSE) $(TAG_DONE_FLAG): $(WORK_DIR) $(AT)cd $(WORK_DIR); git checkout $(DPDK_TAG) $(AT)touch $@