forked from hans/Nominatim
Merge pull request #775 from lonvia/code-coverage
enable code coverage computation for API BDD tests
This commit is contained in:
@@ -120,6 +120,21 @@ Before importing make sure to add the following to your local settings:
|
|||||||
@define('CONST_Database_DSN', 'pgsql://@/test_api_nominatim');
|
@define('CONST_Database_DSN', 'pgsql://@/test_api_nominatim');
|
||||||
@define('CONST_Wikipedia_Data_Path', CONST_BasePath.'/test/testdb');
|
@define('CONST_Wikipedia_Data_Path', CONST_BasePath.'/test/testdb');
|
||||||
|
|
||||||
|
#### Code Coverage
|
||||||
|
|
||||||
|
The API tests also support code coverage tests. You need to install
|
||||||
|
PHP_CodeCoverage. On Debian/Ubuntu run:
|
||||||
|
|
||||||
|
apt-get install php-codecoverage
|
||||||
|
|
||||||
|
The run the API tests as follows:
|
||||||
|
|
||||||
|
behave api -DPHPCOV=<coverage output dir>
|
||||||
|
|
||||||
|
To generate reports, you can use the phpcov tool:
|
||||||
|
|
||||||
|
phpcov merge --html=<report output dir> <coverage output dir>
|
||||||
|
|
||||||
### Indexing Tests (`test/bdd/db`)
|
### Indexing Tests (`test/bdd/db`)
|
||||||
|
|
||||||
These tests check the import and update of the Nominatim database. They do not
|
These tests check the import and update of the Nominatim database. They do not
|
||||||
|
|||||||
@@ -17,7 +17,8 @@ userconfig = {
|
|||||||
'TEMPLATE_DB' : 'test_template_nominatim',
|
'TEMPLATE_DB' : 'test_template_nominatim',
|
||||||
'TEST_DB' : 'test_nominatim',
|
'TEST_DB' : 'test_nominatim',
|
||||||
'API_TEST_DB' : 'test_api_nominatim',
|
'API_TEST_DB' : 'test_api_nominatim',
|
||||||
'TEST_SETTINGS_FILE' : '/tmp/nominatim_settings.php'
|
'TEST_SETTINGS_FILE' : '/tmp/nominatim_settings.php',
|
||||||
|
'PHPCOV' : False, # set to output directory to enable code coverage
|
||||||
}
|
}
|
||||||
|
|
||||||
use_step_matcher("re")
|
use_step_matcher("re")
|
||||||
@@ -28,16 +29,25 @@ class NominatimEnvironment(object):
|
|||||||
|
|
||||||
def __init__(self, config):
|
def __init__(self, config):
|
||||||
self.build_dir = os.path.abspath(config['BUILDDIR'])
|
self.build_dir = os.path.abspath(config['BUILDDIR'])
|
||||||
|
self.src_dir = os.path.abspath(os.path.join(os.path.split(__file__)[0], "../.."))
|
||||||
self.template_db = config['TEMPLATE_DB']
|
self.template_db = config['TEMPLATE_DB']
|
||||||
self.test_db = config['TEST_DB']
|
self.test_db = config['TEST_DB']
|
||||||
self.api_test_db = config['API_TEST_DB']
|
self.api_test_db = config['API_TEST_DB']
|
||||||
self.local_settings_file = config['TEST_SETTINGS_FILE']
|
self.local_settings_file = config['TEST_SETTINGS_FILE']
|
||||||
self.reuse_template = not config['REMOVE_TEMPLATE']
|
self.reuse_template = not config['REMOVE_TEMPLATE']
|
||||||
self.keep_scenario_db = config['KEEP_TEST_DB']
|
self.keep_scenario_db = config['KEEP_TEST_DB']
|
||||||
|
self.code_coverage_path = config['PHPCOV']
|
||||||
|
self.code_coverage_id = 1
|
||||||
os.environ['NOMINATIM_SETTINGS'] = self.local_settings_file
|
os.environ['NOMINATIM_SETTINGS'] = self.local_settings_file
|
||||||
|
|
||||||
self.template_db_done = False
|
self.template_db_done = False
|
||||||
|
|
||||||
|
def next_code_coverage_file(self):
|
||||||
|
fn = os.path.join(self.code_coverage_path, "%06d.cov" % self.code_coverage_id)
|
||||||
|
self.code_coverage_id += 1
|
||||||
|
|
||||||
|
return fn
|
||||||
|
|
||||||
def write_nominatim_config(self, dbname):
|
def write_nominatim_config(self, dbname):
|
||||||
f = open(self.local_settings_file, 'w')
|
f = open(self.local_settings_file, 'w')
|
||||||
f.write("<?php\n @define('CONST_Database_DSN', 'pgsql://@/%s');\n" % dbname)
|
f.write("<?php\n @define('CONST_Database_DSN', 'pgsql://@/%s');\n" % dbname)
|
||||||
|
|||||||
13
test/bdd/steps/cgi-with-coverage.php
Normal file
13
test/bdd/steps/cgi-with-coverage.php
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<?php
|
||||||
|
require_once 'SebastianBergmann/CodeCoverage/autoload.php';
|
||||||
|
$covfilter = new SebastianBergmann\CodeCoverage\Filter();
|
||||||
|
$covfilter->addDirectoryToWhitelist($_SERVER['COV_PHP_DIR']);
|
||||||
|
$coverage = new SebastianBergmann\CodeCoverage\CodeCoverage(null, $covfilter);
|
||||||
|
$coverage->start($_SERVER['COV_TEST_NAME']);
|
||||||
|
|
||||||
|
include $_SERVER['COV_SCRIPT_FILENAME'];
|
||||||
|
|
||||||
|
|
||||||
|
$coverage->stop();
|
||||||
|
$writer = new \SebastianBergmann\CodeCoverage\Report\PHP;
|
||||||
|
$writer->process($coverage, $_SERVER['PHP_CODE_COVERAGE_FILE']);
|
||||||
@@ -282,7 +282,18 @@ def send_api_query(endpoint, params, fmt, context):
|
|||||||
if hasattr(context, 'http_headers'):
|
if hasattr(context, 'http_headers'):
|
||||||
env.update(context.http_headers)
|
env.update(context.http_headers)
|
||||||
|
|
||||||
cmd = ['/usr/bin/php-cgi', env['SCRIPT_FILENAME']]
|
cmd = ['/usr/bin/php-cgi', '-f']
|
||||||
|
if context.nominatim.code_coverage_path:
|
||||||
|
env['COV_SCRIPT_FILENAME'] = env['SCRIPT_FILENAME']
|
||||||
|
env['COV_PHP_DIR'] = os.path.join(context.nominatim.src_dir, "lib")
|
||||||
|
env['COV_TEST_NAME'] = '%s:%s' % (context.scenario.filename, context.scenario.line)
|
||||||
|
env['SCRIPT_FILENAME'] = \
|
||||||
|
os.path.join(os.path.split(__file__)[0], 'cgi-with-coverage.php')
|
||||||
|
cmd.append(env['SCRIPT_FILENAME'])
|
||||||
|
env['PHP_CODE_COVERAGE_FILE'] = context.nominatim.next_code_coverage_file()
|
||||||
|
else:
|
||||||
|
cmd.append(env['SCRIPT_FILENAME'])
|
||||||
|
|
||||||
for k,v in params.items():
|
for k,v in params.items():
|
||||||
cmd.append("%s=%s" % (k, v))
|
cmd.append("%s=%s" % (k, v))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user