ฉันจะกำหนดค่า PyCharm ให้เรียกใช้การทดสอบ py.test ได้อย่างไร


163

ฉันต้องการที่จะเริ่มต้นการเขียนการทดสอบหน่วยรหัสหลามฉันและpy.testเสียงกรอบเช่นเดิมพันที่ดีกว่าของงูหลามรวมUnitTest ดังนั้นผมจึงเพิ่ม "การทดสอบ directory" กับโครงการของฉันและเพิ่มtest_sample.pyกับมัน ตอนนี้ฉันต้องการกำหนดค่า PyCharm เพื่อเรียกใช้การทดสอบทั้งหมดในไดเรกทอรี "การทดสอบ" ของฉัน

PyCharm กล่าวหาว่าสนับสนุน py.testในการทดสอบนักวิ่ง คุณควรจะสามารถที่จะสร้างการทำงาน / การแก้ปัญหาการกำหนดค่าที่จะเรียกใช้การทดสอบของคุณและ PyCharm ที่ถูกกล่าวหาว่ามีการ"สร้างการตั้งค่า" กล่องโต้ตอบเฉพาะสำหรับ py.test แต่นั่นเป็นขอบเขตที่สมบูรณ์ของเอกสารของพวกเขาในเรื่องและฉันไม่สามารถหากล่องโต้ตอบที่ถูกกล่าวหาได้ทุก

หากฉันคลิกขวาที่ไดเรกทอรีในหน้าต่างเครื่องมือโครงการฉันควรเห็นรายการเมนู "สร้าง <name>" แต่รายการเมนูเดียวที่เริ่มต้นด้วย "สร้าง" คือ "สร้างการกำหนดค่าการเรียกใช้" ตกลงอาจเป็นเอกสารที่ผิดและ "สร้างการกำหนดค่าการเรียกใช้" อาจทำให้คุณมั่นใจได้ แต่น่าเสียดายที่มีเพียงสองรายการในเมนูย่อยของมันคือ "Unittests ใน C: \ mypath ... " และ "Doctests ใน C: \ mypath ... " ซึ่งไม่เกี่ยวข้อง - ฉันไม่ได้ใช้ทั้ง unittest และ doctest ไม่มีรายการเมนูสำหรับ py.test

หากฉันเปิด test_sample.py และคลิกขวาในหน้าต่างตัวแก้ไขฉันจะได้รับรายการเมนู "สร้าง <name>" ที่มีสัญญา: มี "สร้าง 'Unittests ใน test_sa ...'... " ตามด้วย "Run 'Unittests ใน test_sa ... ' "และ" Debug "Unittests ใน test_sa ... '" ดังนั้นอีกครั้งมันทั้งหมดเฉพาะกับกรอบ unittest; ไม่มีอะไรสำหรับ py.test

หากฉันลองรายการเมนูที่พูดว่า "unittest" ฉันจะได้รับกล่องโต้ตอบพร้อมตัวเลือกสำหรับ "ชื่อ", "ประเภท", "กลุ่มการทดสอบ" กล่องที่มี "โฟลเดอร์" และ "รูปแบบ" และ "สคริปต์" และ "คลาส" "และ" ฟังก์ชั่น "ฯลฯ ฟังดูเหมือนว่าเป็นเอกสารในกล่องโต้ตอบเพื่อเพิ่มการกำหนดค่าสำหรับการทดสอบหน่วย Pythonและไม่เหมือนกับตัวเลือก" ชื่อ "และ" ทดสอบเพื่อเรียกใช้ "และ" คำหลัก "ที่ควรจะปรากฏขึ้น ในการกำหนดค่าสำหรับกล่องโต้ตอบpy.test ไม่มีอะไรในกล่องโต้ตอบเพื่อสลับกรอบการทดสอบที่ฉันเพิ่ม

