Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test_definitions.py: Load YAML files only once #388

Merged
merged 1 commit into from
Jan 9, 2024

Conversation

magnusbaeck
Copy link
Member

Applicable Issues

Fixed #386

Description of the Change

Previously, test_definitions.py has loaded all the YAML files in the @pytest.mark.parametrize expression of each test case (i.e. we're parsing 169 YAML files three times over). Instead, preload the files into a global variable that we use in the test parametrization. This decreases the execution time by about 65%.

Also, by passing the "ids" kwarg to @pytest.mark.parametrize we can choose the name of each parametrized test so that's it's useful description rather than just a generic string with an autoincremented integer at the end. This allowed us to cut back on some assertion failure messages since they no longer have to be so verbose.

Alternate Designs

None. Extracting common subexpressions is pretty standard fare.

Benefits

Faster test execution and slightly less boilerplate in the tests.

Possible Drawbacks

None.

Sign-off

Developer's Certificate of Origin 1.1

By making a contribution to this project, I certify that:

(a) The contribution was created in whole or in part by me and I have the right to submit it under the open source license indicated in the file; or

(b) The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate open source license and I have the right under that license to submit that work with modifications, whether created in whole or in part by me, under the same open source license (unless I am permitted to submit under a different license), as indicated in the file; or

(c) The contribution was provided directly to me by some other person who certified (a), (b) or (c) and I have not modified it.

(d) I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with this project or the open source license(s) involved.

Signed-off-by: Magnus Bäck <[email protected]>

Instead of loading the YAML files in @pytest.mark.parametrize
expression of each test case (i.e. we're parsing 169 YAML files
three times over), preload the files into a global variable that
we use in the test parametrization. This decreases the execution
time by about 65%.

Also, by passing the "ids" kwarg to @pytest.mark.parametrize we
can choose the name of each parametrized test so that's it's useful
description rather than just a generic string with an autoincremented
integer at the end. This allowed us to cut back on some assertion
failure messages since they no longer have to be so verbose.
@magnusbaeck magnusbaeck requested a review from a team as a code owner January 7, 2024 20:56
e-backmark-ericsson added a commit to e-backmark-ericsson/eiffel that referenced this pull request Jan 8, 2024
e-backmark-ericsson added a commit to e-backmark-ericsson/eiffel that referenced this pull request Jan 8, 2024
@magnusbaeck magnusbaeck merged commit c0b880d into eiffel-community:master Jan 9, 2024
2 checks passed
@magnusbaeck magnusbaeck deleted the preload-defs branch January 9, 2024 11:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Parameterized tests in test_definitions.py should be optimized
3 participants