Programim dhe zhvillim, javascript, python, php, html

Si të menaxhoni sys.path në pytest që po ekzekuton testet e pranimit të konfigurimit të sistemeve

Ne kemi një kornizë testimi që e zgjeron pak pytestin dhe e mbështjell me shumë Ansible për të ekzekutuar testet e pranimit të konfigurimit të sistemeve për të verifikuar që infrastruktura jonë është instaluar dhe konfiguruar saktë dhe duket se po funksionon në mënyrë të arsyeshme. Ai e bën këtë duke përdorur Ansible për të paketuar testet, për t'i dërguar ato në një host të largët, më pas i shpaketon ato në një virtualenv për të ekzekutuar testet brenda. Testet e shumicës së njerëzve deri tani përfshijnë ekzekutimin e komandave në hostin në distancë për të verifikuar se funksionojnë.

Një pjesë e asaj që po përpiqem të testoj është nëse disa module Python janë instaluar dhe funksionojnë apo jo, dhe nëse janë, përdorni ato në teste të mëtejshme. Por unë jam disi i penguar në këtë, pasi virtualenv (me të drejtë) fsheh të gjitha modulet e instaluara të Python.

Deri më tani, strategjia ime është të ekzekutoj një komandë / skript të vogël të guaskës subprocess që çaktivizon të gjitha variablat e mjedisit të lidhur me virtualenv dhe më pas ekzekuton një skript të shkurtër Python duke përdorur sistemin python që turshi sys.path e tij dhe e hedh atë në stdout.

Por atëherë nuk jam i sigurt për hapin tjetër. Cila është mënyra e duhur për të ngatërruar me sys.path brenda një testi apo pajisjeje? A do ta rivendosë pytest pasi pajisja të mos jetë më e nevojshme? Çfarë bën pytest me modulet që importon një test? A i heq ato nga sys.modulet pas kryerjes së testit?

11.03.2019

Përgjigjet:


1

Epo, nuk mora një përgjigje, kështu që dola me këtë pajisje për të vendosur conftest.py:

@pytest.fixture(scope="module")
def need_system_libraries():
    pycmd = 'unset VIRTUAL_ENV PYTHONPATH; exec {pyexec} -c '\
            '"import sys, pickle; sys.stdout.write(pickle.dumps(sys.path, 0))"'

    pycmd = pycmd.format(pyexec='/usr/bin/python3.7')
    _, stdout, _ = testlib.execute(pycmd)
    system_path = pickle.loads(stdout)
    # Prune any paths from the system_path that already exist in sys.path or     
    # are relative (not absolute) paths.                                         
    newsyspaths = frozenset(system_path) - frozenset(sys.path)
    newsyspaths = frozenset(path for path in newsyspaths
                            if os.path.isabs(path))
    # A set isn't ordered. Put difference back in the same order as the          
    # elements appeared in system_path. (Not needed in Python >= 3.6).           
    newsyspaths = [path for path in system_path if x in newsyspaths]
    # Save a copy of the path so we can restore it.                              
    saved_syspath = sys.path.copy()
    sys.path.extend(newsyspaths)
    # This fixture modifies the environment itself, and so doesn't need to       
    # return a value.                                                            
    yield None
    # The yield will come back when this fixture is no longer needed, so         
    # restore sys.path back to its original value. Do this by copying elements   
    # back into original sys.path in case the identity of sys.path is important  
    # somewhere deep in the bowels of Python.                                    
    sys.path[:] = saved_syspath
20.03.2019
Materiale të reja

Masterclass Coroutines: Kapitulli-3: Anulimi i korutinave dhe trajtimi i përjashtimeve.
Mirë se vini në udhëzuesin gjithëpërfshirës mbi Kotlin Coroutines! Në këtë seri artikujsh, unë do t'ju çoj në një udhëtim magjepsës, duke filluar nga bazat dhe gradualisht duke u thelluar në..

Faketojeni derisa ta arrini me të dhënat false
A e gjeni ndonjëherë veten duke ndërtuar një aplikacion të ri dhe keni nevojë për të dhëna testimi që duken dhe duken më realiste ose një grup i madh të dhënash për performancën e ngarkesës...

Si të përdorni kërkesën API në Python
Kërkesë API në GitHub për të marrë depot e përdoruesve duke përdorur Python. Në këtë artikull, unë shpjegoj procesin hap pas hapi për të trajtuar një kërkesë API për të marrë të dhëna nga..

Një udhëzues hap pas hapi për të zotëruar React
Në këtë artikull, do të mësoni se si të krijoni aplikacionin React, do të mësoni se si funksionon React dhe konceptet thelbësore që duhet të dini për të ndërtuar aplikacione React. Learning..

AI dhe Psikologjia — Pjesa 2
Në pjesën 2 të serisë sonë të AI dhe Psikologji ne diskutojmë se si makineritë mbledhin dhe përpunojnë të dhëna për të mësuar emocione dhe ndjenja të ndryshme në mendjen e njeriut, duke ndihmuar..

Esencialet e punës ditore të kodit tim VS
Shtesat e mia të preferuara - Git Graph 💹 Kjo shtesë është vërtet e mahnitshme, e përdor përpara se të filloj të punoj për të kontrolluar dy herë ndryshimet dhe degët më të fundit, mund të..

Pse Python? Zbulimi i fuqisë së gjithanshme të një gjiganti programues
Në peizazhin gjithnjë në zhvillim të gjuhëve të programimit, Python është shfaqur si një forcë dominuese. Rritja e tij meteorike nuk është rastësi. Joshja e Python qëndron në thjeshtësinë,..