ฉันใช้ PyCharm 1.5.2 บน Windows กับ Python 3.1.3 และ pytest 2.0.3 ฉันสามารถรันpy.testการทดสอบของฉันได้จากบรรทัดคำสั่งดังนั้นจึงไม่ใช่เรื่องง่ายเหมือน pytest ที่ไม่ถูกติดตั้งอย่างถูกต้อง

ฉันจะกำหนดค่า PyCharm ให้เรียกใช้การทดสอบ py.test ได้อย่างไร

คำตอบ:


228

กรุณาไปที่ไฟล์ | การตั้งค่า | เครื่องมือ | Python Integrated Tools และเปลี่ยนเครื่องมือทดสอบเริ่มต้นเป็น py.test จากนั้นคุณจะได้รับตัวเลือก py.test เพื่อสร้างการทดสอบแทนการทดสอบที่ไม่ใช้


ฮะ! ไม่รู้ว่าฉันจะทำยังไง มันใช้ได้เพียงครึ่งเดียว: ถ้าฉันคลิกขวาที่โฟลเดอร์ในหน้าต่างเครื่องมือโครงการมันให้ตัวเลือกในการสร้างคำสอนไม่ใช่ py.tests (ฉันจะเขียนรายงานข้อผิดพลาด) แต่จะใช้งานได้ถ้าฉันคลิกขวาในตัวแก้ไขแล้วเปลี่ยน "สคริปต์:" เป็นชื่อไดเรกทอรี
Joe White

3
อย่าลืมทำเครื่องหมายไดเรกทอรีแหล่งข้อมูลของคุณเป็น "แหล่งราก": jetbrains.com/pycharm/webhelp/content-root.html
Inti

1
มีวิธีการตั้งค่านี้สำหรับโครงการทั้งหมด (หรือโครงการทั้งหมด) มากกว่าต่อโมดูลหรือไม่
OrangeDog

1
ดูเหมือนว่าFile | Settings | Tools | Python Integrated Toolsจะใช้ได้เฉพาะในการตั้งค่าโครงการมากกว่าการตั้งค่าเริ่มต้นใน PyCharm 5
killthrush

2
เมื่อกำหนดค่าแล้วคุณจะทำการทดสอบได้อย่างไร?
Chris Anderson

51

PyCharm 2017.3

  1. Preference -> Tools -> Python integrated Tools- เลือกเป็นpy.testDefault test runner
  2. ถ้าคุณใช้ Django Preference -> Languages&Frameworks -> Django- ตั้งค่าติ๊กDo not use Django Test runner
  3. ล้างการกำหนดค่าการทดสอบที่มีอยู่ก่อนหน้านี้ทั้งหมดRun/Debug configurationไม่เช่นนั้นการทดสอบจะทำงานด้วยการกำหนดค่าแบบเดิม
  4. หากต้องการตั้งค่าอาร์กิวเมนต์เพิ่มเติมเริ่มต้นให้อัพเดตการกำหนดค่าเริ่มต้น py.test Run/Debug Configuration -> Defaults -> Python tests -> py.test -> Additional Arguments

2
ใน PyCharm 2017/03/02 แม้หลังจากที่ผมตั้ง py.test เป็นค่าเริ่มต้นเมื่อฉันคลิกขวาที่โครงการในแผงโครงการและเลือกNew => Python Fileที่Kind:เสนอเลื่อนลงเท่านั้น: ไฟล์หลามทดสอบหน่วย, Python ต้นขั้วไม่ Pytest ฉันดูสถานที่ทั้งหมดที่กล่าวถึงในหัวข้อด้านบน ฉันพลาดอะไรไป
Tom Baker

