En mettant en place un serveur local lors de l'exécution d'un test unitaire, il est possible d'effectuer des tests qui ne dépendent pas de l'extérieur.
Pratique pour le développement d'API et de robots d'exploration.
Le flux est comme ça
conftest.py
--Appeler un appareil dans une fonction de testconftest.py
import pytest
from http.server import (
HTTPServer as SuperHTTPServer,
SimpleHTTPRequestHandler
)
import threading
class HTTPServer(SuperHTTPServer):
"""
Classe pour que le wrapper exécute Simple HTTP Server avec Thread.
Ctrl +Seul Thread reste mort lorsqu'il est terminé par C.
Passes d'interruption de clavier.
"""
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_Courir pour toujours sous le fil
server = HTTPServer((host, port), SimpleHTTPRequestHandler)
thread = threading.Thread(None, server.run)
thread.start()
yield url #Transition à tester ici
#Filetage final
server.shutdown()
thread.join()
Transférez le contrôle vers la fonction de test avec l'instruction yield
.
Les paramètres «setUp» et «tearDown» dans le test unitaire sont respectivement avant et après l'instruction «yield».
Placez le contenu dans le répertoire d'exécution.
index.html
<html>Hello pytest!</html>
Utilisez fixture (http_server
) dans la fonction de test
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 ==========================================
La génération de projecteurs peut être tracée avec l'option --setup-show
.
Vous pouvez voir que la fonction test_index
utilise le fixture http_server
.
Bankushi (@vaaaaanquish), je l'ai utilisé comme référence.
Référence- Ecrire un test unitaire pour le web scraping en utilisant http.server en Python
Recommended Posts