จะทดสอบแอปพลิเคชัน django ที่อยู่ในโฟลเดอร์ย่อยได้อย่างไร

ฉันมีปัญหากับการทดสอบแอป django ที่จัดกลุ่มในโฟลเดอร์ย่อย

ให้ฉันอธิบายสถานการณ์

โครงสร้างโครงการ Standart django มีลักษณะดังนี้:

django_project/
--appname1
--appname2
--appname3
--lib
--tests
--docs
settings.py 
etc...

เมื่อโครงสร้างโปรเจ็กต์เป็นมาตรฐาน คุณสามารถรันการทดสอบสำหรับ appname1 เพียงพิมพ์คำสั่งใน project dir:

python2 manage.py test appname1`

เราตัดสินใจใส่แอปทั้งหมดไว้ในโฟลเดอร์ย่อย ดังนั้นโครงสร้างโปรเจ็กต์ของเราจึงมีลักษณะดังนี้:

django_project/
--apps/
----appname1
----appname2
----appname3
--lib
--tests
--docs
settings.py 
etc...

ทุกอย่างทำงานได้ดี แต่เราไม่สามารถทำการทดสอบแอปได้ ฉันได้ลองทำตามคำสั่งแล้วไม่สำเร็จ:

python2 manage.py test appname1
python2 manage.py test apps/appname1
python2 manage.py test apps.appname1

มีวิธีใดบ้างในการรันการทดสอบโดยใช้ Manage.py สำหรับแอพที่วางอยู่ในโฟลเดอร์ย่อย หรือเราควรเขียนคำสั่งของตัวเองเพื่อรันมัน?

อัปเดต:

เรามีข้อผิดพลาดดังต่อไปนี้:

 Traceback (most recent call last):
  File "manage.py", line 18, in <module>
    management.execute_manager(settings)
  File "/opt/python266/lib/python2.6/site-packages/django/core/management/__init__.py", line 438, in execute_manager
    utility.execute()
  File "/opt/python266/lib/python2.6/site-packages/django/core/management/__init__.py", line 379, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/opt/python266/lib/python2.6/site-packages/django/core/management/base.py", line 191, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/opt/python266/lib/python2.6/site-packages/django/core/management/base.py", line 220, in execute
    output = self.handle(*args, **options)
  File "/opt/python266/lib/python2.6/site-packages/django/core/management/commands/test.py", line 37, in handle
    failures = test_runner.run_tests(test_labels)
  File "/opt/python266/lib/python2.6/site-packages/django/test/simple.py", line 312, in run_tests
    suite = self.build_suite(test_labels, extra_tests)
  File "/opt/python266/lib/python2.6/site-packages/django/test/simple.py", line 244, in build_suite
    app = get_app(label)
  File "/opt/python266/lib/python2.6/site-packages/django/db/models/loading.py", line 140, in get_app
    raise ImproperlyConfigured("App with label %s could not be found" % app_label)
django.core.exceptions.ImproperlyConfigured: App with label appname1 could not be found

เราได้ติดตั้งการตั้งค่าแอพเช่น:

INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'project_name.apps.appname1',
'project_name.apps.appname2',
'project_name.apps.appname3',
 )

person Nikolay Fominyh    schedule 26.06.2011    source แหล่งที่มา


คำตอบ (6)


คุณต้องมีทั้งสองไฟล์เหล่านี้ในโฟลเดอร์แอปของคุณ:

__init__.py
models.py

พวกเขาสามารถว่างเปล่าได้

person David Dehghan    schedule 06.08.2011

คุณได้รับข้อผิดพลาดอะไร? แล้วคุณมีอะไรอยู่ใต้ INSTALLED_APPS ใน settings.py บ้าง?

หากคุณมีบางอย่างเช่น

INSTALLED_APPS = (
    'django.contrib.auth',
    ...
    'apps.appname1',
    'apps.appname2',
)

และ __init__.py ในไดเรกทอรี apps ก็ควรจะใช้งานได้

person domino    schedule 26.06.2011
comment
ฉันได้เพิ่มรายละเอียดเพื่อคำถาม - person Nikolay Fominyh; 27.06.2011

โปรดทราบว่าไฟล์ settings.py มีสิ่งทูเพิล ดังนั้นอักขระที่สิ้นสุดควรเป็น ')' ไม่ใช่ '}'

person peralmq    schedule 12.06.2012

ตรวจสอบให้แน่ใจว่า apps มี __init__.py คุณควรทำการทดสอบตามชื่อแอปได้:

python2 manage.py test appname1

ใช้งานได้ภายใต้ Django 1.3 ฉันยังไม่ได้ทดสอบเวอร์ชันอื่นใด

person zeekay    schedule 26.06.2011

นี่เป็นคำตอบที่ช้าไปหน่อย แต่สำหรับการอ้างอิงในอนาคตของผู้แอบดูคนอื่น ๆ ที่เจอสิ่งนี้ ฉันประสบปัญหาเดียวกัน และพบว่าฉันต้องเพิ่มไฟล์ models.py ว่างลงในแอป (ไม่จำเป็นต้องมีตารางฐานข้อมูลใดๆ แต่ไม่มี models.py หมายความว่าผู้ทดสอบไม่ได้หยิบมันขึ้นมา)

person Tom Christie    schedule 11.07.2011

ใน django 2.2.4 การใช้โฟลเดอร์สำหรับไฟล์ทดสอบเช่น \test แทนที่จะเป็นไฟล์เริ่มต้น test.py นี่คือสิ่งที่ใช้ได้ผลสำหรับฉัน

python manage.py test .\apps-folder\app1

หากคุณใช้โฟลเดอร์สำหรับไฟล์ทดสอบด้วย ตรวจสอบให้แน่ใจว่าได้ใส่ __init__.py

person Angeluz-07    schedule 15.09.2019