497 การอ่าน
497 การอ่าน

7 เคล็ดลับและแนวทางปฏิบัติที่ดีที่สุดสำหรับการทดสอบอัตโนมัติ Python ที่มีประสิทธิภาพ

โดย Pradeesh Ashokan6m2025/03/30
Read on Terminal Reader

นานเกินไป; อ่าน

Python เป็นหนึ่งในภาษาโปรแกรมที่ดีที่สุดสําหรับการทดสอบอัตโนมัติ เลือกกรอบการทดสอบอัตโนมัติที่เหมาะสมขึ้นอยู่กับข้อกําหนดของโครงการของคุณ ใช้ WebDriverWait ใน Selenium เพื่อเอาชนะปัญหาเวลา
featured image - 7 เคล็ดลับและแนวทางปฏิบัติที่ดีที่สุดสำหรับการทดสอบอัตโนมัติ Python ที่มีประสิทธิภาพ
Pradeesh Ashokan HackerNoon profile picture

หากคุณได้วิ่ง การทดสอบระบบอัตโนมัติ ด้วย JavaScript, Node หรือภาษาโปรแกรมอื่นๆ คุณจะรู้ว่า Python ใช้งานง่ายแค่ไหน Python มีไลบรารีมากมาย ความเรียบง่าย และการใช้งานในระดับขนาดใหญ่ ทำให้ Python เป็นหนึ่งในภาษาโปรแกรมที่ดีที่สุดสำหรับการทดสอบอัตโนมัติ


ฉันทำงานในโครงการทดสอบอัตโนมัติด้วย Python มานานพอที่จะรู้เคล็ดลับและเทคนิคบางประการเพื่อให้ได้ผลลัพธ์ที่ดีที่สุด ฉันจะแบ่งปันเคล็ดลับและแนวทางปฏิบัติเจ็ดประการที่คุณสามารถพึ่งพาได้สำหรับการทดสอบอัตโนมัติด้วย Python ที่มีประสิทธิภาพ

1. เลือกกรอบการทำงานการทดสอบอัตโนมัติที่เหมาะสมตามข้อกำหนดของโครงการของคุณ

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


Pytest นำเสนอวิธีการเขียนเคสทดสอบอย่างมีโครงสร้างและมีประสิทธิภาพสำหรับการทดสอบอัตโนมัติที่จัดการได้ง่ายกว่าและปรับขนาดได้ นอกจากนี้ยังมีรูปแบบที่ง่ายที่สุดและระบบนิเวศปลั๊กอินที่ครอบคลุมที่สุด ตัวอย่างเช่น คุณสามารถใช้ pytest-xdist สำหรับการดำเนินการทดสอบแบบคู่ขนาน นอกจากนี้ คุณยังสามารถเรียกใช้เคสทดสอบที่คุณเขียนใน Unittest หรือ Nose 2 บน Pytest ได้อีกด้วย


หากคุณทำกระบวนการอัตโนมัติของหุ่นยนต์มากขึ้น ( รปภ. ) เฟรมเวิร์กของหุ่นยนต์เป็นตัวเลือกที่ดีกว่า ไวยากรณ์นั้นเป็นภาษามนุษย์เป็นหลัก ดังนั้นจึงใช้งานได้ง่ายมาก สำหรับการทดสอบเว็บ คุณยังสามารถรวมเฟรมเวิร์กนี้กับเฟรมเวิร์กการทดสอบ Python อื่นๆ เช่น Selenium ได้ด้วย


หากคุณทำงานในทีมที่ปฏิบัติตามแนวทางการพัฒนาตามพฤติกรรม (BDD) Behave ถือเป็นกรอบงานที่ดีที่สุด การเขียนกรณีทดสอบใน Behave ที่ผู้มีส่วนได้ส่วนเสียที่ไม่ใช่ด้านเทคนิคสามารถเข้าใจได้นั้นง่ายมาก


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

2. ใช้ WebDriverWait ใน Selenium เพื่อแก้ไขปัญหาเรื่องเวลา

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


เมื่อคุณรันการทดสอบบน Selenium คุณต้องรอเป็นเวลาที่กำหนดในขณะที่ระบบทำงานเพื่อค้นหาองค์ประกอบ เมื่อเวลาผ่านไป 10 วินาที ไดรเวอร์ก็จะหยุดทำงาน ปัญหาของการรอโดยปริยายก็คือ องค์ประกอบต่างๆ ต้องมีระยะเวลาการรอที่แตกต่างกัน


ดังนั้น แทนที่จะพึ่งพาการรอโดยปริยาย ให้ใช้ WebDriverWait ร่วมกับ expected_conditions เพื่อสร้างเงื่อนไขบางประการที่ต้องได้รับการปฏิบัติตามก่อนที่องค์ประกอบจะโต้ตอบได้

 from selenium import webdriver from Selenium.webdriver.common.by import By from Selenium.webdriver.support.ui import WebDriverWait from Selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.get("https://example.com") # Wait for the element to be clickable wait = WebDriverWait(driver, 10) element = wait.until(EC.element_to_be_clickable((By.ID, "clickableElementId"))) element.click() # Perform action after the element is ready driver.quit()


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

3. ใช้การทดสอบพารามิเตอร์ Pytest เพื่อหลีกเลี่ยงการทำซ้ำฟังก์ชันการทดสอบ

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


import pytest

@pytest.mark.parametrize("input, expected", [(2, 4), (3, 9), (4, 16)])

def test_square(input, expected):

assert input ** 2 == expected


