conftest สารละลาย
โซลูชันที่มีการบุกรุกน้อยที่สุดกำลังเพิ่มไฟล์ว่างที่ชื่อconftest.pyในrepo/ไดเรกทอรี:
$ touch repo/conftest.py
แค่นั้นแหละ. ไม่จำเป็นต้องเขียนรหัสที่กำหนดเองสำหรับการจัดการsys.pathหรืออย่าลืมลากPYTHONPATHหรือวาง__init__.pyลงใน dirs ที่มันไม่ได้อยู่
ไดเรกทอรีโครงการหลังจากนั้น:
repo
├── conftest.py
├── app.py
├── settings.py
├── models.py
└── tests
└── test_app.py
คำอธิบาย
pytestค้นหาconftestโมดูลบนคอลเลกชันทดสอบเพื่อรวบรวม hooks และส่วนควบแบบกำหนดเองและเพื่อนำเข้าวัตถุที่กำหนดเองจากพวกเขาpytestเพิ่มไดเรกทอรีหลักของconftest.pyไปยังsys.path (ในกรณีนี้repoไดเรกทอรี)
โครงสร้างโครงการอื่น ๆ
ถ้าคุณมีโครงสร้างโครงการอื่น ๆ วางconftest.pyใน dir รากแพคเกจ (หนึ่งที่มีแพคเกจ แต่ไม่ได้เป็นแพคเกจของตัวเองจึงไม่ได้ประกอบด้วย__init__.py) ตัวอย่างเช่น:
repo
├── conftest.py
├── spam
│ ├── __init__.py
│ ├── bacon.py
│ └── egg.py
├── eggs
│ ├── __init__.py
│ └── sausage.py
└── tests
├── test_bacon.py
└── test_egg.py
src แบบ
แม้ว่าวิธีนี้สามารถใช้กับsrcเค้าโครง (วางconftest.pyในsrcdir):
repo
├── src
│ ├── conftest.py
│ ├── spam
│ │ ├── __init__.py
│ │ ├── bacon.py
│ │ └── egg.py
│ └── eggs
│ ├── __init__.py
│ └── sausage.py
└── tests
├── test_bacon.py
└── test_egg.py
ระวังว่าการเพิ่มsrcเพื่อPYTHONPATHลดความหมายและประโยชน์ของsrcเค้าโครง! คุณจะจบลงด้วยการทดสอบรหัสจากพื้นที่เก็บข้อมูลและไม่ใช่แพ็คเกจที่ติดตั้ง หากคุณต้องการทำสิ่งนั้นคุณอาจไม่ต้องการรหัสผ่านsrcเลย
จะไปจากที่นี่
แน่นอนconftestโมดูลไม่ใช่แค่ไฟล์บางไฟล์ที่จะช่วยให้ค้นพบซอร์สโค้ด นี่คือสิ่งที่การปรับปรุงpytestโครงงานเฉพาะและการปรับแต่งชุดทดสอบของคุณทั้งหมดเกิดขึ้น pytestมีจำนวนมากของข้อมูลเกี่ยวกับconftestโมดูลกระจายอยู่ทั่วทั้งเอกสารของพวกเขา ; เริ่มต้นด้วยconftest.py: ปลั๊กอินสำหรับแต่ละไดเรกทอรีในเครื่อง
นอกจากนี้ SO ยังมีคำถามที่ยอดเยี่ยมเกี่ยวกับconftestโมดูล: ใน py.test การใช้ไฟล์ conftest.py คืออะไร