Skip to content

Commit ae83cbf

Browse files
committed
change: refactor automl integ tests
1 parent 9542fe0 commit ae83cbf

File tree

3 files changed

+39
-33
lines changed

3 files changed

+39
-33
lines changed

tests/integ/auto_ml_utils.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,7 @@
2525
TARGET_ATTRIBUTE_NAME = "virginica"
2626

2727

28-
def create_auto_ml_job_if_not_exist(sagemaker_session):
29-
auto_ml_job_name = "python-sdk-integ-test-base-automl-job"
30-
28+
def create_auto_ml_job_if_not_exist(sagemaker_session, auto_ml_job_name):
3129
try:
3230
sagemaker_session.describe_auto_ml_job(job_name=auto_ml_job_name)
3331
except Exception as e: # noqa: F841

tests/integ/test_auto_ml.py

Lines changed: 36 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,6 @@
3939
BASE_JOB_NAME = "auto-ml"
4040
MODE = "ENSEMBLING"
4141

42-
# use a succeeded AutoML job to test describe and list candidates method, otherwise tests will run too long
43-
AUTO_ML_JOB_NAME = "python-sdk-integ-test-base-automl-job"
4442
DEFAULT_MODEL_NAME = "python-sdk-automl"
4543

4644

@@ -50,6 +48,14 @@
5048
}
5149

5250

51+
# use a succeeded AutoML job to test describe and list candidates method, otherwise tests will run too long
52+
# reusable-job will be created once if it doesn't exist, and be reused in relevant tests.
53+
@pytest.fixture(scope="module")
54+
def reusable_job_name():
55+
job_name = unique_name_from_base("reusable-job", max_length=32)
56+
return job_name
57+
58+
5359
@pytest.mark.slow_test
5460
@pytest.mark.skipif(
5561
tests.integ.test_region() in tests.integ.NO_AUTO_ML_REGIONS,
@@ -64,7 +70,7 @@ def test_auto_ml_fit(sagemaker_session):
6470
max_candidates=1,
6571
)
6672

67-
job_name = unique_name_from_base("auto-ml", max_length=32)
73+
job_name = unique_name_from_base(BASE_JOB_NAME, max_length=32)
6874
inputs = sagemaker_session.upload_data(path=TRAINING_DATA, key_prefix=PREFIX + "/input")
6975
with timeout(minutes=AUTO_ML_DEFAULT_TIMEMOUT_MINUTES):
7076
auto_ml.fit(inputs, job_name=job_name)
@@ -83,7 +89,7 @@ def test_auto_ml_fit_local_input(sagemaker_session):
8389
)
8490

8591
inputs = TRAINING_DATA
86-
job_name = unique_name_from_base("auto-ml", max_length=32)
92+
job_name = unique_name_from_base(BASE_JOB_NAME, max_length=32)
8793
with timeout(minutes=AUTO_ML_DEFAULT_TIMEMOUT_MINUTES):
8894
auto_ml.fit(inputs, job_name=job_name)
8995

