Pytest - How To Parameterize Tests With Multiple Scenarios?
Solution 1:
One common practice is to set and read from environment variables to determine which platform you are running from.
For example, in the environment you can have a variable isProduction=1
. Then in your code, you can check by os.environ['isProduction'] == 1
.
You can even save the private ids in the environment for reasons such as safety. For example in the environment, you can have the following variables on nonproduction
id1="subnet-11f6xx0b65b5cxx38"
id2="subnet-116aaaf1ce207xx99"
id3"subnet-11xxfda8f811fxx77"
And another set on production machine
id1="subnet-08f6d70b65b5cxx38"id2="subnet-0b6aaaf1ce207xx03"id3="subnet-0e54fda8f811fxxd8"
in the code you do
import os
private_ids = [os.environ['id1'], os.environ['id2'], os.environ['id3']]
So you'll get the configs on each machine. Just make sure in your workflow/testflow the environment variables are correctly sourced.
Solution 2:
You can parametrize the tests via metafunc if you need to execute additional logic on parametrization. Example:
import os
import pytest
production_private_ids = [...]
nonproduction_private_ids = [...]
defpytest_generate_tests(metafunc):
# if the test has `subnet` in args, parametrize it nowif'subnet'in metafunc.fixturenames:
# replace with your environment checkif os.environ.get('NAME', None) == 'production':
ids = production_private_ids
else:
ids = nonproduction_private_ids
metafunc.parametrize('subnet', ids)
deftest_sharing_subnets_exist(subnet, accountid):
team_subnet = get_team_subnets(accountid)
assert subnet in team_subnet
Now running pytest ...
will check only non-production IDs, while NAME="production" pytest ...
will check only production IDs.
Post a Comment for "Pytest - How To Parameterize Tests With Multiple Scenarios?"