Ian The following is still useful after more than a year. Thanks !!
I made some modifications - mostly my specific paths before calling run_pytest, and my run_test.py is in scripts folder rather than bin. I'm getting an error : NameError: name 'db' is not defined I'm running it as : python web2py.py -S myapp -M -R applications/myapp/scripts/run_tests.py Any ideas ? -Mandar On Monday, December 17, 2012 10:11:13 PM UTC+5:30, Ian W. Scott wrote: > > After a bit of hacking I put together a working test runner for pytest. > Here it is: > > """ > Run this app's tests via py.test > > place this file in applications/<appname>/bin/ > > run with: python <your web2py dir>/web2py.py -S paideia -M -R > applications/<appname>/bin/runtest.py > """ > import os > import sys > import pytest > > def run_pytest(w2p_dir, test_dir, app_name): > if os.name == 'nt': > errlist = (WindowsError,ValueError,SystemExit) > else: > errlist = (OSError,ValueError,SystemExit) > > try: > test_dir = os.path.join(w2p_dir, 'applications', app_name,test_dir > ) > if test_dir not in sys.path: > sys.path.append(test_dir) # to support imports from current > folder in the testfiles > # modules are applications/[app_name]/modules > modules_path = os.path.join('applications', app_name, 'modules') > if modules_path not in sys.path: > sys.path.append(modules_path) # to support imports from > modules folder > if 'site-packages' not in sys.path: > sys.path.append('site-packages') # support imports from > web2py/site-packages > pytest.main([test_dir]) # run pytest programmatically > > except Exception, e: > print type(e), e > > if __name__=='__main__': > run_pytest(<your web2py directory>, <your test folder>, <your appname > >) > > I'll post a slice to w2py slices with this code as well and post the file > in a github repo. I'm not a brilliant programmer, so I'm sure others might > have improvements to suggest (esp. since right now you have to configure > things in the test runner file itself). But it's a working start. > > > On Wednesday, December 5, 2012 3:06:45 PM UTC-5, Ian W. Scott wrote: >> >> [edit: sorry, I forgot the runtest.py attachment before.] >> I'm trying to use pytest (instead of unittest) to do unit testing for a >> web2py app. I've written a script (attached: runtest.py) to launch py.test, >> which then finds and executes my test files. I run this launcher script in >> a web2py environment like this: >> >> python ~/web/web2py/web2py.py -S paideia -M -R >> applications/paideia/bin/runtest.py >> >> The problem is that when I try to import gluon or any of my app's custom >> modules (where the classes under test live) I get an import error. >> >> This is particularly strange since my runtest.py explicitly adds the app >> modules folder to sys.path (this is mostly cribbed from the testrunner.py >> on web2py slices). But my grasp of the w2p environment and running >> subprocesses is weak at best. (Case in point, testrunner.py passes >> globals() to the test files using execfile(testfile, globals()) but I >> haven't figured out yet how to get pytest to pick up those globals, since >> it doesn't allow me to execute the test files directly.) >> >> Any help is much appreciated. If we can get this working I think it would >> be a help, since some of pytest's functions (e.g., parameterized fixtures >> and automatic fixture clean-up) are pretty powerful. >> >> -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.