หากคุณสงสัยว่าคุณสามารถรันการทดสอบแบบพารามิเตอร์ด้วยกรอบงานการทดสอบอัตโนมัติในตัวของ Python ได้หรือไม่ คำตอบคือได้ภายใต้เงื่อนไขบางประการ Unittest ไม่รองรับการทดสอบแบบพารามิเตอร์โดยตรง แต่คุณสามารถเพิ่มโมดูลสำหรับจุดประสงค์นั้นได้ วิธีดำเนินการมีดังต่อไปนี้:

import unittest

from parameterized import parameterized

class TestMathOperations(unittest.TestCase):

@parameterized.expand([

("square of 2", 2, 4),

("square of 3", 3, 9),

("square of 4", 4, 16),

])

def test_square(self, name, input, expected):

self.assertEqual(input ** 2, expected)

4. เร่งความเร็วในการดำเนินการทดสอบด้วยการทดสอบแบบคู่ขนาน

ที่มาของภาพ

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


วิธีดำเนินการทดสอบแบบคู่ขนานด้วย Pytest มีดังนี้:

pip install pytest-xdist

pytest -n 4 # Run tests on 4 CPUs


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

5. ทำให้การทดสอบของคุณเป็นแบบอัตโนมัติในระบบ CI/CD

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


คุณสามารถทำให้การทดสอบ Python เป็นแบบอัตโนมัติในไปป์ไลน์ CI/CD เพื่อดำเนินการโดยอัตโนมัติทุกครั้งที่มีการเปลี่ยนแปลงโค้ด วิธีนี้ช่วยให้คุณระบุข้อบกพร่องได้อย่างรวดเร็วและปล่อยเวอร์ชันแอปที่ปรับปรุงแล้วกลับมาใช้งานได้


เพื่อรวมการทดสอบอัตโนมัติของ Python เข้ากับกระบวนการ CI/CD ของคุณ เพิ่ม pytest-cov ลงในโปรเจ็กต์ของคุณ และใช้คำสั่ง Pytest เพื่อดำเนินการทดสอบและทำเครื่องหมายปัญหาโดยอัตโนมัติ


ขั้นตอน:

- name: Install dependencies

run: pip install pytest pytest-cov


- name: Run tests

run: pytest --cov=my_project


หากคุณทำงานกับชุดทดสอบขนาดใหญ่ คุณจะต้องเพิ่มกรอบงานหุ่นยนต์ให้กับเครื่องมือ CI เช่น Jenkins สำหรับ Unittest การครอบคลุมช่วยให้คุณรวมการทดสอบของคุณเข้ากับกระบวนการเช่นนี้ได้


ทดสอบ:

script:

- Python -m coverage run -m unittest discover

- Python -m coverage report

6. รันการทดสอบแบบแยกส่วน

ปัญหาทั่วไปอย่างหนึ่งที่คุณอาจพบเจอในการทดสอบอัตโนมัติของ Python คือการทดสอบที่ล้มเหลวเนื่องจากความสัมพันธ์กัน โดยพื้นฐานแล้ว การทดสอบของคุณจะล้มเหลวเนื่องจากการทดสอบครั้งหนึ่งของคุณขึ้นอยู่กับข้อมูลหรือเงื่อนไขสภาพแวดล้อมของการทดสอบอื่น ดังนั้น หากการทดสอบครั้งหนึ่งได้รับการปรับเปลี่ยน การทดสอบอื่น ๆ ก็จะล้มเหลวอันเป็นผลจากปฏิกิริยาลูกโซ่ที่เกิดจากการเปลี่ยนแปลงนั้น เพื่อแก้ไขปัญหานี้ ให้แยกการทดสอบทั้งหมดออกเพื่อให้การทดสอบแต่ละครั้งเริ่มต้นโดยไม่เชื่อมโยงกับการทดสอบอื่น ๆ วิธีนี้จะช่วยให้คุณดีบักได้โดยไม่ต้องจัดการกับผลกระทบแบบลูกโซ่ต่อการทดสอบอื่น ๆ


วิธีการตรวจสอบให้แน่ใจว่าแยกการทดสอบโดยใช้ตรรกะการตั้งค่าและการถอดแยกบน Pytest มีดังนี้


import pytest

@pytest.fixture

def clean_environment():

# Setup: Prepare a clean state

print("Setting up a clean environment.")

yield

# Teardown: Reset environment

print("Cleaning up after the test.")


def test_example(clean_environment):

assert 2 + 2 == 4


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

7. ยึดมั่นในแนวปฏิบัติการทดสอบอัตโนมัติที่ดีที่สุด

ฉันจะเน้นแนวทางปฏิบัติที่ดีสองสามประการเพื่อให้มีประสิทธิภาพมากขึ้นในการทดสอบอัตโนมัติของ Python

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

บทสรุป

การทดสอบอัตโนมัติอาจเป็นเรื่องท้าทาย โดยเฉพาะอย่างยิ่งเมื่อต้องจัดการกับชุดข้อผิดพลาดที่ดูเหมือนจะแก้ไขไม่ได้ ฉันค้นพบว่าการทดสอบอัตโนมัติมีข้อบกพร่องน้อยลงเมื่อใช้พีระมิดการทดสอบ ที่นี่ คุณจะเน้นที่การทดสอบยูนิตและการรวมระบบก่อนการทดสอบ E2E ด้วยเคล็ดลับและแนวทางปฏิบัติที่ฉันเน้นย้ำ คุณสามารถรันการทดสอบการถดถอยอย่างต่อเนื่องในสภาพแวดล้อม CI/CD ได้อย่างมีประสิทธิภาพ และได้รับคำติชมทันที ก่อนที่คุณจะปรับใช้โค้ด

Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks