Here's some more for ya. I got SeleniumRC working in a reasonable fashion. Here's how you do it: 1) Build your test with Selenium IDE, Save it as a Python Unit test (the IDE will write the source code for you) 2) Download selenium rc server. Put the 'selenium-server.jar' and the attached seleniumtest.py in site-packages (for now). 2.5) Don't forget to install a recent version of Java and the selenium Python module ('easy-install selenium'). 3) In your test from step one, import the seleniumtest module and change: unittest.main() to: seleniumtest.runInSeleniumRC(unittest.main)()
Caveats for now: - I can't get Firefox or Chrome to work, the tests will only work in IE and Opera for me. I haven't tried Safari. - After running a test, my little module doesn't appropriately kill (at least on windows) the seleniumRC server, so you'll have to kill that manually. (I would appreciate any tips on this.) I put my test in /web2py/applications/init/tests/Test_Login_Process.py and I can run it just fine from there. This test only accesses the webpage side of things, so it does not need to be run from a web2py shell. However, you could very easily add controller-level testing to it and run it from the web2py shell. -tim yarko wrote: > Thanks for all this, Timbo! > > Looking forward to hearing more on your experience, thoughts with > this. > > Yarko > > On Oct 19, 9:54 am, Timbo <[EMAIL PROTECTED]> wrote: > >> Since the start of this thread, I've only just looked into using >> Selenium RC and how to integrate that with web2py. I haven't come up >> with a "good" solution yet, but I'll keep you posted. >> >> How does selenium compare with other products? I haven't used >> anything else, but a cursory look at the two mentioned, shows Selenium >> as being more flexible/powerful than twill and more cross-browser than >> TestGen4Web. >> >> How I use selenium now is I've downloaded selenium core and put it in >> my static files (it's just a few webpages and lots of javascript). I >> have a test script that runs through all possible combinations of how >> logging into my website should behave. >> >> How has selenium helped my web dev? Easy question, it speeds up >> testing by magnitudes and makes testing less boring and more >> thorough. Also it gives you a CYA factor for when someone says >> something doesn't work right. All you have to do is show them the >> test. If you haven't tested a particular aspect of something, it will >> become apparent rather quickly. The solution is to add that >> particular regression to your test script and in no time, you'll have >> an extensive battery of tests for your webapp. >> >> Web app testers such as Selenium do not only test the View...however, >> it is through the view that they do their testing. In a true MVC >> model, the Controller is the only thing that can be tested since it is >> the only place where logic should exist in the process. However, most >> developers have views that show things differently based on different >> input from the controller. So we have logic in our views as well. It >> goes without saying that certain behaviors in the controller produce >> certain manifestations in the corresponding view. For example, in my >> login application, if the user enters an incorrect password, it >> returns with a flash-message based on how it is incorrect (illegal >> characters, no password supplied, etc.). This flash is testable (via >> Selenium or others) and it is testing both the view logic and the >> controller logic. Hence, we can use Selenium to test both the >> controller and the view. Models don't possess logic in themselves >> (unless you want to test constraints but that's silly). >> >> Selenium core can only run javascript and manipulate a browser. For >> that reason, it cannot set application state without you providing a >> web-facing front-end to facilitate that (if you do, be wary of >> security concerns). Selenium RC, can run as a normal Python unittest >> and could therefore manipulate application state when run from the >> web2py shell as Massimo pointed out. I'm going to look more into this >> on Monday. >> >> @yarko: >> The Selenium RC server is the only portion written in Java and that is >> only necessary for tests written in languages other than HTML >> Selenese. You could make tests via the IDE and run them purely with >> Selenium core without having to mess with Java at all. Actually, I'd >> like to find a way to cleanly start/stop Selenium RC Server from >> web2py for good integrated testing. I'll let you know. But if you >> want to get started with it, download Selenium Core and the IDE and >> get going. >> >> =) >> >> On Oct 18, 11:15 am, morningovermidnight <[EMAIL PROTECTED]> >> wrote: >> >> >>> Thanks for pointing me to selenium (http://selenium.openqa.org/). It >>> looks great. I've also seen some other automated web testing soultions >>> such as twill (http://twill.idyll.org/) and TestGen4Web (http:// >>> developer.spikesource.com/wiki/index.php?title=Projects:TestGen4Web). >>> If you don't mind, could you give me a scenario of how you test your >>> web application with selenium ( selenium rc in particular) and how >>> testing with selenium has helped your web dev? >>> >>> I ask because honestly i am still on the fence about whether or not to >>> implement something such as selenium, or twill, or TestGen4Web. They >>> all seem to run tests well, but -- and correct me if i'm wrong -- when >>> thinking about the MVC architecture, it seems all of these only test >>> the V, the view. You know, testing to see that a page displayed, that >>> a link is present, or that a page contains some text. And while >>> testing the view is of course important, testing the MC part of >>> things, the application logic is just as important -- or at least a >>> testing solution is not complete if not all components, the M, the V, >>> and the C can be tested. Such a solution may be a combination of >>> several different products...but it is something definitely worth >>> looking into. Again, maybe I am only seeing Selenium on the >>> surface...is there a way for Selenium to test application logic (e.g. >>> setting the status of the website to "down for maintenance" then >>> verifying that no users can access the site via login or otherwise) ? >>> >>> On Oct 17, 10:25 am, Timothy Farrell <[EMAIL PROTECTED]> wrote: >>> >>>> Massimo, >>>> >>>> I implied in my previous post, that I don't use web2py's built-in >>>> testing. This brings me to a question...what is the "test" directory >>>> for under the application root? Since the admin interface only runs >>>> doctests, what would be a good way of running a unittest that I place in >>>> /applications/init/tests/ ? >>>> >>>> This sort of setup, combined with selenium-rc, would be the ultimate in >>>> web app testing (well almost, but it's really close). >>>> >>>> -tim >>>> >>>> Timothy Farrell wrote: >>>> >>>>> An excellent question. Testing in web2py is somewhat of a misnomer >>>>> since you use web2py to create web applications but you can only truly >>>>> test the models or controllers, not the product of all three MVC >>>>> components. However, there isn't really a better way unless Massimo >>>>> wants to include another external libary (and therefore dependency). >>>>> >>>>> What I use for webpage testing is Selenium. Selenium is a >>>>> javascript-based scripting/testing engine. However, it has Python >>>>> modules that you can use to write and invoke tests (which it translates >>>>> to Javascript and runs.) It even has a cool IDE plugin for Firefox >>>>> which makes test-making pretty easy. Take a look. >>>>> http://www.openqa.org/selenium/ >>>>> >>>>> -tim >>>>> >>>>> morningovermidnight wrote: >>>>> >>>>>> I've been reading earlier posts on unittests and using doctests in >>>>>> web2py. I have tried and run some successful doctests in web2py. >>>>>> However, it seems that the doctest is testing the value that my >>>>>> function returns, as it should, but is there a way to write a test to >>>>>> check an intermediate value in my function, say the value of a session >>>>>> variable that is stored but not returned to the view? >>>>>> >>>>>> Also, just curious, what are some of the solutions people here in the >>>>>> group are using for testing and for debugging web2py applications? >>>>>> >>>> tfarrell.vcf >>>> < 1KViewDownload >>>> > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "web2py Web Framework" group. To post to this group, send email to web2py@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/web2py?hl=en -~----------~----~----~----~------~----~------~--~---
''' A unittest wrapper to run Python Selenium tests in Selenium RC. ''' import os from subprocess import Popen import win32api import tempfile SELSERVER = 'selenium-server.jar' JAR = os.path.join(os.path.dirname(__file__), SELSERVER) PORT = 4444 def runInSeleniumRC( func, port = PORT, jar = JAR): ''' A function wrapper for unittest.main() that runs the unittest in a Selenium RC context. Example:: if __name__ == '__main__': seleniumtest.runInSeleniumRC(unittest.main, port=SELPORT)() @param func: The function to be wrapped. @param port: The port on which to run the Selenium RC server @param jar: Where the Selenium RC jar file resides ''' def runner(*args, **kwargs): _p = Popen(('java.exe' , '-jar' , jar , '-port' , str(port)) ,env = os.environ ,stdout = tempfile.TemporaryFile() ,stderr = tempfile.TemporaryFile() ) res = func(*args, **kwargs) if sys.platform == 'win32': win32api.TerminateProcess(int(_p._handle), -1) else: os.kill(_p.pid) return ret return runner
begin:vcard fn:Timothy Farrell n:Farrell;Timothy org:Statewide General Insurance Agency;IT adr:;;4501 East 31st Street;Tulsa;OK;74135;US email;internet:[EMAIL PROTECTED] title:Computer Guy tel;work:(918)492-1446 url:www.swgen.com version:2.1 end:vcard