diff options
author | Alexandre Flament <alex@al-f.net> | 2021-09-02 16:01:34 +0200 |
---|---|---|
committer | Alexandre Flament <alex@al-f.net> | 2021-09-02 16:01:34 +0200 |
commit | b9c73fb69784726608d1a2d72b7a17f777d30b9d (patch) | |
tree | e1446c28afb7c49328ae7f9279b11c072c5b52c6 /tests/robot/__main__.py | |
parent | 065b4dab56bf3c374cab7896314168e9d3106171 (diff) | |
download | searxng-b9c73fb69784726608d1a2d72b7a17f777d30b9d.tar.gz searxng-b9c73fb69784726608d1a2d72b7a17f777d30b9d.zip |
[mod] move searx/testing.py to the tests directory
move robot tests to tests.robot
manage calls "python -m tests.robot"
Diffstat (limited to 'tests/robot/__main__.py')
-rw-r--r-- | tests/robot/__main__.py | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/tests/robot/__main__.py b/tests/robot/__main__.py new file mode 100644 index 000000000..e435f512a --- /dev/null +++ b/tests/robot/__main__.py @@ -0,0 +1,78 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +# lint: pylint +"""Shared testing code.""" + +# pylint: disable=missing-function-docstring + +import sys +import os +import subprocess +import traceback +import pathlib + +from splinter import Browser + +import tests as searx_tests +from tests.robot import test_webapp + + +class SearxRobotLayer(): + """Searx Robot Test Layer""" + + def setUp(self): + os.setpgrp() # create new process group, become its leader + + tests_path = pathlib.Path(searx_tests.__file__).resolve().parent + + # get program paths + webapp = str(tests_path.parent / 'searx' / 'webapp.py') + exe = 'python' + + # The Flask app is started by Flask.run(...), don't enable Flask's debug + # mode, the debugger from Flask will cause wired process model, where + # the server never dies. Further read: + # + # - debug mode: https://flask.palletsprojects.com/quickstart/#debug-mode + # - Flask.run(..): https://flask.palletsprojects.com/api/#flask.Flask.run + + os.environ['SEARX_DEBUG'] = '0' + + # set robot settings path + os.environ['SEARX_SETTINGS_PATH'] = str(tests_path / 'robot' / 'settings_robot.yml') + + # run the server + self.server = subprocess.Popen( # pylint: disable=consider-using-with + [exe, webapp], + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT + ) + if hasattr(self.server.stdout, 'read1'): + print(self.server.stdout.read1(1024).decode()) + + def tearDown(self): + os.kill(self.server.pid, 9) + # remove previously set environment variable + del os.environ['SEARX_SETTINGS_PATH'] + + +def run_robot_tests(tests): + print('Running {0} tests'.format(len(tests))) + for test in tests: + with Browser('firefox', headless=True, profile_preferences={'intl.accept_languages': 'en'}) as browser: + test(browser) + + +def main(): + test_layer = SearxRobotLayer() + try: + test_layer.setUp() + run_robot_tests([getattr(test_webapp, x) for x in dir(test_webapp) if x.startswith('test_')]) + except Exception: # pylint: disable=broad-except + print('Error occured: {0}'.format(traceback.format_exc())) + sys.exit(1) + finally: + test_layer.tearDown() + + +if __name__ == '__main__': + main() |