mirror of
https://github.com/osm-search/Nominatim.git
synced 2024-10-05 15:08:32 +03:00
parent
a27e191335
commit
3fba5e7867
@ -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_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`)
|
||||
|
||||
These tests check the import and update of the Nominatim database. They do not
|
||||
|
@ -17,7 +17,8 @@ userconfig = {
|
||||
'TEMPLATE_DB' : 'test_template_nominatim',
|
||||
'TEST_DB' : 'test_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")
|
||||
@ -28,16 +29,25 @@ class NominatimEnvironment(object):
|
||||
|
||||
def __init__(self, config):
|
||||
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.test_db = config['TEST_DB']
|
||||
self.api_test_db = config['API_TEST_DB']
|
||||
self.local_settings_file = config['TEST_SETTINGS_FILE']
|
||||
self.reuse_template = not config['REMOVE_TEMPLATE']
|
||||
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
|
||||
|
||||
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):
|
||||
f = open(self.local_settings_file, 'w')
|
||||
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'):
|
||||
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():
|
||||
cmd.append("%s=%s" % (k, v))
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user