diff --git a/run_tests.bat b/run_tests.bat new file mode 100644 index 000000000..3a63f0349 --- /dev/null +++ b/run_tests.bat @@ -0,0 +1,15 @@ +@echo off +set ERROR_REPORTING=FALSE +set COMMANDLINE_ARGS= --api +echo Launching SDWebUI... +start "SDWebUITest" webui.bat + +if not defined PYTHON (set PYTHON=python) +if not defined VENV_DIR (set VENV_DIR=venv) +set PYTHON="%~dp0%VENV_DIR%\Scripts\Python.exe" +%PYTHON% test/server_poll.py +for /f "tokens=2 delims=," %%a in ('tasklist /v /fo csv ^| findstr /i "SDWebUITest"') do set "$PID=%%a" + +taskkill /PID %$PID% >nul 2>&1 + +pause diff --git a/test/__init__.py b/test/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/test/server_poll.py b/test/server_poll.py new file mode 100644 index 000000000..8c0436f87 --- /dev/null +++ b/test/server_poll.py @@ -0,0 +1,17 @@ +import unittest +import requests +import time + +timeout_threshold = 240 +start_time = time.time() +while time.time()-start_time < timeout_threshold: + try: + requests.head("http://localhost:7860/") + break + except requests.exceptions.ConnectionError: + pass +if time.time()-start_time < timeout_threshold: + suite = unittest.TestLoader().discover('', pattern='*_test.py') + result = unittest.TextTestRunner(verbosity=2).run(suite) +else: + print("Launch unsuccessful") diff --git a/test/txt2img_test.py b/test/txt2img_test.py new file mode 100644 index 000000000..9484fd991 --- /dev/null +++ b/test/txt2img_test.py @@ -0,0 +1,80 @@ +import unittest +import requests +import time + +url_txt2img = "http://localhost:7860/sdapi/v1/txt2img" +simple_txt2img = { + "enable_hr": False, + "denoising_strength": 0, + "firstphase_width": 0, + "firstphase_height": 0, + "prompt": "example prompt", + "styles": [ + "" + ], + "seed": -1, + "subseed": -1, + "subseed_strength": 0, + "seed_resize_from_h": -1, + "seed_resize_from_w": -1, + "batch_size": 1, + "n_iter": 1, + "steps": 5, + "cfg_scale": 7, + "width": 64, + "height": 64, + "restore_faces": False, + "tiling": False, + "negative_prompt": "", + "eta": 0, + "s_churn": 0, + "s_tmax": 0, + "s_tmin": 0, + "s_noise": 1, + "sampler_index": "Euler a" +} + +class TestTxt2ImgWorking(unittest.TestCase): + def test_txt2img_simple_performed(self): + self.assertEqual(requests.post(url_txt2img, json=simple_txt2img).status_code, 200) + + def test_txt2img_with_negative_prompt_performed(self): + params = simple_txt2img.copy() + params["negative_prompt"] = "example negative prompt" + self.assertEqual(requests.post(url_txt2img, json=params).status_code, 200) + + def test_txt2img_not_square_image_performed(self): + params = simple_txt2img.copy() + params["height"] = 128 + self.assertEqual(requests.post(url_txt2img, json=params).status_code, 200) + + def test_txt2img_with_hrfix_performed(self): + params = simple_txt2img.copy() + params["enable_hr"] = True + self.assertEqual(requests.post(url_txt2img, json=params).status_code, 200) + + def test_txt2img_with_restore_faces_performed(self): + params = simple_txt2img.copy() + params["restore_faces"] = True + self.assertEqual(requests.post(url_txt2img, json=params).status_code, 200) + + def test_txt2img_with_tiling_faces_performed(self): + params = simple_txt2img.copy() + params["tiling"] = True + self.assertEqual(requests.post(url_txt2img, json=params).status_code, 200) + + def test_txt2img_with_vanilla_sampler_performed(self): + params = simple_txt2img.copy() + params["sampler_index"] = "PLMS" + self.assertEqual(requests.post(url_txt2img, json=params).status_code, 200) + + def test_txt2img_multiple_batches_performed(self): + params = simple_txt2img.copy() + params["n_iter"] = 2 + self.assertEqual(requests.post(url_txt2img, json=params).status_code, 200) + +class TestTxt2ImgCorrectness(unittest.TestCase): + pass + +if __name__ == "__main__": + unittest.main()