mirror of https://github.com/scrapy/scrapy.git
Merge pull request #5949 from wRAR/tests-as-installed
Allow running tests against the installed version
This commit is contained in:
commit
58300e066f
|
|
@ -1,11 +1,13 @@
|
|||
import argparse
|
||||
import json
|
||||
import os
|
||||
import random
|
||||
import sys
|
||||
from pathlib import Path
|
||||
from shutil import rmtree
|
||||
from subprocess import PIPE, Popen
|
||||
from tempfile import mkdtemp
|
||||
from typing import Dict
|
||||
from urllib.parse import urlencode
|
||||
|
||||
from OpenSSL import SSL
|
||||
|
|
@ -20,7 +22,6 @@ from twisted.web.static import File
|
|||
from twisted.web.util import redirectTo
|
||||
|
||||
from scrapy.utils.python import to_bytes, to_unicode
|
||||
from scrapy.utils.test import get_testenv
|
||||
|
||||
|
||||
def getarg(request, name, default=None, type=None):
|
||||
|
|
@ -32,6 +33,16 @@ def getarg(request, name, default=None, type=None):
|
|||
return default
|
||||
|
||||
|
||||
def get_mockserver_env() -> Dict[str, str]:
|
||||
"""Return a OS environment dict suitable to run mockserver processes."""
|
||||
|
||||
tests_path = Path(__file__).parent.parent
|
||||
pythonpath = str(tests_path) + os.pathsep + os.environ.get("PYTHONPATH", "")
|
||||
env = os.environ.copy()
|
||||
env["PYTHONPATH"] = pythonpath
|
||||
return env
|
||||
|
||||
|
||||
# most of the following resources are copied from twisted.web.test.test_webclient
|
||||
class ForeverTakingResource(resource.Resource):
|
||||
"""
|
||||
|
|
@ -264,7 +275,7 @@ class MockServer:
|
|||
self.proc = Popen(
|
||||
[sys.executable, "-u", "-m", "tests.mockserver", "-t", "http"],
|
||||
stdout=PIPE,
|
||||
env=get_testenv(),
|
||||
env=get_mockserver_env(),
|
||||
)
|
||||
http_address = self.proc.stdout.readline().strip().decode("ascii")
|
||||
https_address = self.proc.stdout.readline().strip().decode("ascii")
|
||||
|
|
@ -308,7 +319,7 @@ class MockDNSServer:
|
|||
self.proc = Popen(
|
||||
[sys.executable, "-u", "-m", "tests.mockserver", "-t", "dns"],
|
||||
stdout=PIPE,
|
||||
env=get_testenv(),
|
||||
env=get_mockserver_env(),
|
||||
)
|
||||
self.host = "127.0.0.1"
|
||||
self.port = int(
|
||||
|
|
@ -331,7 +342,7 @@ class MockFTPServer:
|
|||
self.proc = Popen(
|
||||
[sys.executable, "-u", "-m", "tests.ftpserver", "-d", str(self.path)],
|
||||
stderr=PIPE,
|
||||
env=get_testenv(),
|
||||
env=get_mockserver_env(),
|
||||
)
|
||||
for line in self.proc.stderr:
|
||||
if b"starting FTP server" in line:
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import json
|
||||
import os
|
||||
import pstats
|
||||
import shutil
|
||||
import sys
|
||||
|
|
@ -14,6 +15,8 @@ from scrapy.utils.test import get_testenv
|
|||
class CmdlineTest(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.env = get_testenv()
|
||||
tests_path = Path(__file__).parent.parent
|
||||
self.env["PYTHONPATH"] += os.pathsep + str(tests_path.parent)
|
||||
self.env["SCRAPY_SETTINGS_MODULE"] = "tests.test_cmdline.settings"
|
||||
|
||||
def _execute(self, *new_args, **kwargs):
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import logging
|
||||
import os
|
||||
import platform
|
||||
import subprocess
|
||||
import sys
|
||||
|
|
@ -23,8 +24,8 @@ from scrapy.spiderloader import SpiderLoader
|
|||
from scrapy.utils.log import configure_logging, get_scrapy_root_handler
|
||||
from scrapy.utils.misc import load_object
|
||||
from scrapy.utils.spider import DefaultSpider
|
||||
from scrapy.utils.test import get_crawler, get_testenv
|
||||
from tests.mockserver import MockServer
|
||||
from scrapy.utils.test import get_crawler
|
||||
from tests.mockserver import MockServer, get_mockserver_env
|
||||
|
||||
|
||||
class BaseCrawlerTest(unittest.TestCase):
|
||||
|
|
@ -289,12 +290,16 @@ class CrawlerRunnerHasSpider(unittest.TestCase):
|
|||
|
||||
class ScriptRunnerMixin:
|
||||
script_dir: Path
|
||||
cwd = os.getcwd()
|
||||
|
||||
def run_script(self, script_name: str, *script_args):
|
||||
script_path = self.script_dir / script_name
|
||||
args = [sys.executable, str(script_path)] + list(script_args)
|
||||
p = subprocess.Popen(
|
||||
args, env=get_testenv(), stdout=subprocess.PIPE, stderr=subprocess.PIPE
|
||||
args,
|
||||
env=get_mockserver_env(),
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE,
|
||||
)
|
||||
stdout, stderr = p.communicate()
|
||||
return stderr.decode("utf-8")
|
||||
|
|
|
|||
|
|
@ -21,8 +21,6 @@ class MitmProxy:
|
|||
auth_pass = "scrapy"
|
||||
|
||||
def start(self):
|
||||
from scrapy.utils.test import get_testenv
|
||||
|
||||
script = """
|
||||
import sys
|
||||
from mitmproxy.tools.main import mitmdump
|
||||
|
|
@ -46,7 +44,6 @@ sys.exit(mitmdump())
|
|||
"--ssl-insecure",
|
||||
],
|
||||
stdout=PIPE,
|
||||
env=get_testenv(),
|
||||
)
|
||||
line = self.proc.stdout.readline().decode("utf-8")
|
||||
host_port = re.search(r"listening at http://([^:]+:\d+)", line).group(1)
|
||||
|
|
|
|||
Loading…
Reference in New Issue