Durch die Einrichtung eines lokalen Servers bei der Ausführung eines Komponententests können Tests durchgeführt werden, die nicht von außen abhängen.
Praktisch für die API- und Crawler-Entwicklung.
Der Fluss ist so
conftest.py
conftest.py
import pytest
from http.server import (
HTTPServer as SuperHTTPServer,
SimpleHTTPRequestHandler
)
import threading
class HTTPServer(SuperHTTPServer):
"""
Klasse für Wrapper zum Ausführen von Simple HTTP Server mit Thread.
Ctrl +Nur Thread bleibt tot, wenn er mit C beendet wird.
Tastaturunterbrechungsdurchläufe.
"""
def run(self):
try:
self.serve_forever()
except KeyboardInterrupt:
pass
finally:
self.server_close()
@pytest.fixture()
def http_server():
host, port = '127.0.0.1', 8888
url = f'http://{host}:{port}/index.html'
# serve_Laufen Sie für immer unter Faden
server = HTTPServer((host, port), SimpleHTTPRequestHandler)
thread = threading.Thread(None, server.run)
thread.start()
yield url #Übergang zum Test hier
#Gewinde beenden
server.shutdown()
thread.join()
Übertragen Sie die Steuerung mit der Anweisung "Yield" an die Testfunktion. Das "setUp" und das "tearDown" im Unit-Test stehen vor bzw. nach der "Yield" -Anweisung.
Platzieren Sie den Inhalt im Ausführungsverzeichnis.
index.html
<html>Hello pytest!</html>
Verwenden Sie das Gerät (http_server
) in der Testfunktion
test_httpserver.py
import requests
def test_index(http_server):
url = http_server
response = requests.get(url)
assert response.text == '<html>Hello pytest!</html>'
$ pytest --setup-show test_httpserver.py
========================================= test session starts =========================================platform linux -- Python 3.8.1, pytest-5.3.3, py-1.8.1, pluggy-0.13.1
rootdir: /home/skokado/workspace/sandbox
collected 1 item
test_httpserver.py
SETUP F http_server
test_httpserver.py::test_index (fixtures used: http_server).
TEARDOWN F http_server
========================================== 1 passed in 0.60s ==========================================
Die Gerätegenerierung kann mit der Option "--setup-show" verfolgt werden.
Sie können sehen, dass die Funktion test_index
das Gerät http_server
verwendet.
Bankushi (@vaaaaanquish) habe ich als Referenz verwendet.
Referenz- Schreiben Sie einen Unit-Test für Web-Scraping mit http.server in Python
Recommended Posts