คำถามติดแท็ก pytest

การทดสอบแบบไม่ใช้หม้อต้มที่มีประสิทธิภาพอย่างง่ายด้วย Python โปรดเพิ่มแท็ก "python" สำหรับคำถามที่ติดแท็ก "pytest" ด้วย

9
ฉันจะเห็นผลงานพิมพ์ปกติที่สร้างขึ้นในระหว่างการใช้งาน pytest ได้อย่างไร?
บางครั้งฉันต้องการแทรกคำสั่งการพิมพ์บางอย่างในรหัสของฉันและดูสิ่งที่พิมพ์ออกมาเมื่อฉันออกกำลังกาย วิธีปกติของฉันในการ "ออกกำลังกาย" คือการทดสอบที่มีอยู่กับ pytest แต่เมื่อฉันเรียกใช้สิ่งเหล่านี้ฉันไม่สามารถเห็นเอาต์พุตมาตรฐานใด ๆ (อย่างน้อยก็จากใน PyCharm, IDE ของฉัน) มีวิธีง่ายๆในการดูเอาต์พุตมาตรฐานในระหว่างการทดสอบ pytest หรือไม่?
400 python  logging  output  pytest 

9
จะยืนยันได้อย่างไรว่ามีข้อยกเว้นเกิดขึ้นใน pytest?
รหัส: # coding=utf-8 import pytest def whatever(): return 9/0 def test_whatever(): try: whatever() except ZeroDivisionError as exc: pytest.fail(exc, pytrace=True) เอาท์พุท: ================================ test session starts ================================= platform linux2 -- Python 2.7.3 -- py-1.4.20 -- pytest-2.5.2 plugins: django, cov collected 1 items pytest_test.py F ====================================== FAILURES ====================================== ___________________________________ test_whatever ____________________________________ def test_whatever(): …

18
ปัญหา PATH กับ pytest 'ImportError: ไม่มีโมดูลชื่อ YadaYadaYada'
ฉันใช้ easy_install เพื่อติดตั้ง pytest บน mac และเริ่มเขียนการทดสอบสำหรับโครงการที่มีโครงสร้างไฟล์ที่ชอบ: repo/ repo/app.py repo/settings.py repo/models.py repo/tests/ repo/tests/test_app.py ทำงานpy.testในไดเรกทอรี repo ทุกอย่างทำงานตามที่คุณคาดหวัง แต่เมื่อฉันลองสิ่งเดียวกันบน linux หรือ windows (ทั้งคู่มี pytest 2.2.3 อยู่) มันจะเห่าเมื่อใดก็ตามที่มันกระทบการนำเข้าบางสิ่งจากพา ธ ของแอปพลิเคชันของฉัน พูดเช่นfrom app import some_def_in_app ฉันจำเป็นต้องแก้ไข PATH ของฉันเพื่อเรียกใช้ py.test บนระบบเหล่านี้หรือไม่? มีใครมีประสบการณ์นี้

3
ใน pytest การใช้ไฟล์ conftest.py คืออะไร?
pytestฉันเพิ่งค้นพบ มันดูดีมาก อย่างไรก็ตามฉันรู้สึกว่าเอกสารอาจจะดีกว่า ฉันพยายามที่จะเข้าใจว่าconftest.pyไฟล์อะไรที่ควรใช้ ในชุดทดสอบ (ปัจจุบันเล็ก) ของฉันฉันมีconftest.pyไฟล์หนึ่งไฟล์ที่รูทโปรเจ็กต์ ฉันใช้มันเพื่อกำหนดการแข่งขันที่ฉันฉีดเข้าไปในการทดสอบของฉัน ฉันมีสองคำถาม: นี่เป็นการใช้งานที่ถูกต้องconftest.pyหรือไม่? มันมีประโยชน์อื่น ๆ ? ฉันสามารถมีมากกว่าหนึ่งconftest.pyไฟล์ได้หรือไม่ เมื่อไหร่ที่ฉันจะทำเช่นนั้น? ตัวอย่างจะได้รับการชื่นชม โดยทั่วไปแล้วคุณจะกำหนดวัตถุประสงค์และแก้ไขการใช้conftest.pyไฟล์ในชุดทดสอบ py.test อย่างไร
217 python  testing  pytest 

