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 | [](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