ไฟล์หลามทดสอบหน่วย, Python ต้นขั้ว - พวกเขาเป็นไฟล์หลามกับข้อมูลที่กำหนดไว้ล่วงหน้าบางอย่างคุณสามารถเพิ่มของคุณเองอ่านหัวข้อนี้jetbrains.com/help/pycharm/... แต่สิ่งนี้ไม่ส่งผลต่อการทดสอบ py.test คุณสามารถสร้างไฟล์ python และมันจะใช้ได้ ในหัวข้อนี้เรากำลังพูดถึงวิธีการกำหนดค่าคุณลักษณะนี้jetbrains.com/help/pycharm/running-tests.html เพื่อเรียกใช้ py.test
Sergey Kubrak

ใน PyCharm ล่าสุด "ค่าเริ่มต้น" เรียกว่า "เทมเพลต"
AgDude

19

ฉันคิดว่าคุณต้องใช้รายการ Run / Debug Configuration บนแถบเครื่องมือ คลิกที่มันและ 'แก้ไขการกำหนดค่า' (หรือใช้รายการเมนูเรียกใช้ -> แก้ไขการกำหนดค่า) ในส่วน 'ค่าเริ่มต้น' ในบานหน้าต่างด้านซ้ายมีรายการ 'py.test' ซึ่งฉันคิดว่าเป็นสิ่งที่คุณต้องการ

ฉันยังพบว่าคู่มือไม่ตรงกับ UI สำหรับสิ่งนี้ หวังว่าฉันเข้าใจปัญหาได้อย่างถูกต้องและช่วยได้


4
หน้า "ค่าเริ่มต้น> py.test" ไม่ได้ให้วิธีการสร้างการกำหนดค่าเลย แต่ถ้าฉันไปที่กล่องโต้ตอบแก้ไขการกำหนดค่าให้คลิกปุ่ม "+" แถบเครื่องมือเลือก "py.test" และตั้ง "ไดเรกทอรีทำงาน" ไปยังไดเรกทอรีที่มีการทดสอบของฉันซึ่งสร้างการกำหนดค่าที่จะเรียกใช้การทดสอบของฉัน ดังนั้น +1 สำหรับนำฉันไปยังส่วนที่เป็นประโยชน์ของโปรแกรม ฉันจะให้คำตอบที่ยอมรับกับ @yole เนื่องจากฉันคิดว่าการเปลี่ยนค่าเริ่มต้นเป็น py.test เป็นวิธีแก้ปัญหาที่ดีกว่า - ฉันควรให้ฉันเรียกใช้ไฟล์ปัจจุบันและสิ่งต่าง ๆ เช่นนั้น
Joe White

@JoeWhite โปรดเพิ่มเป็นคำตอบเนื่องจากเป็นประโยชน์
Hariom Singh

ในการแก้ไขการตั้งค่าคอนฟิกหน้าต่างหลังจากที่เลือกการกำหนดค่า pytest ของฉันฉันยังมีการเลือกTargetที่จะเป็นScript athและชี้ไปยังรากของการทดสอบของฉันโฟลเดอร์
RAbraham

นี่เป็นวิธีที่ดีกว่ามากในการเปิดฟีเจอร์อื่น ๆ เช่นเดียวกับการส่งผ่าน command-line-arguments ฯลฯ
chirag nayak

13

นี่คือวิธีที่ฉันทำให้มันทำงานกับ pytest 3.7.2(ติดตั้งผ่าน pip) และ pycharms 2017.3:

  1. ไปที่ edit configurations

  1. เพิ่มการกำหนดค่าการทำงานใหม่และเลือก py.test

  1. ในรายละเอียดการวิ่งการตั้งค่าที่คุณจะต้องไปยังชุดtarget= และฟิลด์ชื่อด้านล่างเพื่อpython testsดูเหมือนว่านี่คือชื่อของโฟลเดอร์ทดสอบของคุณ ไม่ยากเกินไปอย่างแน่นอน ฉันยังแนะนำ-sอาร์กิวเมนต์เพื่อให้คุณตรวจแก้จุดบกพร่องการทดสอบคอนโซลจะทำงานได้อย่างถูกต้อง โดยไม่ต้องโต้แย้ง pytest จับเอาท์พุทและทำให้การดีบักรถบั๊ก

  1. โฟลเดอร์ทดสอบของฉันดูเหมือนว่า นี่อยู่ด้านล่างรากของโครงการของฉัน ( my_project/tests)

  1. foobar_test.pyไฟล์ของฉัน: (ไม่จำเป็นต้องนำเข้า):
