programing

django 테스트에서는 mariadb와 keepdb를 어떻게 사용합니까?

nicegoodjob 2023. 2. 5. 09:48
반응형

django 테스트에서는 mariadb와 keepdb를 어떻게 사용합니까?

django 앱에서 사용하는 관리되지 않는 테이블이 많은 데이터베이스를 가지고 있습니다.테스트에서는 --keepdb 옵션을 사용하여 매번 이러한 테이블을 다시 채울 필요가 없습니다.데이터베이스로 MariaDB를 사용하고 있습니다.keepdb 옵션을 사용하지 않으면 모든 것이 정상적으로 동작합니다.테스트 데이터베이스는 정상적으로 작성 및 파기됩니다.

그러나 데이터베이스를 유지하면서 테스트를 실행하려고 하면 다음과 같이 됩니다.

$ python 관리.py test --keepdb

다음의 에러가 표시됩니다.

별칭 '기본값'에 대한 기존 테스트 데이터베이스 사용 중...
테스트 데이터베이스를 만드는 동안 오류가 발생했습니다. (1064: "SQL 구문에 오류가 발생했습니다. "MariaDB 서버 버전에 해당하는 설명서에서 'CREATE DATABASE IF NOT EXISTES' 근처에서 사용할 올바른 구문을 확인하십시오.test_livedb;\n 2" 행에 sql_note'를 설정합니다.)

이것은 MariaDB와 MySQL의 구문이 다른 문제라고 생각합니다.MariaDB와 연동되는 keepdb 옵션을 얻을 수 있는 방법이 있습니까?

정말 감사합니다!

그 가치를 위해:이 버그는 Django 2.0.0에서 도입되어 Django 2.1.3(https://code.djangoproject.com/ticket/29827)에서 수정되었습니다.

두 가지 사항: Factory Boy(테스트 데이터 작성용)를 확인하고 Pytest도 확인해보길 제안합니다.관리되지 않는 테이블에서는 (적어도 내 경험상) django가 테스트 환경에서 테이블을 생성하지 않고 문제가 발생할 수 있습니다.이는 테이블이 존재하지 않기 때문입니다.migration(관리되지 않기 때문에) 테이블을 작성하기 위한 파일입니다.Django는migration파일을 만듭니다.

Pytest를 사용하면--nomigrations테스트 데이터베이스를 모델에서 직접 빌드하는 플래그(관리되지 않는 모델에 필요한 테이블을 생성할 수 없음)

Pytest와 Factory Boy를 조합하면 테스트 데이터가 예상대로 작동하고 반복 가능하며 문제 없이 테스트 가능하도록 설정할 수 있습니다.

실제로 다음과 같이 접근합니다(약간 해킹은 가능하지만 복잡한 설정에서는 작동합니다).

내 모델:

class Meta(object):
    db_table = 'my_custom_table'
    managed = getattr(settings, 'UNDER_TEST', False)

작성하다UNDER_TEST에 가변적인.settings.py다음과 같습니다.

# Create global variable that will tell if our application is under test
UNDER_TEST = (len(sys.argv) > 1 and sys.argv[1] == 'test')

이 방법 - 응용 프로그램이UNDER_TEST모델이 관리되는 것으로 표시됩니다(Pytest는 적절한 DB 테이블을 생성합니다). Factory 가 모든 를 그 넣는 합니다('Factory Boy' 중 ).setUp테스트 또는 기타)와 대조할 수 있도록 합니다.

그게 제 제안입니다. 다른 사람들은 좀 더 명확하거나 깨끗한 것을 가지고 있을 수 있습니다.

언급URL : https://stackoverflow.com/questions/52746715/for-django-testing-how-do-i-use-keepdb-with-mariadb

반응형