8
มีวิธีระบุการทดสอบ pytest ที่จะเรียกใช้จากไฟล์หรือไม่?
มีวิธีเลือกpytestการทดสอบเพื่อเรียกใช้จากไฟล์หรือไม่? ตัวอย่างเช่นไฟล์foo.txtที่มีรายการการทดสอบที่จะดำเนินการ: tests_directory/foo.py::test_001 tests_directory/bar.py::test_some_other_test หรือมีวิธีในการเลือกการทดสอบหลายแบบโดยไม่มีรูปแบบทั่วไปในชื่อการทดสอบจากไดเรกทอรีต่าง ๆ ด้วย pytest หรือไม่? pytest -k <pattern> อนุญาตให้ใช้รูปแบบเดียว ทางเลือกหนึ่งคือการpytest.markต่อต้านการทดสอบแต่ละครั้ง แต่ความต้องการของฉันคือการใช้การทดสอบที่แตกต่างกันจากไฟล์ที่แตกต่างกัน มีวิธีการระบุหลายรูปแบบและชื่อไฟล์ทดสอบสำหรับแต่ละรูปแบบหรือไม่? หรือ มีวิธีระบุพา ธ ทดสอบที่แน่นอนในไฟล์และฟีดไฟล์นั้นเป็นอินพุตpytestหรือไม่ หรือ มีฟังก์ชั่น hook ที่สามารถใช้เพื่อจุดประสงค์นี้หรือไม่?
190 python  pytest 

6
วิธีการพิมพ์ไปยังคอนโซลใน pytest?
ฉันพยายามที่จะใช้ TDD (ทดสอบขับเคลื่อนการพัฒนา) pytestด้วย pytestจะไม่ไปยังคอนโซลเมื่อฉันใช้printprint ฉันใช้pytest my_tests.pyเพื่อเรียกใช้ documentationดูเหมือนจะบอกว่ามันควรจะทำงานโดยค่าเริ่มต้น: http://pytest.org/latest/capture.html แต่: import myapplication as tum class TestBlogger: @classmethod def setup_class(self): self.user = "alice" self.b = tum.Blogger(self.user) print "This should be printed, but it won't be!" def test_inherit(self): assert issubclass(tum.Blogger, tum.Site) links = self.b.get_links(posts) print len(links) # This won't print either. ไม่มีสิ่งใดถูกพิมพ์ไปยังคอนโซลเอาต์พุตมาตรฐานของฉัน …

11
ฉันจะกำหนดค่า PyCharm ให้เรียกใช้การทดสอบ py.test ได้อย่างไร
ฉันต้องการที่จะเริ่มต้นการเขียนการทดสอบหน่วยรหัสหลามฉันและpy.testเสียงกรอบเช่นเดิมพันที่ดีกว่าของงูหลามรวมUnitTest ดังนั้นผมจึงเพิ่ม "การทดสอบ directory" กับโครงการของฉันและเพิ่มtest_sample.pyกับมัน ตอนนี้ฉันต้องการกำหนดค่า PyCharm เพื่อเรียกใช้การทดสอบทั้งหมดในไดเรกทอรี "การทดสอบ" ของฉัน PyCharm กล่าวหาว่าสนับสนุน py.testในการทดสอบนักวิ่ง คุณควรจะสามารถที่จะสร้างการทำงาน / การแก้ปัญหาการกำหนดค่าที่จะเรียกใช้การทดสอบของคุณและ PyCharm ที่ถูกกล่าวหาว่ามีการ"สร้างการตั้งค่า" กล่องโต้ตอบเฉพาะสำหรับ py.test แต่นั่นเป็นขอบเขตที่สมบูรณ์ของเอกสารของพวกเขาในเรื่องและฉันไม่สามารถหากล่องโต้ตอบที่ถูกกล่าวหาได้ทุก หากฉันคลิกขวาที่ไดเรกทอรีในหน้าต่างเครื่องมือโครงการฉันควรเห็นรายการเมนู "สร้าง <name>" แต่รายการเมนูเดียวที่เริ่มต้นด้วย "สร้าง" คือ "สร้างการกำหนดค่าการเรียกใช้" ตกลงอาจเป็นเอกสารที่ผิดและ "สร้างการกำหนดค่าการเรียกใช้" อาจทำให้คุณมั่นใจได้ แต่น่าเสียดายที่มีเพียงสองรายการในเมนูย่อยของมันคือ "Unittests ใน C: \ mypath ... " และ "Doctests ใน C: \ mypath ... " ซึ่งไม่เกี่ยวข้อง - ฉันไม่ได้ใช้ทั้ง …
163 python  pycharm  pytest 

