Pytest - การแข่งขัน

ส่วนควบเป็นฟังก์ชันซึ่งจะทำงานก่อนการทดสอบแต่ละฟังก์ชันที่จะใช้ การแข่งขันใช้เพื่อป้อนข้อมูลบางส่วนไปยังการทดสอบเช่นการเชื่อมต่อฐานข้อมูล URL ที่จะทดสอบและข้อมูลอินพุตบางประเภท ดังนั้นแทนที่จะเรียกใช้รหัสเดียวกันสำหรับการทดสอบทุกครั้งเราสามารถแนบฟังก์ชันฟิกซ์เจอร์เข้ากับการทดสอบและจะเรียกใช้และส่งคืนข้อมูลไปยังการทดสอบก่อนดำเนินการทดสอบแต่ละครั้ง

ฟังก์ชันถูกทำเครื่องหมายว่าเป็นฟิกซ์เจอร์โดย -

@pytest.fixture

ฟังก์ชันทดสอบสามารถใช้ฟิกซ์เจอร์ได้โดยระบุชื่อฟิกซ์เจอร์เป็นพารามิเตอร์อินพุต

สร้างไฟล์ test_div_by_3_6.py และเพิ่มรหัสด้านล่างลงไป

import pytest

@pytest.fixture
def input_value():
   input = 39
   return input

def test_divisible_by_3(input_value):
   assert input_value % 3 == 0

def test_divisible_by_6(input_value):
   assert input_value % 6 == 0

ที่นี่เรามีฟังก์ชันติดตั้งชื่อ input_valueซึ่งให้ข้อมูลเข้าในการทดสอบ ในการเข้าถึงฟังก์ชันฟิกซ์เจอร์การทดสอบต้องระบุชื่อฟิกซ์เจอร์เป็นพารามิเตอร์อินพุต

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

ดำเนินการทดสอบโดยใช้คำสั่งต่อไปนี้ -

pytest -k divisible -v

คำสั่งดังกล่าวจะสร้างผลลัพธ์ต่อไปนี้ -

test_div_by_3_6.py::test_divisible_by_3 PASSED
test_div_by_3_6.py::test_divisible_by_6 FAILED
============================================== FAILURES
==============================================
________________________________________ test_divisible_by_6
_________________________________________
input_value = 39
   def test_divisible_by_6(input_value):
>  assert input_value % 6 == 0
E  assert (39 % 6) == 0
test_div_by_3_6.py:12: AssertionError
========================== 1 failed, 1 passed, 6 deselected in 0.07 seconds
==========================

อย่างไรก็ตามแนวทางดังกล่าวมาพร้อมกับข้อ จำกัด ของตัวเอง ฟังก์ชันฟิกซ์เจอร์ที่กำหนดไว้ภายในไฟล์ทดสอบมีขอบเขตภายในไฟล์ทดสอบเท่านั้น เราไม่สามารถใช้ฟิกซ์เจอร์นั้นในไฟล์ทดสอบอื่นได้ ในการทำให้ฟิกซ์เจอร์พร้อมใช้งานกับไฟล์ทดสอบหลายไฟล์เราต้องกำหนดฟังก์ชันฟิกซ์เจอร์ในไฟล์ที่เรียกว่า conftest.pyconftest.py จะอธิบายในบทถัดไป