Commit b9020598c0c63b5f64e19bb4922d8818a9efc58f
1 parent
4986f5e8
Use the optimal values for period intervals
The values are computed based on which brokers are active in current test suite. Even though the implementation is a bit complicated, explanation is very simple: The greatest value among currently used brokers is taken and then used everywhere. Each mode is independent, startDate and endDate are independent too.
Showing
2 changed files
with
49 additions
and
1 deletions
@@ -54,6 +54,8 @@ Set Suite Variable With Default Value | @@ -54,6 +54,8 @@ Set Suite Variable With Default Value | ||
54 | Завантажуємо дані про користувачів і майданчики | 54 | Завантажуємо дані про користувачів і майданчики |
55 | Log ${broker} | 55 | Log ${broker} |
56 | Log ${role} | 56 | Log ${role} |
57 | + # Suite variable; should be present in every test suite | ||
58 | + # in `*** Variables ***` section | ||
57 | Log Many @{used_roles} | 59 | Log Many @{used_roles} |
58 | 60 | ||
59 | # Load brokers data | 61 | # Load brokers data |
@@ -92,7 +94,10 @@ Set Suite Variable With Default Value | @@ -92,7 +94,10 @@ Set Suite Variable With Default Value | ||
92 | \ ... ${BROKERS['Quinta'].roles.${tmp_role}} | 94 | \ ... ${BROKERS['Quinta'].roles.${tmp_role}} |
93 | \ Append To List ${used_users} ${${tmp_role}} | 95 | \ Append To List ${used_users} ${${tmp_role}} |
94 | \ Append To List ${used_brokers} ${USERS.users.${${tmp_role}}.broker} | 96 | \ Append To List ${used_brokers} ${USERS.users.${${tmp_role}}.broker} |
97 | + # Since `@{used_roles}` is already a suite variable, | ||
98 | + # let's make `@{used_brokers}` alike. | ||
95 | ${used_brokers}= Remove Duplicates ${used_brokers} | 99 | ${used_brokers}= Remove Duplicates ${used_brokers} |
100 | + Set Suite Variable ${used_brokers} | ||
96 | # We need to create two lists since Robot Framework doesn't support | 101 | # We need to create two lists since Robot Framework doesn't support |
97 | # dicts in `:FOR` loops. | 102 | # dicts in `:FOR` loops. |
98 | Log Many @{used_users} | 103 | Log Many @{used_users} |
@@ -174,7 +179,7 @@ Get Broker Property By Username | @@ -174,7 +179,7 @@ Get Broker Property By Username | ||
174 | 179 | ||
175 | 180 | ||
176 | Підготовка даних для створення тендера | 181 | Підготовка даних для створення тендера |
177 | - ${period_intervals}= Get Broker Property By Username ${tender_owner} intervals | 182 | + ${period_intervals}= compute_intrs ${BROKERS} ${used_brokers} |
178 | ${tender_data}= prepare_test_tender_data ${period_intervals} ${mode} | 183 | ${tender_data}= prepare_test_tender_data ${period_intervals} ${mode} |
179 | ${TENDER}= Create Dictionary | 184 | ${TENDER}= Create Dictionary |
180 | Set Global Variable ${TENDER} | 185 | Set Global Variable ${TENDER} |
@@ -160,6 +160,49 @@ def load_data_from(file_name, mode=None): | @@ -160,6 +160,49 @@ def load_data_from(file_name, mode=None): | ||
160 | return file_data | 160 | return file_data |
161 | 161 | ||
162 | 162 | ||
163 | +def compute_intrs(brokers_data, used_brokers): | ||
164 | + """Compute optimal values for period intervals. | ||
165 | + | ||
166 | + Notice: This function is maximally effective if ``brokers_data`` | ||
167 | + does not contain ``Default`` entry. | ||
168 | + Using `load_data_from` with ``mode='brokers'`` is recommended. | ||
169 | + """ | ||
170 | + num_types = (int, long, float) | ||
171 | + | ||
172 | + def recur(l, r): | ||
173 | + l, r = deepcopy(l), deepcopy(r) | ||
174 | + if isinstance(l, list) and isinstance(r, list) and len(l) == len(r): | ||
175 | + lst = [] | ||
176 | + for ll, rr in zip(l, r): | ||
177 | + lst.append(recur(ll, rr)) | ||
178 | + return lst | ||
179 | + elif isinstance(l, num_types) and isinstance(r, num_types): | ||
180 | + if l == r: | ||
181 | + return l | ||
182 | + if l > r: | ||
183 | + return l | ||
184 | + if l < r: | ||
185 | + return r | ||
186 | + elif isinstance(l, dict) and isinstance(r, dict): | ||
187 | + for k, v in r.iteritems(): | ||
188 | + if k not in l.keys(): | ||
189 | + l[k] = v | ||
190 | + else: | ||
191 | + l[k] = recur(l[k], v) | ||
192 | + return l | ||
193 | + else: | ||
194 | + raise TypeError("Couldn't recur({0}, {1})".format( | ||
195 | + str(type(l)), str(type(r)))) | ||
196 | + | ||
197 | + intrs = [] | ||
198 | + for i in used_brokers: | ||
199 | + intrs.append(brokers_data[i]['intervals']) | ||
200 | + result = intrs.pop(0) | ||
201 | + for i in intrs: | ||
202 | + result = recur(result, i) | ||
203 | + return result | ||
204 | + | ||
205 | + | ||
163 | def prepare_test_tender_data(procedure_intervals, mode): | 206 | def prepare_test_tender_data(procedure_intervals, mode): |
164 | # Get actual intervals by mode name | 207 | # Get actual intervals by mode name |
165 | if mode in procedure_intervals: | 208 | if mode in procedure_intervals: |
Please
register
or
login
to post a comment