From 097318ad2f782d3aae53e82ec6dc16ab6c314a34 Mon Sep 17 00:00:00 2001 From: debugtalk Date: Fri, 25 Mar 2022 16:54:56 +0800 Subject: [PATCH] change: remove fastapi and uvicorn for python httprunner --- httprunner/app/__init__.py | 0 httprunner/app/debug_test.py | 50 --------- httprunner/app/main.py | 16 --- httprunner/app/routers/__init__.py | 0 httprunner/app/routers/debug.py | 54 --------- httprunner/app/routers/debugtalk.py | 42 ------- httprunner/app/routers/deps.py | 34 ------ poetry.lock | 166 +--------------------------- pyproject.toml | 2 - 9 files changed, 1 insertion(+), 363 deletions(-) delete mode 100644 httprunner/app/__init__.py delete mode 100644 httprunner/app/debug_test.py delete mode 100644 httprunner/app/main.py delete mode 100644 httprunner/app/routers/__init__.py delete mode 100644 httprunner/app/routers/debug.py delete mode 100644 httprunner/app/routers/debugtalk.py delete mode 100644 httprunner/app/routers/deps.py diff --git a/httprunner/app/__init__.py b/httprunner/app/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/httprunner/app/debug_test.py b/httprunner/app/debug_test.py deleted file mode 100644 index 0ee0f80e..00000000 --- a/httprunner/app/debug_test.py +++ /dev/null @@ -1,50 +0,0 @@ -import unittest - -from starlette.testclient import TestClient - -from httprunner.app.main import app - -client = TestClient(app) - - -class TestDebug(unittest.TestCase): - def test_debug_single_testcase(self): - json_data = { - "project_meta": { - "debugtalk_py": "\ndef hello(name):\n print(f'hello, {name}')\n", - "variables": {}, - "env": {}, - }, - "testcase": { - "config": { - "name": "test demo for debug service", - "verify": False, - "base_url": "", - "variables": {}, - "setup_hooks": [], - "teardown_hooks": [], - "export": [], - }, - "teststeps": [ - { - "name": "get index page", - "request": { - "method": "GET", - "url": "https://httpbin.org/", - "params": {}, - "headers": {}, - "json": {}, - "cookies": {}, - "timeout": 30, - "allow_redirects": True, - "verify": False, - }, - "extract": {}, - "validate": [], - } - ], - }, - } - response = client.post("/hrun/debug/testcase", json=json_data) - assert response.status_code == 200 - assert response.json()["code"] == 0 diff --git a/httprunner/app/main.py b/httprunner/app/main.py deleted file mode 100644 index 0084762d..00000000 --- a/httprunner/app/main.py +++ /dev/null @@ -1,16 +0,0 @@ -from fastapi import FastAPI - -from httprunner import __version__ -from .routers import deps, debugtalk, debug - -app = FastAPI() - - -@app.get("/hrun/version") -async def get_hrun_version(): - return {"code": 0, "message": "success", "result": {"HttpRunner": __version__}} - - -app.include_router(deps.router) -app.include_router(debugtalk.router) -app.include_router(debug.router) diff --git a/httprunner/app/routers/__init__.py b/httprunner/app/routers/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/httprunner/app/routers/debug.py b/httprunner/app/routers/debug.py deleted file mode 100644 index 192fbc6e..00000000 --- a/httprunner/app/routers/debug.py +++ /dev/null @@ -1,54 +0,0 @@ -from fastapi import APIRouter - -from httprunner.runner import HttpRunner -from httprunner.models import ProjectMeta, TestCase - -router = APIRouter() -runner = HttpRunner() - - -@router.post("/hrun/debug/testcase", tags=["debug"]) -async def debug_single_testcase(project_meta: ProjectMeta, testcase: TestCase): - resp = {"code": 0, "message": "success", "result": {}} - - if project_meta.debugtalk_py: - origin_local_keys = list(locals().keys()).copy() - exec(project_meta.debugtalk_py, {}, locals()) - new_local_keys = list(locals().keys()).copy() - new_added_keys = set(new_local_keys) - set(origin_local_keys) - new_added_keys.remove("origin_local_keys") - for func_name in new_added_keys: - project_meta.functions[func_name] = locals()[func_name] - - runner.with_project_meta(project_meta).run_testcase(testcase) - summary = runner.get_summary() - - if not summary.success: - resp["code"] = 1 - resp["message"] = "fail" - - resp["result"] = summary.dict() - return resp - - -# @router.post("/hrun/debug/api", tags=["debug"]) -# async def debug_single_api(): -# resp = { -# "code": 0, -# "message": "success", -# "result": {} -# } -# -# # tests_mapping -# -# # summary = runner.run_tests(tests_mapping) -# -# return resp -# -# -# @router.post("/hrun/debug/testcases", tags=["debug"]) -# async def debug_multiple_testcases(project_meta: ProjectMeta, testcases: TestCases): -# tests_mapping = { -# "project_meta": project_meta, -# "testcases": testcases -# } diff --git a/httprunner/app/routers/debugtalk.py b/httprunner/app/routers/debugtalk.py deleted file mode 100644 index eec92599..00000000 --- a/httprunner/app/routers/debugtalk.py +++ /dev/null @@ -1,42 +0,0 @@ -import contextlib -import sys -from io import StringIO - -from fastapi import APIRouter -from loguru import logger -from starlette.requests import Request - -router = APIRouter() - - -@contextlib.contextmanager -def stdout_io(stdout=None): - old = sys.stdout - if stdout is None: - stdout = StringIO() - sys.stdout = stdout - yield stdout - sys.stdout = old - - -@router.post("/hrun/debug/debugtalk_py", tags=["debugtalk"]) -async def debug_python(request: Request): - body = await request.body() - - if request.headers.get("content-transfer-encoding") == "base64": - # TODO: decode base64 - pass - - resp = {"code": 0, "message": "success", "result": ""} - try: - with stdout_io() as s: - exec(body, globals()) - output = s.getvalue() - resp["result"] = output - except Exception as ex: - resp["code"] = 1 - resp["message"] = "fail" - resp["result"] = str(ex) - logger.error(resp) - - return resp diff --git a/httprunner/app/routers/deps.py b/httprunner/app/routers/deps.py deleted file mode 100644 index b83ec3ee..00000000 --- a/httprunner/app/routers/deps.py +++ /dev/null @@ -1,34 +0,0 @@ -import subprocess -from typing import List - -import pkg_resources -from fastapi import APIRouter -from loguru import logger - -router = APIRouter() - - -@router.get("/hrun/deps", tags=["deps"]) -async def get_installed_dependenies(): - resp = {"code": 0, "message": "success", "result": {}} - for p in pkg_resources.working_set: - resp["result"][p.project_name] = p.version - - return resp - - -@router.post("/hrun/deps", tags=["deps"]) -async def install_dependenies(deps: List[str]): - resp = {"code": 0, "message": "success", "result": {}} - for dep in deps: - try: - p = subprocess.run(["pip", "install", dep]) - assert p.returncode == 0 - resp["result"][dep] = True - except (AssertionError, subprocess.SubprocessError): - resp["result"][dep] = False - resp["code"] = 1 - resp["message"] = "fail" - logger.error(f"failed to install dependency: {dep}") - - return resp diff --git a/poetry.lock b/poetry.lock index 14395b78..8a5e31a4 100644 --- a/poetry.lock +++ b/poetry.lock @@ -34,29 +34,6 @@ type = "legacy" url = "https://pypi.tuna.tsinghua.edu.cn/simple" reference = "tsinghua" -[[package]] -name = "anyio" -version = "3.5.0" -description = "High level compatibility layer for multiple asynchronous event loop implementations" -category = "dev" -optional = false -python-versions = ">=3.6.2" - -[package.dependencies] -idna = ">=2.8" -sniffio = ">=1.1" -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} - -[package.extras] -doc = ["packaging", "sphinx-rtd-theme", "sphinx-autodoc-typehints (>=1.2.0)"] -test = ["coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "pytest (>=6.0)", "pytest-mock (>=3.6.1)", "trustme", "contextlib2", "uvloop (<0.15)", "mock (>=4)", "uvloop (>=0.15)"] -trio = ["trio (>=0.16)"] - -[package.source] -type = "legacy" -url = "https://pypi.tuna.tsinghua.edu.cn/simple" -reference = "tsinghua" - [[package]] name = "appdirs" version = "1.4.4" @@ -70,25 +47,6 @@ type = "legacy" url = "https://pypi.tuna.tsinghua.edu.cn/simple" reference = "tsinghua" -[[package]] -name = "asgiref" -version = "3.5.0" -description = "ASGI specs, helper code, and adapters" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} - -[package.extras] -tests = ["pytest", "pytest-asyncio", "mypy (>=0.800)"] - -[package.source] -type = "legacy" -url = "https://pypi.tuna.tsinghua.edu.cn/simple" -reference = "tsinghua" - [[package]] name = "atomicwrites" version = "1.4.0" @@ -231,29 +189,6 @@ type = "legacy" url = "https://pypi.tuna.tsinghua.edu.cn/simple" reference = "tsinghua" -[[package]] -name = "fastapi" -version = "0.70.1" -description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" -category = "dev" -optional = false -python-versions = ">=3.6.1" - -[package.dependencies] -pydantic = ">=1.6.2,<1.7 || >1.7,<1.7.1 || >1.7.1,<1.7.2 || >1.7.2,<1.7.3 || >1.7.3,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0" -starlette = "0.16.0" - -[package.extras] -all = ["requests (>=2.24.0,<3.0.0)", "jinja2 (>=2.11.2,<4.0.0)", "python-multipart (>=0.0.5,<0.0.6)", "itsdangerous (>=1.1.0,<3.0.0)", "pyyaml (>=5.3.1,<6.0.0)", "ujson (>=4.0.1,<5.0.0)", "orjson (>=3.2.1,<4.0.0)", "email_validator (>=1.1.1,<2.0.0)", "uvicorn[standard] (>=0.12.0,<0.16.0)"] -dev = ["python-jose[cryptography] (>=3.3.0,<4.0.0)", "passlib[bcrypt] (>=1.7.2,<2.0.0)", "autoflake (>=1.4.0,<2.0.0)", "flake8 (>=3.8.3,<4.0.0)", "uvicorn[standard] (>=0.12.0,<0.16.0)"] -doc = ["mkdocs (>=1.1.2,<2.0.0)", "mkdocs-material (>=7.1.9,<8.0.0)", "mdx-include (>=1.4.1,<2.0.0)", "mkdocs-markdownextradata-plugin (>=0.1.7,<0.3.0)", "typer-cli (>=0.0.12,<0.0.13)", "pyyaml (>=5.3.1,<6.0.0)"] -test = ["pytest (>=6.2.4,<7.0.0)", "pytest-cov (>=2.12.0,<4.0.0)", "mypy (==0.910)", "flake8 (>=3.8.3,<4.0.0)", "black (==21.9b0)", "isort (>=5.0.6,<6.0.0)", "requests (>=2.24.0,<3.0.0)", "httpx (>=0.14.0,<0.19.0)", "email_validator (>=1.1.1,<2.0.0)", "sqlalchemy (>=1.3.18,<1.5.0)", "peewee (>=3.13.3,<4.0.0)", "databases[sqlite] (>=0.3.2,<0.6.0)", "orjson (>=3.2.1,<4.0.0)", "ujson (>=4.0.1,<5.0.0)", "python-multipart (>=0.0.5,<0.0.6)", "flask (>=1.1.2,<3.0.0)", "anyio[trio] (>=3.2.1,<4.0.0)", "types-ujson (==0.1.1)", "types-orjson (==3.6.0)", "types-dataclasses (==0.1.7)"] - -[package.source] -type = "legacy" -url = "https://pypi.tuna.tsinghua.edu.cn/simple" -reference = "tsinghua" - [[package]] name = "filetype" version = "1.0.10" @@ -267,22 +202,6 @@ type = "legacy" url = "https://pypi.tuna.tsinghua.edu.cn/simple" reference = "tsinghua" -[[package]] -name = "h11" -version = "0.13.0" -description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} - -[package.source] -type = "legacy" -url = "https://pypi.tuna.tsinghua.edu.cn/simple" -reference = "tsinghua" - [[package]] name = "idna" version = "3.3" @@ -663,39 +582,6 @@ type = "legacy" url = "https://pypi.tuna.tsinghua.edu.cn/simple" reference = "tsinghua" -[[package]] -name = "sniffio" -version = "1.2.0" -description = "Sniff out which async library your code is running under" -category = "dev" -optional = false -python-versions = ">=3.5" - -[package.source] -type = "legacy" -url = "https://pypi.tuna.tsinghua.edu.cn/simple" -reference = "tsinghua" - -[[package]] -name = "starlette" -version = "0.16.0" -description = "The little ASGI library that shines." -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -anyio = ">=3.0.0,<4" -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} - -[package.extras] -full = ["itsdangerous", "jinja2", "python-multipart", "pyyaml", "requests", "graphene"] - -[package.source] -type = "legacy" -url = "https://pypi.tuna.tsinghua.edu.cn/simple" -reference = "tsinghua" - [[package]] name = "toml" version = "0.10.2" @@ -766,28 +652,6 @@ type = "legacy" url = "https://pypi.tuna.tsinghua.edu.cn/simple" reference = "tsinghua" -[[package]] -name = "uvicorn" -version = "0.17.6" -description = "The lightning-fast ASGI server." -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -asgiref = ">=3.4.0" -click = ">=7.0" -h11 = ">=0.8" -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} - -[package.extras] -standard = ["websockets (>=10.0)", "httptools (>=0.4.0)", "watchgod (>=0.6)", "python-dotenv (>=0.13)", "PyYAML (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "colorama (>=0.4)"] - -[package.source] -type = "legacy" -url = "https://pypi.tuna.tsinghua.edu.cn/simple" -reference = "tsinghua" - [[package]] name = "win32-setctime" version = "1.1.0" @@ -828,7 +692,7 @@ upload = ["requests-toolbelt", "filetype"] [metadata] lock-version = "1.1" python-versions = "^3.7" -content-hash = "484e6bfffc0e5b3b998b150e7bf0ced340577a216d56576a9b702baff511fe2c" +content-hash = "ce51964d1daf419593be8b6d6f003069bf8626d922b950432e2c6f9a8093d9e6" [metadata.files] allure-pytest = [ @@ -839,18 +703,10 @@ allure-python-commons = [ {file = "allure-python-commons-2.9.45.tar.gz", hash = "sha256:c238d28aeac35e8c7c517d8a2327e25ae5bbf2c30b5e2313d20ef11d75f5549d"}, {file = "allure_python_commons-2.9.45-py3-none-any.whl", hash = "sha256:3572f0526db3946fb14470c58b0b41d343483aad91d37d414e4641815e13691a"}, ] -anyio = [ - {file = "anyio-3.5.0-py3-none-any.whl", hash = "sha256:b5fa16c5ff93fa1046f2eeb5bbff2dad4d3514d6cda61d02816dba34fa8c3c2e"}, - {file = "anyio-3.5.0.tar.gz", hash = "sha256:a0aeffe2fb1fdf374a8e4b471444f0f3ac4fb9f5a5b542b48824475e0042a5a6"}, -] appdirs = [ {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, ] -asgiref = [ - {file = "asgiref-3.5.0-py3-none-any.whl", hash = "sha256:88d59c13d634dcffe0510be048210188edd79aeccb6a6c9028cdad6f31d730a9"}, - {file = "asgiref-3.5.0.tar.gz", hash = "sha256:2f8abc20f7248433085eda803936d98992f1343ddb022065779f37c5da0181d0"}, -] atomicwrites = [ {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, @@ -962,18 +818,10 @@ coverage = [ {file = "coverage-4.5.4-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:141f08ed3c4b1847015e2cd62ec06d35e67a3ac185c26f7635f4406b90afa9c5"}, {file = "coverage-4.5.4.tar.gz", hash = "sha256:e07d9f1a23e9e93ab5c62902833bf3e4b1f65502927379148b6622686223125c"}, ] -fastapi = [ - {file = "fastapi-0.70.1-py3-none-any.whl", hash = "sha256:5367226c7bcd7bfb2e17edaf225fd9a983095b1372281e9a3eb661336fb93748"}, - {file = "fastapi-0.70.1.tar.gz", hash = "sha256:21d03979b5336375c66fa5d1f3126c6beca650d5d2166fbb78345a30d33c8d06"}, -] filetype = [ {file = "filetype-1.0.10-py2.py3-none-any.whl", hash = "sha256:63fbe6e818a3d1cfac1d62b196574a7a4b7fc8e06a6c500d53577c018ef127d9"}, {file = "filetype-1.0.10.tar.gz", hash = "sha256:323a13500731b6c65a253bc3930bbce9a56dfba71e90b60ffd968ab69d9ae937"}, ] -h11 = [ - {file = "h11-0.13.0-py3-none-any.whl", hash = "sha256:8ddd78563b633ca55346c8cd41ec0af27d3c79931828beffb46ce70a379e7442"}, - {file = "h11-0.13.0.tar.gz", hash = "sha256:70813c1135087a248a4d38cc0e1a0181ffab2188141a93eaf567940c3957ff06"}, -] idna = [ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, @@ -1219,14 +1067,6 @@ six = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, ] -sniffio = [ - {file = "sniffio-1.2.0-py3-none-any.whl", hash = "sha256:471b71698eac1c2112a40ce2752bb2f4a4814c22a54a3eed3676bc0f5ca9f663"}, - {file = "sniffio-1.2.0.tar.gz", hash = "sha256:c4666eecec1d3f50960c6bdf61ab7bc350648da6c126e3cf6898d8cd4ddcd3de"}, -] -starlette = [ - {file = "starlette-0.16.0-py3-none-any.whl", hash = "sha256:38eb24bf705a2c317e15868e384c1b8a12ca396e5a3c3a003db7e667c43f939f"}, - {file = "starlette-0.16.0.tar.gz", hash = "sha256:e1904b5d0007aee24bdd3c43994be9b3b729f4f58e740200de1d623f8c3a8870"}, -] toml = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, @@ -1269,10 +1109,6 @@ urllib3 = [ {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"}, {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"}, ] -uvicorn = [ - {file = "uvicorn-0.17.6-py3-none-any.whl", hash = "sha256:19e2a0e96c9ac5581c01eb1a79a7d2f72bb479691acd2b8921fce48ed5b961a6"}, - {file = "uvicorn-0.17.6.tar.gz", hash = "sha256:5180f9d059611747d841a4a4c4ab675edf54c8489e97f96d0583ee90ac3bfc23"}, -] win32-setctime = [ {file = "win32_setctime-1.1.0-py3-none-any.whl", hash = "sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad"}, {file = "win32_setctime-1.1.0.tar.gz", hash = "sha256:15cf5750465118d6929ae4de4eb46e8edae9a5634350c01ba582df868e932cb2"}, diff --git a/pyproject.toml b/pyproject.toml index 2c16dbaa..bb3973c5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -51,8 +51,6 @@ upload = ["requests-toolbelt", "filetype"] # pip install "httprunner[upload]", [tool.poetry.dev-dependencies] coverage = "^4.5.4" -fastapi = "^0.70.0" -uvicorn = "^0.17.6" [tool.poetry.scripts] httprunner = "httprunner.cli:main"