summaryrefslogtreecommitdiffstats
path: root/test/main.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/main.py')
-rw-r--r--test/main.py105
1 files changed, 105 insertions, 0 deletions
diff --git a/test/main.py b/test/main.py
new file mode 100644
index 00000000..f18c6dba
--- /dev/null
+++ b/test/main.py
@@ -0,0 +1,105 @@
+#!/usr/bin/env python
+# Copyright (c) 2015 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License 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.
+
+
+import os
+import robot
+from robot.run import RobotFramework
+from robot.conf.settings import RobotSettings
+from robot.running.builder import TestSuiteBuilder
+from robot.running.model import TestSuite
+
+
+def get_suite_list(*datasources, **options):
+ class _MyRobotFramework(RobotFramework):
+ def main(self, datasources, **options):
+ # copied from robot.run.RobotFramework.main
+ settings = RobotSettings(options)
+ suite = TestSuiteBuilder(settings['SuiteNames'],
+ settings['WarnOnSkipped']).build(*datasources)
+ suite.configure(**settings.suite_config)
+
+ return suite
+
+ # Options are in robot.conf.settings
+ suite = _MyRobotFramework().execute(*datasources, **options)
+ if isinstance(suite, TestSuite):
+ suites = []
+ suites.append(suite)
+ append_new = True
+ while append_new:
+ append_new = False
+ tmp = []
+ for s in suites:
+ if len(s.suites._items) > 0:
+ for i in s.suites._items:
+ tmp.append(i)
+ append_new = True
+ else:
+ tmp.append(s)
+ suites = tmp
+ return suites
+ else:
+ # TODO: add from robot.errors typ error
+ return []
+
+
+def run_suites(test_dir, suites, out_dir="./outputs", **options):
+ # TODO: add logic
+
+ try:
+ for f in os.listdir(out_dir):
+ os.remove('/'.join((out_dir, f)))
+ except OSError:
+ pass
+ if not os.path.exists(out_dir):
+ os.makedirs(out_dir)
+
+ for s in suites:
+ longname = s.longname
+ varfile=[]
+ varfile.append('resources/libraries/python/topology.py')
+
+ # TODO: check testcases Tags
+
+ with open('{}/{}.out'.format(out_dir, longname), 'w') as out, \
+ open('{}/{}.log'.format(out_dir, longname), 'w') as debug:
+ robot.run(test_dir,
+ suite=[longname],
+ output='{}/{}.xml'.format(out_dir, longname),
+ debugfile=debug,
+ log=None,
+ report=None,
+ stdout=out,
+ variablefile=varfile,
+ **options)
+
+
+def parse_outputs(out_dir='./'):
+ outs = ['/'.join((out_dir, file)) for file in os.listdir(out_dir) if file.endswith('.xml')]
+ robot.rebot(*outs, merge=True)
+
+
+if __name__ == "__main__":
+ i = []
+ e = []
+ # i = ['bd', 'ip']
+ # i = ['hw']
+ # e = ['hw']
+ test_dir = "./tests"
+ out_dir = "./outputs"
+
+ suite_list = get_suite_list(test_dir, include=i, exclude=e, output=None, dryrun=True)
+ run_suites(test_dir, suite_list, include=i, exclude=e, out_dir=out_dir)
+ parse_outputs(out_dir=out_dir)