def test_foobar ():
    พิมพ์ ("สวัสดี pytest")
    ยืนยันจริง
  1. รันด้วยคำสั่ง run ปกติ


มีความเป็นไปได้ไหมที่จะรันการทดสอบจากไฟล์ปัจจุบันเท่านั้น? ฉันพบเพียงว่าฉันต้องเปลี่ยนชื่อไฟล์ในการตั้งค่าการตั้งค่าทุกครั้งที่ฉันเปิดไฟล์อื่น ๆ
algot

@algot ฉันไม่ทราบว่าบนหัวของฉัน ลองดูที่: jetbrains.com/help/pycharm/performing-tests.htmlและสิ่งนี้: jetbrains.com/pycharm/guide/tips/run-single-test
Benjamin Crouzier

5

เอกสารรับรองไม่ถูกต้องเพื่อให้แน่ใจ เมื่อคุณได้รับการเพิ่มการกำหนดค่าใหม่จากค่าเริ่มต้นคุณจะอยู่ในขอบเขตของการทำงาน "/ Applications / PyCharm CE.app/Contents/helpers/pycharm/pytestrunner.py" สคริปต์ มันไม่ได้ทำเป็นเอกสารและมีแนวคิดของอาร์กิวเมนต์บรรทัดคำสั่งของตัวเอง

คุณสามารถ:

  1. ลองเล่นย้อนกลับสคริปต์และดูว่าคุณจะได้รับ py.test เพื่อรับข้อโต้แย้ง มันอาจทำงานได้; มันไม่ได้ในครึ่งชั่วโมงแรกสำหรับฉัน
  2. เพียงแค่เรียกใช้ "py.test * .py" จากคอนโซล

คุณจะพบว่ามันยากที่จะหาการสนทนาใด ๆ เนื่องจาก JetBrains ทำงานได้ดีในการวางระเบิดอัลกอริทึมของ Google ด้วยหน้าเว็บของตัวเอง


3

ค้นหาหัวข้อนี้เมื่อฉันกดคำถามเดียวกันและพบวิธีแก้ปัญหา pycharm รุ่น: 2017.1.2 ไปที่ "Preferences" -> "Tools" -> "Python Integrated Tools" และตั้งค่าตัวเริ่มต้นทดสอบจากพาเนลด้านขวาเป็น py.test แก้ปัญหาของฉัน


มันจะทำงานได้ แต่จากนั้นคุณต้องคลิกขวาที่ชื่อไฟล์สคริปต์ทดสอบในหน้าต่างโครงการ หากคุณคลิกขวาที่พื้นที่ตัวแก้ไขไฟล์ของสคริปต์ทดสอบเดียวกัน แต่จะยังคงแสดงเครื่องมือเริ่มต้นเก่า (Unittests) อย่างน่าเสียดาย สิ่งนี้น่ารำคาญเพราะฉันไม่สามารถระบุฟังก์ชั่นเฉพาะที่ฉันต้องการทดสอบได้
Hongyu Zhang

3

ใน pycharm 2019.2 คุณสามารถทำสิ่งนี้เพื่อเรียกใช้การทดสอบทั้งหมด:

  1. เรียกใช้> แก้ไขการกำหนดค่า> เพิ่ม pytest
  2. ตั้งค่าตัวเลือกตามที่แสดงในภาพหน้าจอต่อไปนี้ ภาพหน้าจอของการกำหนดค่า
  3. คลิกที่ Debug (หรือเรียกใช้ pytest โดยใช้เช่นปุ่มลัด Shift + Alt + F9)

