[PYTHON] Serveur Web pour tester le navigateur avec Mocha

Je l'ai écrit avec l'espoir qu'un serveur Web pour les tests et le débogage puisse être mis en place avec une commande comme buster static. Jetez ce script dans un répertoire dans lequel se trouve PYTHONPATH, python -m mocha_server lib/*.js test/*.js Démarrez le serveur Web dans le répertoire actuel avec. Pour fonctionner, vous avez besoin d'un framework appelé python2 (3 n'est pas possible) et Flask.

mocha_server.py


#!/usr/bin/env python
# coding: utf-8
"""
Mocha server

usage:
    $ python mocha_server.py lib/*.js test/*.js
    or
    $ python -m mocha_server lib/*.js test/*.js
"""
PORT = 8008

import sys
import os
import urllib
import threading
import mimetypes
import flask
from flask import Flask, g, request, render_template_string, abort


sources = []

libs = {
    "/lib/jquery.js": "http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js",
    "/lib/mocha.js": "https://raw.github.com/visionmedia/mocha/master/mocha.js",
    "/lib/chai.js": "https://raw.github.com/chaijs/chai/master/chai.js",
    "/lib/mocha.css": "https://raw.github.com/visionmedia/mocha/master/mocha.css",
}

app = flask.Flask(__name__)


def main():
    try:
        sources[:] = [s.decode("utf-8") for s in sys.argv[1:]]
    except ValueError:
        sources[:] = [s.decode("shift_jis") for s in sys.argv[1:]]
    sources.sort(key=is_test)

    threads = []
    for lib in libs:
        t = threading.Thread(target=load_worker, args=[lib])
        t.daemon = True
        threads.append(t)
        t.start()

    for t in threads:
        t.join()

    app.run(port=PORT, debug=True)


def load_worker(libname):
    source = urllib.urlopen(libs[libname]).read()
    libs[libname] = source


def is_test(source):
    return os.path.basename(source).startswith("test") or \
           "test" in source.split(os.sep)


@app.route("/")
def index():
    return template.render(sources=sources, libs=libs.keys())


@app.route("/lib/<path:p>")
def lib(p):
    if request.path not in libs:
        abort(404)
    mime, _ = mimetypes.guess_type(request.path)
    return flask.Response(libs[request.path], mimetype=mime)


@app.route("/source")
def source_file():
    source = request.args["source"]
    if source not in sources or not os.path.exists(source):
        abort(404)
    mime, _ = mimetypes.guess_type(source)
    return flask.Response(open(source).read(), mimetype=mime)


template = app.jinja_env.from_string("""\
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf-8">
        <title>mocha sample</title>
        {%- for lib in libs %}
        {%- if lib.endswith("css") %}
        <link href="{{ lib }}" rel="stylesheet">
        {%- else %}
        <script src="{{ lib }}"></script>
        {%- endif %}
        {%- endfor %}
        <script>
            mocha.setup("bdd");
            $(window).load(function() {
                mocha.run()
            });
        </script>
    </head>
    <body>
        <div id="mocha"></div>
        {%- for source in sources %}
        {%- if source.endswith("css") %}
        <link href="{{ url_for("source_file", source=source) }}" rel="stylesheet">
        {%- else %}
        <script src="{{ url_for("source_file", source=source) }}"></script>
        {%- endif %}
        {%- endfor %}
    </body>
</html>""")


if __name__ == '__main__':
    main()

Recommended Posts

Serveur Web pour tester le navigateur avec Mocha
Grattage WEB avec Python (pour mémo personnel)
Dockerfile pour serveur RESTful MeCab avec mecab-ipadic-neologd
[Pour les débutants] Essayez le web scraping avec Python
Contenu Web Python réalisé avec le serveur bon marché Lolipop
Démarrez un serveur Web Python simple avec Docker
Lancer un serveur Web avec Python et Flask
Analyse de données pour améliorer POG 1 ~ Web scraping avec Python ~
Créé en spécifiant l'id de python GAE DataStore à des fins de test
Serveur HTTP et client HTTP utilisant Socket (+ navigateur Web) --Python3
Serveur TFTP avec Docker
Techniques de test de code?
Commentaire sur la construction du serveur Web
Serveur Web One Liner
Construction du serveur Web Ubuntu (18.04.3)
Serveur proxy avec Docker
Tester Elasticsearch avec python-tcptest
Serveur web joyeux Noël
Serveur local avec python
Configurer un serveur Web avec CentOS7 + Anaconda + Django + Apache
Créez un serveur API Web ultra-rapide avec Falcon
Lorsque vous accédez au serveur Web, L Chika avec Arduino
(Pour les débutants) Essayez de créer une API Web simple avec Django
Bibliothèque pour spécifier un serveur de noms en python et dig
Réduisons le travail requis pour la configuration du serveur avec Ansible
Agréger les appels quotidiens par seconde à partir des journaux du serveur Web en Python
Envoie le résultat de l'analyse morphologique avec Mecab vers un navigateur WEB compatible avec le serveur Sakura / UTF-8