7
pytest: ยืนยันเกือบเท่ากัน
จะทำอย่างไรassert almost equalกับ py.test สำหรับการลอยตัวโดยไม่ต้องหันไปใช้สิ่งที่ชอบ: assert x - 0.00001 <= y <= x + 0.00001 โดยเฉพาะอย่างยิ่งมันจะมีประโยชน์ที่จะรู้ว่าวิธีการแก้ปัญหาที่เป็นระเบียบสำหรับการเปรียบเทียบคู่ลอยอย่างรวดเร็วโดยไม่ต้องเอาออก: assert (1.32, 2.4) == i_return_tuple_of_two_floats()

29
pytest ไม่สามารถนำเข้าโมดูลในขณะที่ python สามารถทำได้
ฉันกำลังทำงานกับแพ็คเกจใน Python ฉันใช้ Virtualenv ฉันตั้งค่าพา ธ ไปยังรูทของโมดูลในพา ธ . pth ใน Virtualenv ของฉันเพื่อที่ฉันจะสามารถอิมพอร์ตโมดูลของแพ็กเกจในขณะที่พัฒนาโค้ดและทำการทดสอบ (คำถามที่ 1: เป็นวิธีที่ดีหรือไม่?) ใช้งานได้ดี (นี่คือตัวอย่างนี่คือพฤติกรรมที่ฉันต้องการ): (VEnvTestRc) zz@zz:~/Desktop/GitFolders/rc$ python Python 2.7.12 (default, Jul 1 2016, 15:12:24) [GCC 5.4.0 20160609] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> from rc import ns >>> exit() (VEnvTestRc) …
127 python  import  pytest 

2
พิมพ์เวลาดำเนินการทดสอบและตรึงการทดสอบแบบช้าด้วย py.test
ฉันกำลังเรียกใช้การทดสอบหน่วยบนเซิร์ฟเวอร์ CI โดยใช้ py.test การทดสอบใช้ทรัพยากรภายนอกที่ดึงผ่านเครือข่าย บางครั้งนักวิ่งทดสอบใช้เวลานานเกินไปทำให้นักวิ่งทดสอบถูกยกเลิก ฉันไม่สามารถทำซ้ำปัญหาในเครื่องได้ มีวิธีทำให้ py.test พิมพ์เวลาดำเนินการของการทดสอบ (ช้า) หรือไม่ดังนั้นการตรึงการทดสอบที่มีปัญหาจึงง่ายขึ้นหรือไม่?
122 python  pytest 

6
ฉันจะตั้งค่าและแยกย่อยสำหรับคลาส pytest ด้วยการทดสอบอย่างถูกต้องได้อย่างไร
ฉันใช้ซีลีเนียมในการทดสอบตั้งแต่ต้นจนจบและไม่สามารถหาวิธีใช้setup_classและteardown_classวิธีการได้ ฉันต้องตั้งค่าเบราว์เซอร์ในsetup_classวิธีการจากนั้นทำการทดสอบหลายชุดที่กำหนดเป็นวิธีการเรียนและในที่สุดก็ออกจากเบราว์เซอร์ในteardown_classวิธี แต่ในทางเหตุผลดูเหมือนว่าจะเป็นวิธีแก้ปัญหาที่ไม่ดีเพราะอันที่จริงการทดสอบของฉันจะใช้ไม่ได้กับคลาส แต่ใช้กับวัตถุ ฉันส่งselfพารามิเตอร์ในทุกวิธีการทดสอบดังนั้นฉันจึงสามารถเข้าถึงตัวแปรของวัตถุ: class TestClass: def setup_class(cls): pass def test_buttons(self, data): # self.$attribute can be used, but not cls.$attribute? pass def test_buttons2(self, data): # self.$attribute can be used, but not cls.$attribute? pass def teardown_class(cls): pass และดูเหมือนว่าจะไม่ถูกต้องในการสร้างอินสแตนซ์เบราว์เซอร์สำหรับคลาส .. มันควรจะสร้างสำหรับทุกออบเจ็กต์แยกกันใช่ไหม? ดังนั้นฉันต้องใช้__init__และ__del__วิธีการแทนsetup_classและteardown_class?
117 python  class  object  pytest 