@@ -100,7 +106,7 @@ def test_auto_ml_input_object_fit(sagemaker_session):
100106
max_candidates=1,
101107
generate_candidate_definitions_only=True,
102108
)
103-
job_name = unique_name_from_base("auto-ml", max_length=32)
109+
job_name = unique_name_from_base(BASE_JOB_NAME, max_length=32)
104110
s3_input = sagemaker_session.upload_data(path=TRAINING_DATA, key_prefix=PREFIX + "/input")
105111
inputs = AutoMLInput(inputs=s3_input, target_attribute_name=TARGET_ATTRIBUTE_NAME)
106112
with timeout(minutes=AUTO_ML_DEFAULT_TIMEMOUT_MINUTES):
@@ -119,7 +125,7 @@ def test_auto_ml_input_object_list_fit(sagemaker_session):
119125
max_candidates=1,
120126
mode=MODE,
121127
)
122-
job_name = unique_name_from_base("auto-ml", max_length=32)
128+
job_name = unique_name_from_base(BASE_JOB_NAME, max_length=32)
123129
s3_input_training = sagemaker_session.upload_data(
124130
path=TRAINING_DATA, key_prefix=PREFIX + "/input"
125131
)
@@ -179,7 +185,7 @@ def test_auto_ml_invalid_target_attribute(sagemaker_session):
179185
auto_ml = AutoML(
180186
role=ROLE, target_attribute_name="y", sagemaker_session=sagemaker_session, max_candidates=1
181187
)
182-
job_name = unique_name_from_base("auto-ml", max_length=32)
188+
job_name = unique_name_from_base(BASE_JOB_NAME, max_length=32)
183189
inputs = sagemaker_session.upload_data(path=TRAINING_DATA, key_prefix=PREFIX + "/input")
184190
with pytest.raises(
185191
ClientError,
@@ -193,7 +199,7 @@ def test_auto_ml_invalid_target_attribute(sagemaker_session):
193199
tests.integ.test_region() in tests.integ.NO_AUTO_ML_REGIONS,
194200
reason="AutoML is not supported in the region yet.",
195201
)
196-
def test_auto_ml_describe_auto_ml_job(sagemaker_session):
202+
def test_auto_ml_describe_auto_ml_job(sagemaker_session, reusable_job_name):
197203
expected_default_input_config = [
198204
{
199205
"DataSource": {
@@ -215,13 +221,13 @@ def test_auto_ml_describe_auto_ml_job(sagemaker_session):
215221
)
216222
}
217223

218-
auto_ml_utils.create_auto_ml_job_if_not_exist(sagemaker_session)
224+
auto_ml_utils.create_auto_ml_job_if_not_exist(sagemaker_session, reusable_job_name)
219225
auto_ml = AutoML(
220226
role=ROLE, target_attribute_name=TARGET_ATTRIBUTE_NAME, sagemaker_session=sagemaker_session
221227
)
222228

223-
desc = auto_ml.describe_auto_ml_job(job_name=AUTO_ML_JOB_NAME)
224-
assert desc["AutoMLJobName"] == AUTO_ML_JOB_NAME
229+
desc = auto_ml.describe_auto_ml_job(job_name=reusable_job_name)
230+
assert desc["AutoMLJobName"] == reusable_job_name
225231
assert desc["AutoMLJobStatus"] == "Completed"
226232
assert isinstance(desc["BestCandidate"], dict)
227233
assert desc["InputDataConfig"] == expected_default_input_config
@@ -233,7 +239,7 @@ def test_auto_ml_describe_auto_ml_job(sagemaker_session):
233239
tests.integ.test_region() in tests.integ.NO_AUTO_ML_REGIONS,
234240
reason="AutoML is not supported in the region yet.",
235241
)
236-
def test_auto_ml_attach(sagemaker_session):
242+
def test_auto_ml_attach(sagemaker_session, reusable_job_name):
237243
expected_default_input_config = [
238244
{
239245
"DataSource": {
@@ -255,13 +261,13 @@ def test_auto_ml_attach(sagemaker_session):
255261
)
256262
}
257263

258-
auto_ml_utils.create_auto_ml_job_if_not_exist(sagemaker_session)
264+
auto_ml_utils.create_auto_ml_job_if_not_exist(sagemaker_session, reusable_job_name)
259265

260266
attached_automl_job = AutoML.attach(
261-
auto_ml_job_name=AUTO_ML_JOB_NAME, sagemaker_session=sagemaker_session
267+
auto_ml_job_name=reusable_job_name, sagemaker_session=sagemaker_session
262268
)
263269
attached_desc = attached_automl_job.describe_auto_ml_job()
264-
assert attached_desc["AutoMLJobName"] == AUTO_ML_JOB_NAME
270+
assert attached_desc["AutoMLJobName"] == reusable_job_name
265271
assert attached_desc["AutoMLJobStatus"] == "Completed"
266272
assert isinstance(attached_desc["BestCandidate"], dict)
267273
assert attached_desc["InputDataConfig"] == expected_default_input_config
@@ -273,28 +279,28 @@ def test_auto_ml_attach(sagemaker_session):
273279
tests.integ.test_region() in tests.integ.NO_AUTO_ML_REGIONS,
274280
reason="AutoML is not supported in the region yet.",
275281
)
276-
def test_list_candidates(sagemaker_session):
277-
auto_ml_utils.create_auto_ml_job_if_not_exist(sagemaker_session)
282+
def test_list_candidates(sagemaker_session, reusable_job_name):
283+
auto_ml_utils.create_auto_ml_job_if_not_exist(sagemaker_session, reusable_job_name)
278284

279285
auto_ml = AutoML(
280286
role=ROLE, target_attribute_name=TARGET_ATTRIBUTE_NAME, sagemaker_session=sagemaker_session
281287
)
282288

283-
candidates = auto_ml.list_candidates(job_name=AUTO_ML_JOB_NAME)
289+
candidates = auto_ml.list_candidates(job_name=reusable_job_name)
284290
assert len(candidates) == 3
285291

286292

