Die Funktion von CircleCI besteht darin, dass Sie die CI-Umgebung kostenlos verwenden können, wenn Sie über eine Umgebung verfügen. Nach Abschluss der Umgebungskonstruktion wird der CI-Container für jedes Commit auf GitHub gestartet und der definierte automatisierte Test für den Container ausgeführt. In diesem Beitrag teste ich einen Webserver, der mit Python 3.5 und Flask auf CircleCI erstellt wurde und Anforderungen verwendet, um auf den Webserver im Container zuzugreifen und den HTTP-Statuscode 200 zurückzugeben.
Testen Sie einen mit Python3.5 + Flask erstellten Webserver
In diesem Artikel starten wir einen Webserver mit Flask, einem Python-Webframework, auf CircleCI und führen einen einfachen Test durch, um auf den HTTP-Endpunkt zuzugreifen und den HTTP-Status zu überprüfen.
Das Problem der Handwerkskunst von Jenkins ist ein ungewöhnlich geprägtes Wort, das in meinem engen Beobachtungsbereich gesagt wird. Das Problem ist, dass, wenn Sie Jenkins als CI-Umgebung in PJ einfügen, im Allgemeinen Jenkins-Handwerker auftreten und magische Umbauten stattfinden und dies praktisch ist. Wenn die Jenkins-Umgebung jedoch beschädigt ist, obwohl sie nur mit Jenkins eingesetzt werden kann, werden die Handwerker eingesetzt Ich kann es nur reparieren. Ist oft das Problem. Ich denke, dass eine Tragödie oft in dem Stadium auftritt, in dem Jenkins zu einer unverzichtbaren Infrastruktur wird und es nicht erforderlich ist, nicht auf das Niveau der Produktionsumgebung zu fallen. Ein angesehener Senior sagte, er wolle sich nach Möglichkeit nicht in den Jenkins-Cluster einmischen.
CircleCI verursacht dieses Problem nicht, da alle Informationen zur CI-Umgebung ** in circle.yml ** zusammengefasst sind. Das Problem des Überpackens des SDK in einem Jenkins tritt auch nicht auf, da für jeden Test ein separater Container erstellt wird.
Erstellen Sie "circle.yml" im obersten Verzeichnis des Repositorys und schreiben Sie Folgendes zum Festschreiben. In dem Moment, in dem Sie sich verpflichten, wird es angeschlossen und der Test wird automatisch auf CircleCI gestartet.
circle.yml
test:
override:
- pwd ~
- ifconfig
- echo HelloWorld
- exit 0
■ Ausführungsergebnis
In der offiziellen Dokumentation hier (https://circleci.com/docs/environment#python) finden Sie die von CircleCI unterstützten Python-Versionen. Wenn Sie ein Commit durchführen, wird der Test automatisch ausgeführt.
circle.yml
machine:
python:
version: 3.5.0
test:
override:
- pwd ~
- ifconfig
- echo HelloWorld
- exit 0
pip ist ein Gem-Paketverwaltungssystem in Ruby. Die Standardmethode von CicleCI besteht darin, den Paketnamen und die Version in "require.txt" im obersten Verzeichnis des Repositorys aufzulisten. Weitere Informationen finden Sie in der offiziellen Dokumentation zu Python (https://circleci.com/docs/language-python).
circle.yml
machine:
python:
version: 3.5.0
dependencies:
pre:
- pip install -r ./requirements.txt
test:
override:
- pwd ~
- ifconfig
- echo HelloWorld
- exit 0
requirements.txt
Flask==0.10.1
Flask-Script==2.0.5
pytz==2015.7
redis==2.10.5
requests==2.9.1
six==1.10.0
SQLAlchemy==1.0.11
gunicorn==19.4.5
pytest==2.8.5
** Der Grund für die Ausführung im Hintergrund ist, dass der Prozess aufhört, auf den Abschluss des Runservers zu warten, wenn Sie nicht parallel ausgeführt werden, und der Test nicht beendet wird. ** ** **
Um das Python-Skript auf CircleCI auszuführen, müssen Sie Berechtigungen mit chmod erteilen und PYTHONPATH festlegen. Flask but manage.py ist der Effekt des Customizings mit Flask-Script. Flask-Script ist nützlich für erfahrene Django-Benutzer. Es ist praktisch, den Befehl curl in test: override:
zu schreiben, um zu überprüfen, ob der Server ausgeführt wird.
circle.yml
machine:
python:
version: 3.5.0
dependencies:
pre:
- chmod -R 777 ./example
- pip install -r ./requirements.txt
- export PYTHONPATH="/home/ubuntu/flask_template/example/application"
- python ./application/manage.py runserver:
background: true
- sleep 5
test:
override:
- pwd ~
- ifconfig
- echo HelloWorld
- curl http://127.0.0.1/example
- exit 0
Schreiben Sie einen Test mit py.test. Es ist so einfach wie das Überprüfen des HttpStatus. Diesmal handelt es sich um ein Beispiel, daher ist der Inhalt derselbe
■ Code für py.test
test_example.py
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
import requests
def test_example():
host = "127.0.0.1:5000"
url = 'http://{}/example/'.format(host)
print(url)
response = requests.get(url)
print(response.text)
assert response.status_code == 200
assert "Error" not in response.text
circle.yml
machine:
python:
version: 3.5.0
dependencies:
pre:
- chmod -R 777 ./example
- pip install -r ./requirements.txt
- export PYTHONPATH="/home/ubuntu/flask_template/example/application"
- python ./application/manage.py runserver:
background: true
- sleep 5
test:
override:
- pwd ~
- ifconfig
- echo HelloWorld
- curl http://127.0.0.1/example
- py.test ./example/tests/test_example.py
- exit 0
Wenn Sie ein Commit durchführen und der Test erfolgreich ist, ist die Arbeit abgeschlossen
Sie können das Benachrichtigungsziel auf der Seite Projekteinstellungen> Benachrichtigungen festlegen. Ist es leicht zu verstehen, wenn Sie offizielles Dokument benachrichtigen lesen?
■ Benachrichtigt
Ich habe MySQL noch nicht ausprobiert, daher würde ich es gerne in Zukunft ausprobieren. Offizielle Einstellungen der Dokumentendatenbank
Zuerst verstand ich die Argumentation nicht und die Lernkosten waren hoch, so dass der erste Schritt schwierig war. Ich fand es sehr gut, weil die offiziellen Dokumente umfangreich waren. Aufgrund der eingeschränkten Verwendung des Testens des Python-Webframeworks war ich der Meinung, dass es möglich wäre, eine Konfigurationsdatei in Massenproduktion zu erstellen, wenn jemand hart daran arbeitet, sie zu schreiben.