สำหรับการรวม pytest ที่สูงขึ้นใน pycharm โปรดดูที่https://www.jetbrains.com/help/pycharm/pytest.html


2

ฉันใช้ 2018.2

ฉันจะเรียกใช้ -> แก้ไขการกำหนดค่า ... จากนั้นคลิก + ที่ด้านซ้ายบนของกล่องโต้ตอบโมดอล เลือก "python tests" -> py.test จากนั้นฉันตั้งชื่อเช่น "All test with py.test"

ฉันเลือก Target: ชื่อโมดูลและใส่โมดูลที่การทดสอบของฉัน (นั่นคือ 'การทดสอบ' สำหรับฉัน) หรือโมดูลที่รหัสทั้งหมดของฉันคือถ้าการทดสอบของฉันผสมกับรหัสของฉัน นี่ทำให้ฉันสะดุด

ฉันตั้งล่าม Python

ฉันตั้งไดเรกทอรีทำงานเป็นไดเรกทอรีโครงการ


0

ด้วยการติดตั้ง Conda python แบบพิเศษซึ่งรวมถึงการติดตั้ง pip สำหรับ py.test plus การใช้ Specs addin (ตัวเลือก --spec) (สำหรับ Rspec เช่นภาษาสรุปการทดสอบที่ดี) ฉันต้องทำ;

1. แก้ไข py.test เริ่มต้นเพื่อรวม option = --spec ซึ่งหมายถึงใช้ปลั๊กอิน: https://github.com/pchomik/pytest-spec

2. สร้างการกำหนดค่าการทดสอบใหม่โดยใช้ py.test เปลี่ยนล่ามภาษาไพ ธ อนให้ใช้ ~ / anaconda / envs / ตัวเลือกล่ามที่คุณต้องการเช่น py27 สำหรับคำนามของฉัน

3. ลบการกำหนดค่าการทดสอบ 'unittests'

4. ตอนนี้การกำหนดค่าการทดสอบเริ่มต้นคือ py.test ด้วยเอาต์พุตสไตล์ Rspec ที่น่ารักของฉัน ฉันรักมัน! ขอบคุณทุกคน!

ps Jetbrains 'doc ในการรัน / debug configs อยู่ที่นี่: https://www.jetbrains.com/help/pycharm/2016.1/run-debug-configuration-py-test.html?search=py.test


0

ด้วย 2018.3 ดูเหมือนว่าตรวจพบโดยอัตโนมัติว่าฉันใช้ pytest ซึ่งดี แต่ก็ยังไม่อนุญาตให้ทำงานจากระดับสูงสุดของโครงการ ฉันต้องเรียกใช้pytestสำหรับแต่ละtestsไดเรกทอรีทีละรายการ

อย่างไรก็ตามฉันพบว่าฉันสามารถเลือกหนึ่งในการกำหนดค่าและแก้ไขด้วยตนเองเพื่อให้ทำงานที่รูทของโครงการและสิ่งนี้ใช้ได้ ฉันต้องเลือกด้วยตนเองในรายการแบบหล่นลงการกำหนดค่า - ไม่สามารถคลิกขวาที่โฟลเดอร์รูทในบานหน้าต่างโครงการ แต่อย่างน้อยฉันก็สามารถทำการทดสอบทั้งหมดได้ในครั้งเดียว


0

เปิดใช้งาน Pytest สำหรับโครงการของคุณ

  1. เปิดการตั้งค่า / การตั้งค่า | เครื่องมือ | กล่องโต้ตอบการตั้งค่าเครื่องมือรวมของ Pythonดังอธิบายในการเลือกกรอบการทดสอบของคุณ
  2. ในการเริ่มต้นการทดสอบวิ่งฟิลด์เลือกpytest
  3. คลิกตกลงเพื่อบันทึกการตั้งค่า

ป้อนคำอธิบายรูปภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.