Commit 6e4515725860e2dd7af23c7b35be8ee682af8c1e
Merge remote-tracking branch 'selurvedu/buildout-1' into devel
Showing
9 changed files
with
135 additions
and
75 deletions
README.md
deleted
100644 → 0
1 | -# robot_tests | |
2 | - | |
3 | -## User acceptance tests for [OpenProcurement](https://github.com/openprocurement) | |
4 | - | |
5 | -[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/openprocurement/robot_tests?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) | |
6 | - | |
7 | -This repository contains tests which are aimed to verify performance of the central database and the brokers. | |
8 | - | |
9 | -Please visit the [Wiki](https://github.com/openprocurement/robot_tests/wiki) for more information. |
README.rst
0 → 100644
1 | +robot_tests | |
2 | +=========== | |
3 | + | |
4 | +User acceptance tests for `OpenProcurement <https://github.com/openprocurement>`__ | |
5 | +---------------------------------------------------------------------------------- | |
6 | + | |
7 | +|Gitter| | |
8 | + | |
9 | +This repository contains tests which are aimed to verify performance of | |
10 | +the central database and the brokers. | |
11 | + | |
12 | +Please visit the | |
13 | +`Wiki <https://github.com/openprocurement/robot_tests/wiki>`__ for more | |
14 | +information. | |
15 | + | |
16 | +.. |Gitter| image:: https://badges.gitter.im/Join%20Chat.svg | |
17 | + :target: https://gitter.im/openprocurement/robot_tests | ... | ... |
... | ... | @@ -14,6 +14,7 @@ recipe = zc.recipe.egg |
14 | 14 | eggs = |
15 | 15 | op_robot_tests |
16 | 16 | openprocurement_client |
17 | + robotframework | |
17 | 18 | robotframework-lint |
18 | 19 | robotframework-debuglibrary |
19 | 20 | robot_tests.broker.dzo |
... | ... | @@ -70,8 +71,14 @@ robot_tests.broker.uub = git ${remotes:gh}openprocurement/robot_tests.b |
70 | 71 | robot_tests.broker.aps = git ${remotes:gh}openprocurement/robot_tests.broker.aps.git |
71 | 72 | |
72 | 73 | [versions] |
73 | -fake-factory = 0.5.3 | |
74 | +Faker = 0.7.7 | |
75 | +mr.developer = 1.34 | |
74 | 76 | restkit = 4.2.2.op1 |
75 | 77 | rfc6266 = 0.0.6.op1 |
76 | 78 | robotframework = 3.0.0 |
77 | -robotframework-selenium2library = 1.7.4 | |
79 | +robotframework-debuglibrary = 0.8 | |
80 | +robotframework-lint = 0.7 | |
81 | +robotframework-selenium2library = 1.8.0 | |
82 | +setuptools = 18.3.2 | |
83 | +zc.buildout = 2.5.3 | |
84 | +zc.recipe.egg = 2.0.3 | ... | ... |
... | ... | @@ -3,6 +3,8 @@ |
3 | 3 | """ |
4 | 4 | Setuptools bootstrapping installer. |
5 | 5 | |
6 | +Maintained at https://github.com/pypa/setuptools/tree/bootstrap. | |
7 | + | |
6 | 8 | Run this script to install or upgrade setuptools. |
7 | 9 | """ |
8 | 10 | |
... | ... | @@ -16,24 +18,30 @@ import subprocess |
16 | 18 | import platform |
17 | 19 | import textwrap |
18 | 20 | import contextlib |
19 | -import warnings | |
21 | +import json | |
22 | +import codecs | |
20 | 23 | |
21 | 24 | from distutils import log |
22 | 25 | |
23 | 26 | try: |
24 | 27 | from urllib.request import urlopen |
28 | + from urllib.parse import urljoin | |
25 | 29 | except ImportError: |
26 | 30 | from urllib2 import urlopen |
31 | + from urlparse import urljoin | |
27 | 32 | |
28 | 33 | try: |
29 | 34 | from site import USER_SITE |
30 | 35 | except ImportError: |
31 | 36 | USER_SITE = None |
32 | 37 | |
38 | +LATEST = object() | |
33 | 39 | DEFAULT_VERSION = "18.3.2" |
34 | -DEFAULT_URL = "https://pypi.python.org/packages/source/s/setuptools/" | |
40 | +DEFAULT_URL = "https://pypi.io/packages/source/s/setuptools/" | |
35 | 41 | DEFAULT_SAVE_DIR = os.curdir |
36 | 42 | |
43 | +MEANINGFUL_INVALID_ZIP_ERR_MSG = 'Maybe {0} is corrupted, delete it and try again.' | |
44 | + | |
37 | 45 | |
38 | 46 | def _python_cmd(*args): |
39 | 47 | """ |
... | ... | @@ -98,8 +106,16 @@ def archive_context(filename): |
98 | 106 | old_wd = os.getcwd() |
99 | 107 | try: |
100 | 108 | os.chdir(tmpdir) |
101 | - with ContextualZipFile(filename) as archive: | |
102 | - archive.extractall() | |
109 | + try: | |
110 | + with ContextualZipFile(filename) as archive: | |
111 | + archive.extractall() | |
112 | + except zipfile.BadZipfile as err: | |
113 | + if not err.args: | |
114 | + err.args = ('', ) | |
115 | + err.args = err.args + ( | |
116 | + MEANINGFUL_INVALID_ZIP_ERR_MSG.format(filename), | |
117 | + ) | |
118 | + raise | |
103 | 119 | |
104 | 120 | # going in the directory |
105 | 121 | subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0]) |
... | ... | @@ -114,18 +130,19 @@ def archive_context(filename): |
114 | 130 | |
115 | 131 | def _do_download(version, download_base, to_dir, download_delay): |
116 | 132 | """Download Setuptools.""" |
117 | - egg = os.path.join(to_dir, 'setuptools-%s-py%d.%d.egg' | |
118 | - % (version, sys.version_info[0], sys.version_info[1])) | |
133 | + py_desig = 'py{sys.version_info[0]}.{sys.version_info[1]}'.format(sys=sys) | |
134 | + tp = 'setuptools-{version}-{py_desig}.egg' | |
135 | + egg = os.path.join(to_dir, tp.format(**locals())) | |
119 | 136 | if not os.path.exists(egg): |
120 | 137 | archive = download_setuptools(version, download_base, |
121 | - to_dir, download_delay) | |
138 | + to_dir, download_delay) | |
122 | 139 | _build_egg(egg, archive, to_dir) |
123 | 140 | sys.path.insert(0, egg) |
124 | 141 | |
125 | 142 | # Remove previously-imported pkg_resources if present (see |
126 | 143 | # https://bitbucket.org/pypa/setuptools/pull-request/7/ for details). |
127 | 144 | if 'pkg_resources' in sys.modules: |
128 | - del sys.modules['pkg_resources'] | |
145 | + _unload_pkg_resources() | |
129 | 146 | |
130 | 147 | import setuptools |
131 | 148 | setuptools.bootstrap_install_from = egg |
... | ... | @@ -140,6 +157,7 @@ def use_setuptools( |
140 | 157 | Return None. Raise SystemExit if the requested version |
141 | 158 | or later cannot be installed. |
142 | 159 | """ |
160 | + version = _resolve_version(version) | |
143 | 161 | to_dir = os.path.abspath(to_dir) |
144 | 162 | |
145 | 163 | # prior to importing, capture the module state for |
... | ... | @@ -189,6 +207,11 @@ def _conflict_bail(VC_err, version): |
189 | 207 | |
190 | 208 | |
191 | 209 | def _unload_pkg_resources(): |
210 | + sys.meta_path = [ | |
211 | + importer | |
212 | + for importer in sys.meta_path | |
213 | + if importer.__class__.__module__ != 'pkg_resources.extern' | |
214 | + ] | |
192 | 215 | del_modules = [ |
193 | 216 | name for name in sys.modules |
194 | 217 | if name.startswith('pkg_resources') |
... | ... | @@ -222,8 +245,8 @@ def download_file_powershell(url, target): |
222 | 245 | ps_cmd = ( |
223 | 246 | "[System.Net.WebRequest]::DefaultWebProxy.Credentials = " |
224 | 247 | "[System.Net.CredentialCache]::DefaultCredentials; " |
225 | - "(new-object System.Net.WebClient).DownloadFile(%(url)r, %(target)r)" | |
226 | - % vars() | |
248 | + '(new-object System.Net.WebClient).DownloadFile("%(url)s", "%(target)s")' | |
249 | + % locals() | |
227 | 250 | ) |
228 | 251 | cmd = [ |
229 | 252 | 'powershell', |
... | ... | @@ -248,7 +271,7 @@ download_file_powershell.viable = has_powershell |
248 | 271 | |
249 | 272 | |
250 | 273 | def download_file_curl(url, target): |
251 | - cmd = ['curl', url, '--silent', '--output', target] | |
274 | + cmd = ['curl', url, '--location', '--silent', '--output', target] | |
252 | 275 | _clean_check(cmd, target) |
253 | 276 | |
254 | 277 | |
... | ... | @@ -321,6 +344,7 @@ def download_setuptools( |
321 | 344 | ``downloader_factory`` should be a function taking no arguments and |
322 | 345 | returning a function for downloading a URL to a target. |
323 | 346 | """ |
347 | + version = _resolve_version(version) | |
324 | 348 | # making sure we use the absolute path |
325 | 349 | to_dir = os.path.abspath(to_dir) |
326 | 350 | zip_name = "setuptools-%s.zip" % version |
... | ... | @@ -333,6 +357,27 @@ def download_setuptools( |
333 | 357 | return os.path.realpath(saveto) |
334 | 358 | |
335 | 359 | |
360 | +def _resolve_version(version): | |
361 | + """ | |
362 | + Resolve LATEST version | |
363 | + """ | |
364 | + if version is not LATEST: | |
365 | + return version | |
366 | + | |
367 | + meta_url = urljoin(DEFAULT_URL, '/pypi/setuptools/json') | |
368 | + resp = urlopen(meta_url) | |
369 | + with contextlib.closing(resp): | |
370 | + try: | |
371 | + charset = resp.info().get_content_charset() | |
372 | + except Exception: | |
373 | + # Python 2 compat; assume UTF-8 | |
374 | + charset = 'UTF-8' | |
375 | + reader = codecs.getreader(charset) | |
376 | + doc = json.load(reader(resp)) | |
377 | + | |
378 | + return str(doc['info']['version']) | |
379 | + | |
380 | + | |
336 | 381 | def _build_install_args(options): |
337 | 382 | """ |
338 | 383 | Build the arguments to 'python setup.py install' on the setuptools package. |
... | ... | @@ -347,7 +392,7 @@ def _parse_args(): |
347 | 392 | parser = optparse.OptionParser() |
348 | 393 | parser.add_option( |
349 | 394 | '--user', dest='user_install', action='store_true', default=False, |
350 | - help='install in user site package (requires Python 2.6 or later)') | |
395 | + help='install in user site package') | |
351 | 396 | parser.add_option( |
352 | 397 | '--download-base', dest='download_base', metavar="URL", |
353 | 398 | default=DEFAULT_URL, |
... | ... | @@ -362,9 +407,9 @@ def _parse_args(): |
362 | 407 | default=DEFAULT_VERSION, |
363 | 408 | ) |
364 | 409 | parser.add_option( |
365 | - '--to-dir', | |
366 | - help="Directory to save (and re-use) package", | |
367 | - default=DEFAULT_SAVE_DIR, | |
410 | + '--to-dir', | |
411 | + help="Directory to save (and re-use) package", | |
412 | + default=DEFAULT_SAVE_DIR, | |
368 | 413 | ) |
369 | 414 | options, args = parser.parse_args() |
370 | 415 | # positional arguments are ignored |
... | ... | @@ -372,13 +417,13 @@ def _parse_args(): |
372 | 417 | |
373 | 418 | |
374 | 419 | def _download_args(options): |
375 | - """Return args for download_setuptools function from cmdline args.""" | |
376 | - return dict( | |
377 | - version=options.version, | |
378 | - download_base=options.download_base, | |
379 | - downloader_factory=options.downloader_factory, | |
380 | - to_dir=options.to_dir, | |
381 | - ) | |
420 | + """Return args for download_setuptools function from cmdline args.""" | |
421 | + return dict( | |
422 | + version=options.version, | |
423 | + download_base=options.download_base, | |
424 | + downloader_factory=options.downloader_factory, | |
425 | + to_dir=options.to_dir, | |
426 | + ) | |
382 | 427 | |
383 | 428 | |
384 | 429 | def main(): | ... | ... |
op_robot_tests/rebot.py
deleted
100644 → 0
... | ... | @@ -63,16 +63,16 @@ Quinta: |
63 | 63 | tender_owner: Tender_Owner |
64 | 64 | viewer: Tender_Viewer |
65 | 65 | timeout_on_wait: 15 |
66 | -E-tender: | |
66 | +Etender: | |
67 | 67 | intervals: |
68 | 68 | default: |
69 | 69 | enquiry: [0, 5] |
70 | 70 | keywords_file: etender |
71 | 71 | roles: |
72 | - provider: E-tender_Provider1 | |
73 | - provider1: E-tender_Provider2 | |
74 | - tender_owner: E-tender_Owner | |
75 | - viewer: E-tender_Viewer | |
72 | + provider: Etender_Provider1 | |
73 | + provider1: Etender_Provider2 | |
74 | + tender_owner: Etender_Owner | |
75 | + viewer: Etender_Viewer | |
76 | 76 | timeout_on_wait: 600 |
77 | 77 | DZO: |
78 | 78 | intervals: | ... | ... |
... | ... | @@ -15,36 +15,36 @@ users: |
15 | 15 | api_key: "" |
16 | 16 | broker: Quinta |
17 | 17 | browser: firefox |
18 | - E-tender_Owner: | |
19 | - broker: E-tender | |
18 | + Etender_Owner: | |
19 | + broker: Etender | |
20 | 20 | homepage: "http://bid.uat.e-tender.biz/#/" |
21 | 21 | login: Misha2 |
22 | 22 | password: Password1 |
23 | 23 | browser: chrome |
24 | 24 | position: [0, 0] |
25 | - size: [800, 800] | |
26 | - E-tender_Provider1: | |
27 | - broker: E-tender | |
25 | + size: [1366, 800] | |
26 | + Etender_Provider1: | |
27 | + broker: Etender | |
28 | 28 | homepage: "http://bid.uat.e-tender.biz/#/" |
29 | 29 | login: st_org |
30 | 30 | password: 12345678 |
31 | 31 | browser: chrome |
32 | - position: [700, 0] | |
33 | - size: [700, 800] | |
34 | - E-tender_Provider2: | |
35 | - broker: E-tender | |
32 | + position: [0, 0] | |
33 | + size: [1366, 800] | |
34 | + Etender_Provider2: | |
35 | + broker: Etender | |
36 | 36 | homepage: "http://bid.uat.e-tender.biz/#/" |
37 | 37 | login: provider2 |
38 | 38 | password: Qa123456 |
39 | 39 | browser: chrome |
40 | - position: [700, 0] | |
41 | - size: [640, 450] | |
42 | - E-tender_Viewer: | |
43 | - broker: E-tender | |
40 | + position: [0, 0] | |
41 | + size: [1366, 800] | |
42 | + Etender_Viewer: | |
43 | + broker: Etender | |
44 | 44 | homepage: "http://bid.uat.e-tender.biz/#/" |
45 | 45 | browser: chrome |
46 | 46 | position: [0, 0] |
47 | - size: [640, 450] | |
47 | + size: [1366, 800] | |
48 | 48 | DZO_Owner: |
49 | 49 | broker: DZO |
50 | 50 | homepage: "http://dz2.byustudio.in.ua" | ... | ... |
1 | 1 | # -*- coding: utf-8 - |
2 | 2 | from datetime import timedelta |
3 | 3 | from faker import Factory |
4 | +from faker.providers.company.en_US import Provider as CompanyProviderEnUs | |
5 | +from faker.providers.company.ru_RU import Provider as CompanyProviderRuRu | |
4 | 6 | from munch import munchify |
5 | 7 | from uuid import uuid4 |
6 | 8 | from tempfile import NamedTemporaryFile |
... | ... | @@ -10,10 +12,16 @@ import os |
10 | 12 | import random |
11 | 13 | |
12 | 14 | |
13 | -fake = Factory.create('uk_UA') | |
14 | -fake_ru = Factory.create('ru') | |
15 | -fake_en = Factory.create() | |
16 | -fake.add_provider(OP_Provider) | |
15 | +fake_en = Factory.create(locale='en_US') | |
16 | +fake_ru = Factory.create(locale='ru_RU') | |
17 | +fake_uk = Factory.create(locale='uk_UA') | |
18 | +fake_uk.add_provider(OP_Provider) | |
19 | +fake = fake_uk | |
20 | + | |
21 | +# This workaround fixes an error caused by missing "catch_phrase" class method | |
22 | +# for the "ru_RU" locale in Faker >= 0.7.4 | |
23 | +fake_ru.add_provider(CompanyProviderEnUs) | |
24 | +fake_ru.add_provider(CompanyProviderRuRu) | |
17 | 25 | |
18 | 26 | |
19 | 27 | def create_fake_sentence(): | ... | ... |
... | ... | @@ -18,29 +18,26 @@ setup(name='op_robot_tests', |
18 | 18 | zip_safe=False, |
19 | 19 | install_requires=[ |
20 | 20 | # -*- Extra requirements: -*- |
21 | - 'robotframework', | |
22 | - 'robotframework-selenium2library', | |
23 | - 'robotframework-debuglibrary', | |
24 | - 'robotframework-selenium2screenshots', | |
21 | + 'Faker', | |
25 | 22 | 'Pillow', |
26 | - 'iso8601', | |
27 | 23 | 'PyYAML', |
28 | - 'munch', | |
29 | - 'fake-factory', | |
24 | + 'barbecue', | |
25 | + 'chromedriver', | |
26 | + 'dateutils', | |
30 | 27 | 'dpath', |
28 | + 'haversine', | |
29 | + 'iso8601', | |
31 | 30 | 'jsonpath-rw', |
32 | - 'dateutils', | |
33 | - 'pytz', | |
31 | + 'munch', | |
34 | 32 | 'parse', |
35 | - 'chromedriver', | |
36 | - 'barbecue', | |
37 | - 'haversine' | |
33 | + 'pytz', | |
34 | + 'robotframework', | |
35 | + 'robotframework-selenium2library', | |
36 | + 'selenium < 3.0.dev0', | |
38 | 37 | ], |
39 | 38 | entry_points={ |
40 | 39 | 'console_scripts': [ |
41 | - 'openprocurement_tests = op_robot_tests.runner:runner', | |
42 | 40 | 'op_tests = op_robot_tests.runner:runner', |
43 | - 'rebot = op_robot_tests.rebot:rebot' | |
44 | 41 | ], |
45 | 42 | } |
46 | 43 | ) | ... | ... |
Please
register
or
login
to post a comment