287293
@pytest.mark.skipif(
288294
tests.integ.test_region() in tests.integ.NO_AUTO_ML_REGIONS,
289295
reason="AutoML is not supported in the region yet.",
290296
)
291-
def test_best_candidate(sagemaker_session):
292-
auto_ml_utils.create_auto_ml_job_if_not_exist(sagemaker_session)
297+
def test_best_candidate(sagemaker_session, reusable_job_name):
298+
auto_ml_utils.create_auto_ml_job_if_not_exist(sagemaker_session, reusable_job_name)
293299

294300
auto_ml = AutoML(
295301
role=ROLE, target_attribute_name=TARGET_ATTRIBUTE_NAME, sagemaker_session=sagemaker_session
296302
)
297-
best_candidate = auto_ml.best_candidate(job_name=AUTO_ML_JOB_NAME)
303+
best_candidate = auto_ml.best_candidate(job_name=reusable_job_name)
298304
assert len(best_candidate["InferenceContainers"]) == 3
299305
assert len(best_candidate["CandidateSteps"]) == 4
300306
assert best_candidate["CandidateStatus"] == "Completed"
@@ -305,13 +311,13 @@ def test_best_candidate(sagemaker_session):
305311
reason="AutoML is not supported in the region yet.",
306312
)
307313
@pytest.mark.release
308-
def test_deploy_best_candidate(sagemaker_session, cpu_instance_type):
309-
auto_ml_utils.create_auto_ml_job_if_not_exist(sagemaker_session)
314+
def test_deploy_best_candidate(sagemaker_session, cpu_instance_type, reusable_job_name):
315+
auto_ml_utils.create_auto_ml_job_if_not_exist(sagemaker_session, reusable_job_name)
310316

311317
auto_ml = AutoML(
312318
role=ROLE, target_attribute_name=TARGET_ATTRIBUTE_NAME, sagemaker_session=sagemaker_session
313319
)
314-
best_candidate = auto_ml.best_candidate(job_name=AUTO_ML_JOB_NAME)
320+
best_candidate = auto_ml.best_candidate(job_name=reusable_job_name)
315321
endpoint_name = unique_name_from_base("sagemaker-auto-ml-best-candidate-test")
316322

317323
with timeout(minutes=AUTO_ML_DEFAULT_TIMEMOUT_MINUTES):
@@ -336,14 +342,14 @@ def test_deploy_best_candidate(sagemaker_session, cpu_instance_type):
336342
@pytest.mark.skip(
337343
reason="",
338344
)
339-
def test_candidate_estimator_default_rerun_and_deploy(sagemaker_session, cpu_instance_type):
340-
auto_ml_utils.create_auto_ml_job_if_not_exist(sagemaker_session)
345+
def test_candidate_estimator_default_rerun_and_deploy(sagemaker_session, cpu_instance_type, reusable_job_name):
346+
auto_ml_utils.create_auto_ml_job_if_not_exist(sagemaker_session, reusable_job_name)
341347

342348
auto_ml = AutoML(
343349
role=ROLE, target_attribute_name=TARGET_ATTRIBUTE_NAME, sagemaker_session=sagemaker_session
344350
)
345351

346-
candidates = auto_ml.list_candidates(job_name=AUTO_ML_JOB_NAME)
352+
candidates = auto_ml.list_candidates(job_name=reusable_job_name)
347353
candidate = candidates[1]
348354

349355
candidate_estimator = CandidateEstimator(candidate, sagemaker_session)
@@ -369,13 +375,13 @@ def test_candidate_estimator_default_rerun_and_deploy(sagemaker_session, cpu_ins
369375
tests.integ.test_region() in tests.integ.NO_AUTO_ML_REGIONS,
370376
reason="AutoML is not supported in the region yet.",
371377
)
372-
def test_candidate_estimator_get_steps(sagemaker_session):
373-
auto_ml_utils.create_auto_ml_job_if_not_exist(sagemaker_session)
378+
def test_candidate_estimator_get_steps(sagemaker_session, reusable_job_name):
379+
auto_ml_utils.create_auto_ml_job_if_not_exist(sagemaker_session, reusable_job_name)
374380

375381
auto_ml = AutoML(
376382
role=ROLE, target_attribute_name=TARGET_ATTRIBUTE_NAME, sagemaker_session=sagemaker_session
377383
)
378-
candidates = auto_ml.list_candidates(job_name=AUTO_ML_JOB_NAME)
384+
candidates = auto_ml.list_candidates(job_name=reusable_job_name)
379385
candidate = candidates[1]
380386

381387
candidate_estimator = CandidateEstimator(candidate, sagemaker_session)

tox.ini

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ markers =
5656
canary_quick
5757
cron
5858
local_mode
59+
slow_test
60+
release
5961
timeout: mark a test as a timeout.
6062

6163
[testenv]

0 commit comments

Comments
 (0)