Commit 37b9eb5926b5f4fd633056d3359f42d32bb20df8
Merge pull request #40 from selurvedu/get_now
Use get_now where possible
Showing
11 changed files
with
56 additions
and
61 deletions
1 | 1 | # robot_tests |
2 | 2 | |
3 | +## User acceptance tests for [OpenProcurement](https://github.com/openprocurement) | |
4 | + | |
3 | 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) |
4 | 6 | |
5 | -## Запуск тестів ## | |
6 | -Необхідно запустити: | |
7 | -``` | |
8 | -bin/openprocurement_tests | |
9 | -``` | |
10 | - | |
11 | -В тестах використовуються користувачі, які описані в https://github.com/openprocurement/robot_tests/blob/master/op_robot_tests/tests_files/data/users.yaml. За замовчуванням тести використовують користувачів з реалізацією запитів в центральну базу за допомогою API клієнта (умовна назва Quinta). Скрипт ```bin/openprocurement_tests``` дає змогу змінити користувача для ролей. | |
12 | -Для прикладу для тесту 'CreateTenderTest' використовуються ролі *tender_owner* та *provider*. В тесті прописано, що роль [*tender_owner* буде виконувати *Tender_Owner*](https://github.com/openprocurement/robot_tests/blob/master/op_robot_tests/tests_files/singleItemTender.robot#L16) з [відповідною реалізацією запитів](https://github.com/openprocurement/robot_tests/blob/master/op_robot_tests/tests_files/data/users.yaml#L4) в центральну базу. | |
13 | -Для запуску тестів де роль *tender_owner* виконує [*Prom_Owner*](https://github.com/openprocurement/robot_tests/blob/master/op_robot_tests/tests_files/data/users.yaml#L7) запускаємо | |
14 | -``` | |
15 | -bin/openprocurement_tests -v tender_owner:Prom_Owner | |
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. | ... | ... |
... | ... | @@ -54,8 +54,10 @@ ${locator.questions[0].answer} xpath=(//div[@tex |
54 | 54 | |
55 | 55 | Login |
56 | 56 | Wait Until Page Contains Element id=inputUsername 10 |
57 | + Sleep 1 | |
57 | 58 | Input text id=inputUsername ${USERS.users['${username}'].login} |
58 | 59 | Wait Until Page Contains Element id=inputPassword 10 |
60 | + Sleep 1 | |
59 | 61 | Input text id=inputPassword ${USERS.users['${username}'].password} |
60 | 62 | Click Button id=btn_submit |
61 | 63 | |
... | ... | @@ -98,8 +100,8 @@ Login |
98 | 100 | Wait Until Page Contains Мої закупівлі 10 |
99 | 101 | Sleep 1 |
100 | 102 | Click Element xpath=//a[contains(@class, 'ng-binding')][./text()='Мої закупівлі'] |
103 | + Sleep 5 | |
101 | 104 | Wait Until Page Contains Element xpath=//a[contains(@class, 'btn btn-info')] |
102 | - Sleep 1 | |
103 | 105 | Click Element xpath=//a[contains(@class, 'btn btn-info')] |
104 | 106 | Wait Until Page Contains Element id=title |
105 | 107 | Input text id=title ${title} |
... | ... | @@ -190,6 +192,10 @@ Set Multi Ids |
190 | 192 | |
191 | 193 | Клацнути і дочекатися |
192 | 194 | [Arguments] ${click_locator} ${wanted_locator} ${timeout} |
195 | + [Documentation] | |
196 | + ... click_locator: Where to click | |
197 | + ... wanted_locator: What are we waiting for | |
198 | + ... timeout: Timeout | |
193 | 199 | Click Link ${click_locator} |
194 | 200 | Wait Until Page Contains Element ${wanted_locator} ${timeout} |
195 | 201 | ... | ... |
1 | 1 | from datetime import datetime |
2 | 2 | from iso8601 import parse_date |
3 | +from op_robot_tests.tests_files.service_keywords import get_now | |
3 | 4 | from calendar import monthrange |
4 | 5 | |
5 | 6 | |
6 | 7 | def newtend_date_picker_index(isodate): |
7 | - now = datetime.today() | |
8 | + now = get_now() | |
8 | 9 | date_str = '01' + str(now.month) + str(now.year) |
9 | 10 | first_day_of_month = datetime.strptime(date_str, "%d%m%Y") |
10 | 11 | mod = first_day_of_month.isoweekday() - 2 | ... | ... |
1 | 1 | # -*- coding: utf-8 - |
2 | -from datetime import datetime, timedelta | |
2 | +from datetime import timedelta | |
3 | 3 | from faker import Factory |
4 | 4 | from munch import munchify |
5 | -from pytz import timezone | |
6 | 5 | from tempfile import NamedTemporaryFile |
7 | -import os | |
6 | +from .local_time import get_now | |
8 | 7 | |
9 | 8 | fake = Factory.create('uk_UA') |
10 | 9 | fake_ru = Factory.create('ru') |
11 | 10 | fake_en = Factory.create() |
12 | 11 | |
13 | -TZ = timezone(os.environ['TZ'] if 'TZ' in os.environ else 'Europe/Kiev') | |
14 | - | |
15 | - | |
16 | -def get_now(): | |
17 | - return datetime.now(TZ) | |
18 | - | |
19 | 12 | |
20 | 13 | def create_fake_doc(): |
21 | 14 | content = fake.text() | ... | ... |
... | ... | @@ -5,12 +5,13 @@ Library String |
5 | 5 | Library Collections |
6 | 6 | Library Selenium2Library |
7 | 7 | Library DateTime |
8 | -Library Selenium2Screenshots | |
9 | 8 | Library DebugLibrary |
10 | 9 | |
11 | 10 | *** Keywords *** |
12 | 11 | TestSuiteSetup |
13 | - Завантажуємо дані про користувачів і майданчики | |
12 | + Set Selenium Implicit Wait 5 s | |
13 | + Set Selenium Timeout 10 s | |
14 | + Завантажуємо дані про користувачів і майданчики | |
14 | 15 | |
15 | 16 | Set Suite Variable With Default Value |
16 | 17 | [Arguments] ${suite_var} ${def_value} |
... | ... | @@ -103,7 +104,7 @@ Get Broker Property By Username |
103 | 104 | [Documentation] |
104 | 105 | ... Get ${wait_timeout} for specified user and wait |
105 | 106 | ... until that timeout runs out. |
106 | - ${now}= Get Current Date | |
107 | + ${now}= Get Current TZdate | |
107 | 108 | ${delta}= Subtract Date From Date ${now} ${TENDER['LAST_MODIFICATION_DATE']} |
108 | 109 | ${timeout_on_wait}= Get Broker Property By Username ${username} timeout_on_wait |
109 | 110 | ${wait_timeout}= Subtract Time From Time ${timeout_on_wait} ${delta} | ... | ... |
op_robot_tests/tests_files/local_time.py
0 → 100644
... | ... | @@ -20,7 +20,7 @@ ${broker} Quinta |
20 | 20 | [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість оголосити тендер |
21 | 21 | ${tender_data}= Підготовка початкових даних |
22 | 22 | ${TENDER_UAID}= Викликати для учасника ${tender_owner} Створити тендер ${tender_data} |
23 | - ${LAST_MODIFICATION_DATE}= Get Current Date | |
23 | + ${LAST_MODIFICATION_DATE}= Get Current TZdate | |
24 | 24 | Set To Dictionary ${USERS.users['${tender_owner}']} initial_data ${tender_data} |
25 | 25 | Set To Dictionary ${TENDER} TENDER_UAID ${TENDER_UAID} |
26 | 26 | Set To Dictionary ${TENDER} LAST_MODIFICATION_DATE ${LAST_MODIFICATION_DATE} | ... | ... |
1 | 1 | # -*- coding: utf-8 - |
2 | -from datetime import datetime, timedelta | |
2 | +from datetime import timedelta | |
3 | 3 | from dateutil.parser import parse |
4 | 4 | from dpath.util import set as xpathset |
5 | 5 | from iso8601 import parse_date |
6 | 6 | from json import load |
7 | 7 | from jsonpath_rw import parse as parse_path |
8 | 8 | from munch import fromYAML, Munch, munchify |
9 | -from pytz import timezone | |
10 | 9 | from robot.errors import HandlerExecutionFailed |
11 | 10 | from robot.libraries.BuiltIn import BuiltIn |
12 | 11 | from robot.output import LOGGER |
... | ... | @@ -20,18 +19,12 @@ from .initial_data import ( |
20 | 19 | test_complaint_reply_data, test_question_answer_data, |
21 | 20 | test_question_data, test_tender_data, test_tender_data_multiple_lots |
22 | 21 | ) |
22 | +from .local_time import get_now, TZ | |
23 | 23 | import os |
24 | 24 | |
25 | 25 | |
26 | -TZ = timezone(os.environ['TZ'] if 'TZ' in os.environ else 'Europe/Kiev') | |
27 | - | |
28 | - | |
29 | -def get_now(): | |
30 | - return datetime.now(TZ) | |
31 | - | |
32 | - | |
33 | -def get_date(): | |
34 | - return get_now().isoformat() | |
26 | +def get_current_tzdate(): | |
27 | + return get_now().strftime('%Y-%m-%d %H:%M:%S.%f') | |
35 | 28 | |
36 | 29 | |
37 | 30 | def get_file_contents(path): |
... | ... | @@ -53,15 +46,15 @@ def prepare_prom_test_tender_data(period_intervals, mode): |
53 | 46 | return munchify({'data': t_data}) |
54 | 47 | |
55 | 48 | |
56 | -def compare_date(data1, data2): | |
57 | - data1 = parse(data1) | |
58 | - data2 = parse(data2) | |
59 | - if data1.tzinfo is None: | |
60 | - data1 = TZ.localize(data1) | |
61 | - if data2.tzinfo is None: | |
62 | - data2 = TZ.localize(data2) | |
49 | +def compare_date(date1, date2): | |
50 | + date1 = parse(date1) | |
51 | + date2 = parse(date2) | |
52 | + if date1.tzinfo is None: | |
53 | + date1 = TZ.localize(date1) | |
54 | + if date2.tzinfo is None: | |
55 | + date2 = TZ.localize(date2) | |
63 | 56 | |
64 | - delta = (data1 - data2).total_seconds() | |
57 | + delta = (date1 - date2).total_seconds() | |
65 | 58 | if abs(delta) > 60: |
66 | 59 | return False |
67 | 60 | return True |
... | ... | @@ -189,7 +182,7 @@ def merge_dicts(left, right): |
189 | 182 | |
190 | 183 | # GUI Frontends common |
191 | 184 | def add_data_for_gui_frontends(tender_data): |
192 | - now = datetime.now() | |
185 | + now = get_now() | |
193 | 186 | # tender_data.data.enquiryPeriod['startDate'] = (now + timedelta(minutes=2)).isoformat() |
194 | 187 | tender_data.data.enquiryPeriod['endDate'] = (now + timedelta(minutes=6)).isoformat() |
195 | 188 | tender_data.data.tenderPeriod['startDate'] = (now + timedelta(minutes=7)).isoformat() | ... | ... |
... | ... | @@ -23,7 +23,7 @@ ${question_id} 0 |
23 | 23 | [Documentation] Створення закупівлі замовником, обовязково має повертати UAID закупівлі (номер тендера), |
24 | 24 | ${tender_data}= Підготовка початкових даних |
25 | 25 | ${TENDER_UAID}= Викликати для учасника ${tender_owner} Створити тендер ${tender_data} |
26 | - ${LAST_MODIFICATION_DATE}= Get Current Date | |
26 | + ${LAST_MODIFICATION_DATE}= Get Current TZdate | |
27 | 27 | Set To Dictionary ${USERS.users['${tender_owner}']} initial_data ${tender_data} |
28 | 28 | Set To Dictionary ${TENDER} TENDER_UAID ${TENDER_UAID} |
29 | 29 | Set To Dictionary ${TENDER} LAST_MODIFICATION_DATE ${LAST_MODIFICATION_DATE} |
... | ... | @@ -63,8 +63,7 @@ ${question_id} 0 |
63 | 63 | |
64 | 64 | Відображення tenderID оголошеного тендера |
65 | 65 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера |
66 | - ${field_response}= Викликати для учасника ${viewer} Отримати інформацію із тендера tenderID | |
67 | - Should Be Equal ${TENDER['TENDER_UAID']} ${field_response} Майданчик ${USERS.users['${viewer}'].broker} | |
66 | + Звірити поле тендера із значенням ${viewer} ${TENDER['TENDER_UAID']} tenderID | |
68 | 67 | |
69 | 68 | Відображення procuringEntity.name оголошеного тендера |
70 | 69 | [Tags] ${USERS.users['${viewer}'].broker}: Відображення основних даних оголошеного тендера |
... | ... | @@ -176,7 +175,7 @@ ${question_id} 0 |
176 | 175 | Задати питання |
177 | 176 | [Tags] ${USERS.users['${provider}'].broker}: Можливість задати запитання |
178 | 177 | Викликати для учасника ${provider} Задати питання ${TENDER['TENDER_UAID']} ${QUESTIONS[${question_id}]} |
179 | - ${now}= Get Current Date | |
178 | + ${now}= Get Current TZdate | |
180 | 179 | Set To Dictionary ${QUESTIONS[${question_id}].data} date ${now} |
181 | 180 | |
182 | 181 | Відображення заголовку анонімного питання без відповіді |
... | ... | @@ -209,7 +208,7 @@ ${question_id} 0 |
209 | 208 | Відповісти на запитання |
210 | 209 | [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість відповісти на запитання |
211 | 210 | Викликати для учасника ${tender_owner} Відповісти на питання ${TENDER['TENDER_UAID']} 0 ${ANSWERS[0]} |
212 | - ${now}= Get Current Date | |
211 | + ${now}= Get Current TZdate | |
213 | 212 | Set To Dictionary ${ANSWERS[${question_id}].data} date ${now} |
214 | 213 | |
215 | 214 | Відображення відповіді на запитання |
... | ... | @@ -307,8 +306,9 @@ ${question_id} 0 |
307 | 306 | |
308 | 307 | Неможливість побачити цінові пропозиції учасників під час прийому пропозицій |
309 | 308 | [Tags] ${USERS.users['${viewer}'].broker}: Можливість подати цінову пропозицію |
310 | - ${bids}= Викликати для учасника ${viewer} Отримати інформацію із тендера bids | |
311 | - Should Be Equal ${bids} ${None} | |
309 | + ${bids}= Викликати для учасника ${viewer} Отримати інформацію із тендера bids | |
310 | + ${bool}= Convert To Boolean ${bids} | |
311 | + Should Be Equal ${bool} ${False} | |
312 | 312 | |
313 | 313 | Завантажити документ другим учасником |
314 | 314 | [Tags] ${USERS.users['${provider1}'].broker}: Можливість прийняти пропозицію переможця | ... | ... |
... | ... | @@ -21,7 +21,7 @@ ${broker} Quinta |
21 | 21 | [Documentation] Створення закупівлі замовником, обовязково має повертати UAID закупівлі (номер тендера), |
22 | 22 | ${tender_data}= Підготовка початкових даних |
23 | 23 | ${TENDER_UAID}= Викликати для учасника ${tender_owner} Створити тендер ${tender_data} |
24 | - ${LAST_MODIFICATION_DATE}= Get Current Date | |
24 | + ${LAST_MODIFICATION_DATE}= Get Current TZdate | |
25 | 25 | Set To Dictionary ${TENDER} TENDER_UAID ${TENDER_UAID} |
26 | 26 | Set To Dictionary ${TENDER} LAST_MODIFICATION_DATE ${LAST_MODIFICATION_DATE} |
27 | 27 | log ${TENDER} |
... | ... | @@ -35,7 +35,7 @@ ${broker} Quinta |
35 | 35 | [Tags] ${USERS.users['${provider}'].broker}: Можливість подати скаргу на умови |
36 | 36 | [Documentation] Користувач ${USERS.users['${provider}'].broker} намагається подати скаргу на умови оголошеної закупівлі |
37 | 37 | Викликати для учасника ${provider} Подати скаргу ${TENDER['TENDER_UAID']} ${COMPLAINTS[0]} |
38 | - ${LAST_MODIFICATION_DATE}= Get Current Date | |
38 | + ${LAST_MODIFICATION_DATE}= Get Current TZdate | |
39 | 39 | Set Global Variable ${LAST_MODIFICATION_DATE} |
40 | 40 | |
41 | 41 | Можливість побачити скаргу користувачем |
... | ... | @@ -56,24 +56,24 @@ ${broker} Quinta |
56 | 56 | Можливість відкинути скаргу на умови |
57 | 57 | [Tags] ${USERS.users['${tender_owner}'].broker}: Можливість відкинути скаргу на умови |
58 | 58 | Викликати для учасника ${provider} Подати скаргу ${TENDER['TENDER_UAID']} ${COMPLAINTS[0]} |
59 | - ${LAST_MODIFICATION_DATE}= Get Current Date | |
59 | + ${LAST_MODIFICATION_DATE}= Get Current TZdate | |
60 | 60 | Set Global Variable ${LAST_MODIFICATION_DATE} |
61 | 61 | Викликати для учасника ${viewer} Оновити сторінку з тендером ${TENDER['TENDER_UAID']} |
62 | 62 | Set To Dictionary ${COMPLAINTS[0].data} status invalid |
63 | 63 | Викликати для учасника ${tender_owner} Обробити скаргу ${TENDER['TENDER_UAID']} 1 ${COMPLAINTS[0]} |
64 | 64 | log many ${COMPLAINTS[0]} |
65 | - ${LAST_MODIFICATION_DATE}= Get Current Date | |
65 | + ${LAST_MODIFICATION_DATE}= Get Current TZdate | |
66 | 66 | Set Global Variable ${LAST_MODIFICATION_DATE} |
67 | 67 | Викликати для учасника ${viewer} Оновити сторінку з тендером ${TENDER['TENDER_UAID']} |
68 | 68 | |
69 | 69 | Можливість задовільнити скаргу на умови |
70 | 70 | [Tags] ${USERS.users['${provider}'].broker}: Можливість відповісти на запитання |
71 | 71 | Викликати для учасника ${provider} Подати скаргу ${TENDER['TENDER_UAID']} ${COMPLAINTS[0]} |
72 | - ${LAST_MODIFICATION_DATE}= Get Current Date | |
72 | + ${LAST_MODIFICATION_DATE}= Get Current TZdate | |
73 | 73 | Set Global Variable ${LAST_MODIFICATION_DATE} |
74 | 74 | Викликати для учасника ${viewer} Оновити сторінку з тендером ${TENDER['TENDER_UAID']} |
75 | 75 | Set To Dictionary ${COMPLAINTS[0].data} status resolved |
76 | 76 | Викликати для учасника ${tender_owner} Обробити скаргу ${TENDER['TENDER_UAID']} 2 ${COMPLAINTS[0]} |
77 | 77 | log many ${COMPLAINTS[0]} |
78 | - ${LAST_MODIFICATION_DATE}= Get Current Date | |
78 | + ${LAST_MODIFICATION_DATE}= Get Current TZdate | |
79 | 79 | Set Global Variable ${LAST_MODIFICATION_DATE} | ... | ... |
Please
register
or
login
to post a comment