6
ส่งผ่านพารามิเตอร์ไปยังฟังก์ชันฟิกซ์เจอร์
ฉันใช้ py.test เพื่อทดสอบโค้ด DLL บางตัวที่ห่อด้วย Python class MyTester เพื่อวัตถุประสงค์ในการตรวจสอบความถูกต้องฉันจำเป็นต้องบันทึกข้อมูลการทดสอบบางส่วนในระหว่างการทดสอบและดำเนินการเพิ่มเติมในภายหลัง เนื่องจากฉันมีไฟล์ทดสอบ _... จำนวนมากฉันจึงต้องการใช้การสร้างวัตถุทดสอบซ้ำ (อินสแตนซ์ของ MyTester) สำหรับการทดสอบส่วนใหญ่ของฉัน เนื่องจากวัตถุทดสอบเป็นวัตถุที่ได้รับการอ้างอิงถึงตัวแปรและฟังก์ชันของ DLL ฉันจึงต้องส่งรายการตัวแปรของ DLL ไปยังวัตถุผู้ทดสอบสำหรับไฟล์ทดสอบแต่ละไฟล์ (ตัวแปรที่จะบันทึกจะเหมือนกันสำหรับ test_ .. . ไฟล์). เนื้อหาของรายการจะถูกใช้เพื่อบันทึกข้อมูลที่ระบุ ความคิดของฉันคือทำแบบนี้: import pytest class MyTester(): def __init__(self, arg = ["var0", "var1"]): self.arg = arg # self.use_arg_to_init_logging_part() def dothis(self): print "this" def dothat(self): print "that" …
114 python  fixtures  pytest 

4
วิธีดำเนินการ ipdb.set_trace () ตามต้องการในขณะที่รันการทดสอบ pytest
ฉันใช้ pytest สำหรับชุดทดสอบของฉัน ในขณะที่จับข้อบกพร่องในการทดสอบระหว่างส่วนประกอบที่ซับซ้อนฉันต้องการวางimport ipdb; ipdb.set_trace()ไว้ตรงกลางรหัสเพื่อให้ฉันแก้ไขข้อบกพร่องได้ อย่างไรก็ตามเนื่องจาก pytest traps sys.stdin / sys.stdout ipdb ล้มเหลว ฉันจะใช้ ipdb ในขณะทดสอบด้วย pytest ได้อย่างไร ฉันไม่สนใจที่จะข้ามไปที่ pdb หรือ ipdb หลังจากเกิดความล้มเหลว แต่จะทำการแบ่งที่ใดก็ได้ในโค้ดและสามารถดีบักที่นั่นก่อนที่ความล้มเหลวจะเกิดขึ้น
99 pytest 

5
วิธีระงับคำเตือนการเลิกใช้งานภายใน py.test
มีวิธีระงับคำเตือนการเลิกใช้งานภายในของ pytest หรือไม่? บริบท: ฉันกำลังมองหาในการประเมินความยากลำบากในการย้ายชุดทดสอบจากไปnose pytestชุดนี้มีขนาดค่อนข้างใหญ่และใช้เครื่องกำเนิดไฟฟ้าทดสอบตามnoseสไตล์อย่างมากyield ผมอยากจะทำให้เป็นครั้งแรกแน่ใจว่าที่มีอยู่การทดสอบผ่านกับ pytest parameterizedแล้วอาจจะเปลี่ยนเครื่องกำเนิดไฟฟ้าทดสอบเพื่อ เพียงแค่รัน$ pytest path-to-test-folderด้วย pytest 3.0.4 ถูกครอบงำโดยเพจและเพจของ WC1 ~repos/numpy/numpy/lib/tests/test_twodim_base.py yield tests are deprecated, and scheduled to be removed in pytest 4.0 มีวิธีปิดคำเตือนเหล่านี้หรือไม่?
98 python  pytest 

2
การบันทึกภายในการทดสอบ pytest
ฉันต้องการใส่ข้อความบันทึกในฟังก์ชันทดสอบเพื่อตรวจสอบตัวแปรสถานะบางอย่าง ฉันมีข้อมูลโค้ดต่อไปนี้: import pytest,os import logging logging.basicConfig(level=logging.DEBUG) mylogger = logging.getLogger() ############################################################################# def setup_module(module): ''' Setup for the entire module ''' mylogger.info('Inside Setup') # Do the actual setup stuff here pass def setup_function(func): ''' Setup for test functions ''' if func == test_one: mylogger.info(' Hurray !!') def test_one(): ''' Test One …
94 python  logging  pytest 

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