Best Python code snippet using tox_python
test_venv.py
Source:test_venv.py  
...136    args = pcalls[0].args137    assert "--system-site-packages" not in map(str, args)138    assert "--no-site-packages" not in map(str, args)139def test_install_deps_wildcard(newmocksession):140    mocksession = newmocksession(141        [],142        """\143        [tox]144        distshare = {toxworkdir}/distshare145        [testenv:py123]146        deps=147            {distshare}/dep1-*148        """,149    )150    venv = mocksession.getvenv("py123")151    with mocksession.newaction(venv.name, "getenv") as action:152        tox_testenv_create(action=action, venv=venv)153        pcalls = mocksession._pcalls154        assert len(pcalls) == 1155        distshare = venv.envconfig.config.distshare156        distshare.ensure("dep1-1.0.zip")157        distshare.ensure("dep1-1.1.zip")158        tox_testenv_install_deps(action=action, venv=venv)159        assert len(pcalls) == 2160        args = pcalls[-1].args161        assert pcalls[-1].cwd == venv.envconfig.config.toxinidir162    assert py.path.local.sysfind("python") == args[0]163    assert ["-m", "pip"] == args[1:3]164    assert args[3] == "install"165    args = [arg for arg in args if str(arg).endswith("dep1-1.1.zip")]166    assert len(args) == 1167def test_install_deps_indexserver(newmocksession):168    mocksession = newmocksession(169        [],170        """\171        [tox]172        indexserver =173            abc = ABC174            abc2 = ABC175        [testenv:py123]176        deps=177            dep1178            :abc:dep2179            :abc2:dep3180        """,181    )182    venv = mocksession.getvenv("py123")183    with mocksession.newaction(venv.name, "getenv") as action:184        tox_testenv_create(action=action, venv=venv)185        pcalls = mocksession._pcalls186        assert len(pcalls) == 1187        pcalls[:] = []188        tox_testenv_install_deps(action=action, venv=venv)189        # two different index servers, two calls190        assert len(pcalls) == 3191        args = " ".join(pcalls[0].args)192        assert "-i " not in args193        assert "dep1" in args194        args = " ".join(pcalls[1].args)195        assert "-i ABC" in args196        assert "dep2" in args197        args = " ".join(pcalls[2].args)198        assert "-i ABC" in args199        assert "dep3" in args200def test_install_deps_pre(newmocksession):201    mocksession = newmocksession(202        [],203        """\204        [testenv]205        pip_pre=true206        deps=207            dep1208        """,209    )210    venv = mocksession.getvenv("python")211    with mocksession.newaction(venv.name, "getenv") as action:212        tox_testenv_create(action=action, venv=venv)213    pcalls = mocksession._pcalls214    assert len(pcalls) == 1215    pcalls[:] = []216    tox_testenv_install_deps(action=action, venv=venv)217    assert len(pcalls) == 1218    args = " ".join(pcalls[0].args)219    assert "--pre " in args220    assert "dep1" in args221def test_installpkg_indexserver(newmocksession, tmpdir):222    mocksession = newmocksession(223        [],224        """\225        [tox]226        indexserver =227            default = ABC228        """,229    )230    venv = mocksession.getvenv("python")231    pcalls = mocksession._pcalls232    p = tmpdir.ensure("distfile.tar.gz")233    installpkg(venv, p)234    # two different index servers, two calls235    assert len(pcalls) == 1236    args = " ".join(pcalls[0].args)237    assert "-i ABC" in args238def test_install_recreate(newmocksession, tmpdir):239    pkg = tmpdir.ensure("package.tar.gz")240    mocksession = newmocksession(241        ["--recreate"],242        """\243        [testenv]244        deps=xyz245        """,246    )247    venv = mocksession.getvenv("python")248    with mocksession.newaction(venv.name, "update") as action:249        venv.update(action)250        installpkg(venv, pkg)251        mocksession.report.expect("verbosity0", "*create*")252        venv.update(action)253        mocksession.report.expect("verbosity0", "*recreate*")254def test_install_sdist_extras(newmocksession):255    mocksession = newmocksession(256        [],257        """\258        [testenv]259        extras = testing260            development261        """,262    )263    venv = mocksession.getvenv("python")264    with mocksession.newaction(venv.name, "getenv") as action:265        tox_testenv_create(action=action, venv=venv)266    pcalls = mocksession._pcalls267    assert len(pcalls) == 1268    pcalls[:] = []269    venv.installpkg("distfile.tar.gz", action=action)270    assert "distfile.tar.gz[testing,development]" in pcalls[-1].args271def test_develop_extras(newmocksession, tmpdir):272    mocksession = newmocksession(273        [],274        """\275        [testenv]276        extras = testing277            development278        """,279    )280    venv = mocksession.getvenv("python")281    with mocksession.newaction(venv.name, "getenv") as action:282        tox_testenv_create(action=action, venv=venv)283    pcalls = mocksession._pcalls284    assert len(pcalls) == 1285    pcalls[:] = []286    venv.developpkg(tmpdir, action=action)287    expected = "{}[testing,development]".format(tmpdir.strpath)288    assert expected in pcalls[-1].args289def test_env_variables_added_to_needs_reinstall(tmpdir, mocksession, newconfig, monkeypatch):290    tmpdir.ensure("setup.py")291    monkeypatch.setenv("TEMP_PASS_VAR", "123")292    monkeypatch.setenv("TEMP_NOPASS_VAR", "456")293    config = newconfig(294        [],295        """\296        [testenv:python]297        passenv = temp_pass_var298        setenv =299            CUSTOM_VAR = 789300        """,301    )302    mocksession.new_config(config)303    venv = mocksession.getvenv("python")304    with mocksession.newaction(venv.name, "hello") as action:305        venv._needs_reinstall(tmpdir, action)306    pcalls = mocksession._pcalls307    assert len(pcalls) == 2308    env = pcalls[0].env309    # should have access to setenv vars310    assert "CUSTOM_VAR" in env311    assert env["CUSTOM_VAR"] == "789"312    # should have access to passenv vars313    assert "TEMP_PASS_VAR" in env314    assert env["TEMP_PASS_VAR"] == "123"315    # should also have access to full invocation environment,316    # for backward compatibility, and to match behavior of venv.run_install_command()317    assert "TEMP_NOPASS_VAR" in env318    assert env["TEMP_NOPASS_VAR"] == "456"319def test_test_hashseed_is_in_output(newmocksession, monkeypatch):320    seed = "123456789"321    monkeypatch.setattr("tox.config.make_hashseed", lambda: seed)322    mocksession = newmocksession([], "")323    venv = mocksession.getvenv("python")324    with mocksession.newaction(venv.name, "update") as action:325        venv.update(action)326    tox.venv.tox_runtest_pre(venv)327    mocksession.report.expect("verbosity0", "run-test-pre: PYTHONHASHSEED='{}'".format(seed))328def test_test_runtests_action_command_is_in_output(newmocksession):329    mocksession = newmocksession(330        [],331        """\332        [testenv]333        commands = echo foo bar334        """,335    )336    venv = mocksession.getvenv("python")337    with mocksession.newaction(venv.name, "update") as action:338        venv.update(action)339    venv.test()340    mocksession.report.expect("verbosity0", "*run-test:*commands?0? | echo foo bar")341def test_install_error(newmocksession):342    mocksession = newmocksession(343        ["--recreate"],344        """\345        [testenv]346        deps=xyz347        commands=348            qwelkqw349        """,350    )351    venv = mocksession.getvenv("python")352    venv.test()353    mocksession.report.expect("error", "*not find*qwelkqw*")354    assert venv.status == "commands failed"355def test_install_command_not_installed(newmocksession):356    mocksession = newmocksession(357        ["--recreate"],358        """\359        [testenv]360        commands=361            pytest362        """,363    )364    venv = mocksession.getvenv("python")365    venv.status = 0366    venv.test()367    mocksession.report.expect("warning", "*test command found but not*")368    assert venv.status == 0369def test_install_command_whitelisted(newmocksession):370    mocksession = newmocksession(371        ["--recreate"],372        """\373        [testenv]374        whitelist_externals = pytest375                              xy*376        commands=377            pytest378            xyz379        """,380    )381    venv = mocksession.getvenv("python")382    venv.test()383    mocksession.report.expect("warning", "*test command found but not*", invert=True)384    assert venv.status == "commands failed"385def test_install_command_not_installed_bash(newmocksession):386    mocksession = newmocksession(387        ["--recreate"],388        """\389        [testenv]390        commands=391            bash392        """,393    )394    venv = mocksession.getvenv("python")395    venv.test()396    mocksession.report.expect("warning", "*test command found but not*")397def test_install_python3(newmocksession):398    if not py.path.local.sysfind("python3") or tox.INFO.IS_PYPY:399        pytest.skip("needs cpython3")400    mocksession = newmocksession(401        [],402        """\403        [testenv:py123]404        basepython=python3405        deps=406            dep1407            dep2408        """,409    )410    venv = mocksession.getvenv("py123")411    with mocksession.newaction(venv.name, "getenv") as action:412        tox_testenv_create(action=action, venv=venv)413        pcalls = mocksession._pcalls414        assert len(pcalls) == 1415        args = pcalls[0].args416        assert str(args[2]) == "venv"417        pcalls[:] = []418    with mocksession.newaction(venv.name, "hello") as action:419        venv._install(["hello"], action=action)420        assert len(pcalls) == 1421    args = pcalls[0].args422    assert py.path.local.sysfind("python") == args[0]423    assert ["-m", "pip"] == args[1:3]424    for _ in args:425        assert "--download-cache" not in args, args426class TestCreationConfig:427    def test_basic(self, newconfig, mocksession, tmpdir):428        config = newconfig([], "")429        mocksession.new_config(config)430        venv = mocksession.getvenv("python")431        cconfig = venv._getliveconfig()432        assert cconfig.matches(cconfig)433        path = tmpdir.join("configdump")434        cconfig.writeconfig(path)435        newconfig = CreationConfig.readconfig(path)436        assert newconfig.matches(cconfig)437        assert cconfig.matches(newconfig)438    def test_matchingdependencies(self, newconfig, mocksession):439        config = newconfig(440            [],441            """\442            [testenv]443            deps=abc444            """,445        )446        mocksession.new_config(config)447        venv = mocksession.getvenv("python")448        cconfig = venv._getliveconfig()449        config = newconfig(450            [],451            """\452            [testenv]453            deps=xyz454            """,455        )456        mocksession.new_config(config)457        venv = mocksession.getvenv("python")458        otherconfig = venv._getliveconfig()459        assert not cconfig.matches(otherconfig)460    def test_matchingdependencies_file(self, newconfig, mocksession):461        config = newconfig(462            [],463            """\464            [tox]465            distshare={toxworkdir}/distshare466            [testenv]467            deps=abc468                 {distshare}/xyz.zip469            """,470        )471        xyz = config.distshare.join("xyz.zip")472        xyz.ensure()473        mocksession.new_config(config)474        venv = mocksession.getvenv("python")475        cconfig = venv._getliveconfig()476        assert cconfig.matches(cconfig)477        xyz.write("hello")478        newconfig = venv._getliveconfig()479        assert not cconfig.matches(newconfig)480    def test_matchingdependencies_latest(self, newconfig, mocksession):481        config = newconfig(482            [],483            """\484            [tox]485            distshare={toxworkdir}/distshare486            [testenv]487            deps={distshare}/xyz-*488            """,489        )490        config.distshare.ensure("xyz-1.2.0.zip")491        xyz2 = config.distshare.ensure("xyz-1.2.1.zip")492        mocksession.new_config(config)493        venv = mocksession.getvenv("python")494        cconfig = venv._getliveconfig()495        sha256, path = cconfig.deps[0]496        assert path == xyz2497        assert sha256 == path.computehash("sha256")498    def test_python_recreation(self, tmpdir, newconfig, mocksession):499        pkg = tmpdir.ensure("package.tar.gz")500        config = newconfig(["-v"], "")501        mocksession.new_config(config)502        venv = mocksession.getvenv("python")503        create_config = venv._getliveconfig()504        with mocksession.newaction(venv.name, "update") as action:505            venv.update(action)506            assert not venv.path_config.check()507        installpkg(venv, pkg)508        assert venv.path_config.check()509        assert mocksession._pcalls510        args1 = map(str, mocksession._pcalls[0].args)511        module = "venv" if use_builtin_venv(venv) else "virtualenv"512        assert module in " ".join(args1)513        mocksession.report.expect("*", "*create*")514        # modify config and check that recreation happens515        mocksession._clearmocks()516        with mocksession.newaction(venv.name, "update") as action:517            venv.update(action)518            mocksession.report.expect("*", "*reusing*")519            mocksession._clearmocks()520        with mocksession.newaction(venv.name, "update") as action:521            create_config.base_resolved_python_path = py.path.local("balla")522            create_config.writeconfig(venv.path_config)523            venv.update(action)524            mocksession.report.expect("verbosity0", "*recreate*")525    def test_dep_recreation(self, newconfig, mocksession):526        config = newconfig([], "")527        mocksession.new_config(config)528        venv = mocksession.getvenv("python")529        with mocksession.newaction(venv.name, "update") as action:530            venv.update(action)531            cconfig = venv._getliveconfig()532            cconfig.deps[:] = [("1" * 32, "xyz.zip")]533            cconfig.writeconfig(venv.path_config)534            mocksession._clearmocks()535        with mocksession.newaction(venv.name, "update") as action:536            venv.update(action)537            mocksession.report.expect("*", "*recreate*")538    def test_develop_recreation(self, newconfig, mocksession):539        config = newconfig([], "")540        mocksession.new_config(config)541        venv = mocksession.getvenv("python")542        with mocksession.newaction(venv.name, "update") as action:543            venv.update(action)544            cconfig = venv._getliveconfig()545            cconfig.usedevelop = True546            cconfig.writeconfig(venv.path_config)547            mocksession._clearmocks()548        with mocksession.newaction(venv.name, "update") as action:549            venv.update(action)550            mocksession.report.expect("verbosity0", "*recreate*")551class TestVenvTest:552    def test_envbindir_path(self, newmocksession, monkeypatch):553        monkeypatch.setenv("PIP_RESPECT_VIRTUALENV", "1")554        mocksession = newmocksession(555            [],556            """\557            [testenv:python]558            commands=abc559            """,560        )561        venv = mocksession.getvenv("python")562        with mocksession.newaction(venv.name, "getenv") as action:563            monkeypatch.setenv("PATH", "xyz")564            sysfind_calls = []565            monkeypatch.setattr(566                "py.path.local.sysfind",567                classmethod(lambda *args, **kwargs: sysfind_calls.append(kwargs) or 0 / 0),568            )569            with pytest.raises(ZeroDivisionError):570                venv._install(list("123"), action=action)571            assert sysfind_calls.pop()["paths"] == [venv.envconfig.envbindir]572            with pytest.raises(ZeroDivisionError):573                venv.test(action)574            assert sysfind_calls.pop()["paths"] == [venv.envconfig.envbindir]575            with pytest.raises(ZeroDivisionError):576                venv.run_install_command(["qwe"], action=action)577            assert sysfind_calls.pop()["paths"] == [venv.envconfig.envbindir]578            monkeypatch.setenv("PIP_RESPECT_VIRTUALENV", "1")579            monkeypatch.setenv("PIP_REQUIRE_VIRTUALENV", "1")580            monkeypatch.setenv("__PYVENV_LAUNCHER__", "1")581            prev_pcall = venv._pcall582            def collect(*args, **kwargs):583                env = kwargs["env"]584                assert "PIP_RESPECT_VIRTUALENV" not in env585                assert "PIP_REQUIRE_VIRTUALENV" not in env586                assert "__PYVENV_LAUNCHER__" not in env587                assert env["PIP_USER"] == "0"588                assert env["PIP_NO_DEPS"] == "0"589                return prev_pcall(*args, **kwargs)590            monkeypatch.setattr(venv, "_pcall", collect)591            with pytest.raises(ZeroDivisionError):592                venv.run_install_command(["qwe"], action=action)593    def test_pythonpath_remove(self, newmocksession, monkeypatch, caplog):594        monkeypatch.setenv("PYTHONPATH", "/my/awesome/library")595        mocksession = newmocksession(596            [],597            """\598            [testenv:python]599            commands=abc600            """,601        )602        venv = mocksession.getvenv("python")603        with mocksession.newaction(venv.name, "getenv") as action:604            venv.run_install_command(["qwe"], action=action)605        mocksession.report.expect("warning", "*Discarding $PYTHONPATH from environment*")606        pcalls = mocksession._pcalls607        assert len(pcalls) == 1608        assert "PYTHONPATH" not in pcalls[0].env609    def test_pythonpath_keep(self, newmocksession, monkeypatch, caplog):610        # passenv = PYTHONPATH allows PYTHONPATH to stay in environment611        monkeypatch.setenv("PYTHONPATH", "/my/awesome/library")612        mocksession = newmocksession(613            [],614            """\615            [testenv:python]616            commands=abc617            passenv = PYTHONPATH618            """,619        )620        venv = mocksession.getvenv("python")621        with mocksession.newaction(venv.name, "getenv") as action:622            venv.run_install_command(["qwe"], action=action)623        mocksession.report.not_expect("warning", "*Discarding $PYTHONPATH from environment*")624        assert "PYTHONPATH" in os.environ625        pcalls = mocksession._pcalls626        assert len(pcalls) == 1627        assert pcalls[0].env["PYTHONPATH"] == "/my/awesome/library"628    def test_pythonpath_empty(self, newmocksession, monkeypatch, caplog):629        monkeypatch.setenv("PYTHONPATH", "")630        mocksession = newmocksession(631            [],632            """\633            [testenv:python]634            commands=abc635            """,636        )637        venv = mocksession.getvenv("python")638        with mocksession.newaction(venv.name, "getenv") as action:639            venv.run_install_command(["qwe"], action=action)640        if sys.version_info < (3, 4):641            mocksession.report.expect("warning", "*Discarding $PYTHONPATH from environment*")642        else:643            with pytest.raises(AssertionError):644                mocksession.report.expect("warning", "*Discarding $PYTHONPATH from environment*")645        pcalls = mocksession._pcalls646        assert len(pcalls) == 1647        assert "PYTHONPATH" not in pcalls[0].env648def test_env_variables_added_to_pcall(tmpdir, mocksession, newconfig, monkeypatch):649    monkeypatch.delenv("PYTHONPATH", raising=False)650    pkg = tmpdir.ensure("package.tar.gz")651    monkeypatch.setenv("X123", "123")652    monkeypatch.setenv("YY", "456")653    config = newconfig(654        [],655        """\656        [testenv:python]657        commands=python -V658        passenv = x123659        setenv =660            ENV_VAR = value661            PYTHONPATH = value662        """,663    )664    mocksession._clearmocks()665    mocksession.new_config(config)666    venv = mocksession.getvenv("python")667    installpkg(venv, pkg)668    venv.test()669    pcalls = mocksession._pcalls670    assert len(pcalls) == 2671    for x in pcalls:672        env = x.env673        assert env is not None674        assert "ENV_VAR" in env675        assert env["ENV_VAR"] == "value"676        assert env["VIRTUAL_ENV"] == str(venv.path)677        assert env["X123"] == "123"678        assert "PYTHONPATH" in env679        assert env["PYTHONPATH"] == "value"680    # all env variables are passed for installation681    assert pcalls[0].env["YY"] == "456"682    assert "YY" not in pcalls[1].env683    assert {"ENV_VAR", "VIRTUAL_ENV", "PYTHONHASHSEED", "X123", "PATH"}.issubset(pcalls[1].env)684    # setenv does not trigger PYTHONPATH warnings685    mocksession.report.not_expect("warning", "*Discarding $PYTHONPATH from environment*")686    # for e in os.environ:687    #    assert e in env688def test_installpkg_no_upgrade(tmpdir, newmocksession):689    pkg = tmpdir.ensure("package.tar.gz")690    mocksession = newmocksession([], "")691    venv = mocksession.getvenv("python")692    venv.just_created = True693    venv.envconfig.envdir.ensure(dir=1)694    installpkg(venv, pkg)695    pcalls = mocksession._pcalls696    assert len(pcalls) == 1697    assert pcalls[0].args[1:-1] == ["-m", "pip", "install", "--exists-action", "w"]698@pytest.mark.parametrize("count, level", [(0, 0), (1, 0), (2, 0), (3, 1), (4, 2), (5, 3), (6, 3)])699def test_install_command_verbosity(tmpdir, newmocksession, count, level):700    pkg = tmpdir.ensure("package.tar.gz")701    mock_session = newmocksession(["-{}".format("v" * count)], "")702    env = mock_session.getvenv("python")703    env.just_created = True704    env.envconfig.envdir.ensure(dir=1)705    installpkg(env, pkg)706    pcalls = mock_session._pcalls707    assert len(pcalls) == 1708    expected = ["-m", "pip", "install", "--exists-action", "w"] + (["-v"] * level)709    assert pcalls[0].args[1:-1] == expected710def test_installpkg_upgrade(newmocksession, tmpdir):711    pkg = tmpdir.ensure("package.tar.gz")712    mocksession = newmocksession([], "")713    venv = mocksession.getvenv("python")714    assert not hasattr(venv, "just_created")715    installpkg(venv, pkg)716    pcalls = mocksession._pcalls717    assert len(pcalls) == 1718    index = pcalls[0].args.index(pkg.basename)719    assert index >= 0720    assert "-U" in pcalls[0].args[:index]721    assert "--no-deps" in pcalls[0].args[:index]722def test_run_install_command(newmocksession):723    mocksession = newmocksession([], "")724    venv = mocksession.getvenv("python")725    venv.just_created = True726    venv.envconfig.envdir.ensure(dir=1)727    with mocksession.newaction(venv.name, "hello") as action:728        venv.run_install_command(packages=["whatever"], action=action)729    pcalls = mocksession._pcalls730    assert len(pcalls) == 1731    args = pcalls[0].args732    assert py.path.local.sysfind("python") == args[0]733    assert ["-m", "pip"] == args[1:3]734    assert "install" in args735    env = pcalls[0].env736    assert env is not None737def test_run_custom_install_command(newmocksession):738    mocksession = newmocksession(739        [],740        """\741        [testenv]742        install_command=easy_install {opts} {packages}743        """,744    )745    venv = mocksession.getvenv("python")746    venv.just_created = True747    venv.envconfig.envdir.ensure(dir=1)748    with mocksession.newaction(venv.name, "hello") as action:749        venv.run_install_command(packages=["whatever"], action=action)750    pcalls = mocksession._pcalls751    assert len(pcalls) == 1752    assert "easy_install" in pcalls[0].args[0]753    assert pcalls[0].args[1:] == ["whatever"]754def test_command_relative_issue36(newmocksession, tmpdir, monkeypatch):755    mocksession = newmocksession(756        [],757        """\758        [testenv]759        """,760    )761    x = tmpdir.ensure("x")762    venv = mocksession.getvenv("python")763    x2 = venv.getcommandpath("./x", cwd=tmpdir)764    assert x == x2765    mocksession.report.not_expect("warning", "*test command found but not*")766    x3 = venv.getcommandpath("/bin/bash", cwd=tmpdir)767    assert x3 == "/bin/bash"768    mocksession.report.not_expect("warning", "*test command found but not*")769    monkeypatch.setenv("PATH", str(tmpdir))770    x4 = venv.getcommandpath("x", cwd=tmpdir)771    assert x4.endswith(os.sep + "x")772    mocksession.report.expect("warning", "*test command found but not*")773def test_ignore_outcome_failing_cmd(newmocksession):774    mocksession = newmocksession(775        [],776        """\777        [testenv]778        commands=testenv_fail779        ignore_outcome=True780        """,781    )782    venv = mocksession.getvenv("python")783    venv.test()784    assert venv.status == "ignored failed command"785    mocksession.report.expect("warning", "*command failed but result from testenv is ignored*")786def test_tox_testenv_create(newmocksession):787    log = []788    class Plugin:789        @tox.hookimpl790        def tox_testenv_create(self, action, venv):791            assert isinstance(action, tox.session.Action)792            assert isinstance(venv, VirtualEnv)793            log.append(1)794        @tox.hookimpl795        def tox_testenv_install_deps(self, action, venv):796            assert isinstance(action, tox.session.Action)797            assert isinstance(venv, VirtualEnv)798            log.append(2)799    mocksession = newmocksession(800        [],801        """\802        [testenv]803        commands=testenv_fail804        ignore_outcome=True805        """,806        plugins=[Plugin()],807    )808    venv = mocksession.getvenv("python")809    with mocksession.newaction(venv.name, "getenv") as action:810        venv.update(action=action)811    assert log == [1, 2]812def test_tox_testenv_pre_post(newmocksession):813    log = []814    class Plugin:815        @tox.hookimpl816        def tox_runtest_pre(self):817            log.append("started")818        @tox.hookimpl819        def tox_runtest_post(self):820            log.append("finished")821    mocksession = newmocksession(822        [],823        """\824        [testenv]825        commands=testenv_fail826        """,827        plugins=[Plugin()],828    )829    venv = mocksession.getvenv("python")830    venv.status = None831    assert log == []832    runtestenv(venv, venv.envconfig.config)833    assert log == ["started", "finished"]834@pytest.mark.skipif("sys.platform == 'win32'", reason="no shebang on Windows")835def test_tox_testenv_interpret_shebang_empty_instance(tmpdir):...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
