Re: [TFUI] Test-driving ASP.NET
"Rob Park" <[email protected]> Wed, 7 Nov 2007 14:55:53 -0700
| Newsgroups | gmane.comp.programming.test-first-user-interfaces |
|---|---|
| Message-ID | <[email protected]> |
--zOKZVSOLz2FHRgs91FZoibnNntiB1xYKbNF0WGO Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Thanks! .rob. On 11/7/07, Rick Mugridge <[email protected]> wrote: > > Hi Rob, > > On the agile-testing list, I've been gathering info WRT acceptance > > tests for this and comparing WatiR, WatiN, Selenium, etc... > > > > So now I've noticed that our WatiN tests are very slow. (We have some > > NUnitAsp tests too which are worse.) We have 100s+ tests in FitNesse > > that take about 80s to run. And <10 in WatiN that take about 80s to > > run. > Yes, UI tests are very slow, whether it's web-based or GUI. That's one > of the big problems with them. Sometimes you're forced to decide on > timeout periods, and so have to balance speed against spurious fails. > The other problem is that the UI tests are verbose and tend to be > fragile under changes to the UI (I'm working on solving this problem). > > > > So I'm theorizing that Fit tests are really going to be the stronger > > set. It'll be 1 layer down, but as long as we do some sort of MVC/MVP > > or simple command pattern, we only won't be testing the client-side > > validation. I'm debating whether or not those tests are even worth > > writing? Especially if for example, we submit some form and the server > > side validates fields as well. > I recommend using Fit for testing below the UI layer. Then have some > UI-based tests that verify end-to-end behavior, so that pages are > 'wired" together correctly, etc. > > If the UI tests are too slow, you can run a two-stage build process, > with fast feedback from Fit storytests. I've also had success with > running lots of Selenium tests in parallel. > > > > Furthermore, for reuse of the validation logic, I'm leaning towards > > less JavaScript in the page for AJAX calls that get their results from > > the server. > That's a tricky one, as Fit is only good for validating logic on the > server. I'd use Javascript unit tests for testing the AJAX and > validation logic in Javascript. And, again, have some UI tests to check > end-to-end. > > Cheers, Rick > > PS, if GWT was used, the Java code intended for translation to > Javascript could be tested with Fit > > > > Thoughts? > > Comments? > > > > .rob. > > > [Non-text portions of this message have been removed] --zOKZVSOLz2FHRgs91FZoibnNntiB1xYKbNF0WGO Content-Type: text/html; charset=US-ASCII Content-Transfer-Encoding: 7bit <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> </head> <body style="background-color: #ffffff;"> <!--~-|**|PrettyHtmlStartT|**|-~--> <div id="ygrp-mlmsg" style="width:655px; position:relative;"> <div id="ygrp-msg" style="width: 490px; padding: 0 15px 0 0; float:left; z-index:1;"> <!--~-|**|PrettyHtmlEndT|**|-~--> <div id="ygrp-text"> <p>Thanks!<br> <br> .rob.<br> <br> On 11/7/07, Rick Mugridge <<a href="mailto:rick%40rimuresearch.com">rick@rimuresearch.<wbr>com</a>> wrote:<br> ><br> > Hi Rob,<br> > > On the agile-testing list, I've been gathering info WRT acceptance<br> > > tests for this and comparing WatiR, WatiN, Selenium, etc...<br> > ><br> > > So now I've noticed that our WatiN tests are very slow. (We have some<br> > > NUnitAsp tests too which are worse.) We have 100s+ tests in FitNesse<br> > > that take about 80s to run. And <10 in WatiN that take about 80s to<br> > > run.<br> > Yes, UI tests are very slow, whether it's web-based or GUI. That's one<br> > of the big problems with them. Sometimes you're forced to decide on<br> > timeout periods, and so have to balance speed against spurious fails.<br> > The other problem is that the UI tests are verbose and tend to be<br> > fragile under changes to the UI (I'm working on solving this problem).<br> > ><br> > > So I'm theorizing that Fit tests are really going to be the stronger<br> > > set. It'll be 1 layer down, but as long as we do some sort of MVC/MVP<br> > > or simple command pattern, we only won't be testing the client-side<br> > > validation. I'm debating whether or not those tests are even worth<br> > > writing? Especially if for example, we submit some form and the server<br> > > side validates fields as well.<br> > I recommend using Fit for testing below the UI layer. Then have some<br> > UI-based tests that verify end-to-end behavior, so that pages are<br> > 'wired" together correctly, etc.<br> ><br> > If the UI tests are too slow, you can run a two-stage build process,<br> > with fast feedback from Fit storytests. I've also had success with<br> > running lots of Selenium tests in parallel.<br> > ><br> > > Furthermore, for reuse of the validation logic, I'm leaning towards<br> > > less JavaScript in the page for AJAX calls that get their results from<br> > > the server.<br> > That's a tricky one, as Fit is only good for validating logic on the<br> > server. I'd use Javascript unit tests for testing the AJAX and<br> > validation logic in Javascript. And, again, have some UI tests to check<br> > end-to-end.<br> ><br> > Cheers, Rick<br> ><br> > PS, if GWT was used, the Java code intended for translation to<br> > Javascript could be tested with Fit<br> > ><br> > > Thoughts?<br> > > Comments?<br> > ><br> > > .rob.<br> ><br> > <br> ><br> <br> [Non-text portions of this message have been removed]<br> <br> </p> </div> <!--~-|**|PrettyHtmlStart|**|-~--> <span width="1" style="color: white;">__._,_.___</span> <!-- Start the section with Message In topic --> <div id="ygrp-actbar"> <span class="left"> <a href="http://groups.yahoo.com/group/TestFirstUserInterfaces/message/999;_ylc=X3oDMTMzcWFiZzNxBF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMxNzA1MDA3MjA3BG1zZ0lkAzEwMDEEc2VjA2Z0cgRzbGsDdnRwYwRzdGltZQMxMTk0NDcyNTU5BHRwY0lkAzk5OQ--"> Messages in this topic </a> (<span class="bld">0</span>) </span> <a href="http://groups.yahoo.com/group/TestFirstUserInterfaces/post;_ylc=X3oDMTJwcWwwNzNxBF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMxNzA1MDA3MjA3BG1zZ0lkAzEwMDEEc2VjA2Z0cgRzbGsDcnBseQRzdGltZQMxMTk0NDcyNTU5?act=reply&messageNum=1001"> <span class="bld"> Reply </span> (via web post) </a> | <a href="http://groups.yahoo.com/group/TestFirstUserInterfaces/post;_ylc=X3oDMTJlcXNrNmNnBF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMxNzA1MDA3MjA3BHNlYwNmdHIEc2xrA250cGMEc3RpbWUDMTE5NDQ3MjU1OQ--" class="bld"> Start a new topic </a> </div> <!------- Start Nav Bar ------> <!-- |**|begin egp html banner|**| --> <div id="ygrp-vitnav"> <a href="http://groups.yahoo.com/group/TestFirstUserInterfaces/messages;_ylc=X3oDMTJlMnNwc2NoBF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMxNzA1MDA3MjA3BHNlYwNmdHIEc2xrA21zZ3MEc3RpbWUDMTE5NDQ3MjU1OQ--">Messages</a> | <a href="http://groups.yahoo.com/group/TestFirstUserInterfaces/files;_ylc=X3oDMTJmZzR0ZHNmBF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMxNzA1MDA3MjA3BHNlYwNmdHIEc2xrA2ZpbGVzBHN0aW1lAzExOTQ0NzI1NTk-">Files</a> | <a href="http://groups.yahoo.com/group/TestFirstUserInterfaces/photos;_ylc=X3oDMTJlcmlocXVxBF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMxNzA1MDA3MjA3BHNlYwNmdHIEc2xrA3Bob3QEc3RpbWUDMTE5NDQ3MjU1OQ--">Photos</a> | <a href="http://groups.yahoo.com/group/TestFirstUserInterfaces/links;_ylc=X3oDMTJmanBoMGExBF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMxNzA1MDA3MjA3BHNlYwNmdHIEc2xrA2xpbmtzBHN0aW1lAzExOTQ0NzI1NTk-">Links</a> | <a href="http://groups.yahoo.com/group/TestFirstUserInterfaces/database;_ylc=X3oDMTJjOTBjNnAyBF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMxNzA1MDA3MjA3BHNlYwNmdHIEc2xrA2RiBHN0aW1lAzExOTQ0NzI1NTk-">Database</a> | <a href="http://groups.yahoo.com/group/TestFirstUserInterfaces/polls;_ylc=X3oDMTJmNDVwamhzBF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMxNzA1MDA3MjA3BHNlYwNmdHIEc2xrA3BvbGxzBHN0aW1lAzExOTQ0NzI1NTk-">Polls</a> | <a href="http://groups.yahoo.com/group/TestFirstUserInterfaces/members;_ylc=X3oDMTJlZzFzNGlxBF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMxNzA1MDA3MjA3BHNlYwNmdHIEc2xrA21icnMEc3RpbWUDMTE5NDQ3MjU1OQ--">Members</a> | <a href="http://groups.yahoo.com/group/TestFirstUserInterfaces/calendar;_ylc=X3oDMTJkNjRqbzU0BF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMxNzA1MDA3MjA3BHNlYwNmdHIEc2xrA2NhbARzdGltZQMxMTk0NDcyNTU5">Calendar</a> </div> <!-- |**|end egp html banner|**| --> <div id="ygrp-grft"> </div> <!-- yahoo logo --> <!-- |**|begin egp html banner|**| --> <div id="ygrp-ft"> <a href="http://groups.yahoo.com/;_ylc=X3oDMTJkcWh1MTY0BF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMxNzA1MDA3MjA3BHNlYwNmdHIEc2xrA2dmcARzdGltZQMxMTk0NDcyNTU5"> <img src="http://us.i1.yimg.com/us.yimg.com/i/yg/img/logo/ma_grp_160.gif" height="15" width="106" border="0" alt="Yahoo! Groups"></a> <br> <a href="http://groups.yahoo.com/group/TestFirstUserInterfaces/join;_ylc=X3oDMTJmbThpdHFqBF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMxNzA1MDA3MjA3BHNlYwNmdHIEc2xrA3N0bmdzBHN0aW1lAzExOTQ0NzI1NTk-">Change settings via the Web</a> (Yahoo! ID required) <br> Change settings via email: <a href="mailto:TestFirstUserInterfaces-digest-hHKSG33TihhbjbujkaE4pw@public.gmane.org?subject=Email Delivery: Digest">Switch delivery to Daily Digest</a> | <a href = "mailto:TestFirstUserInterfaces-traditional-hHKSG33TihhbjbujkaE4pw@public.gmane.org?subject=Change Delivery Format: Traditional">Switch format to Traditional</a> <br> <a href="http://groups.yahoo.com/group/TestFirstUserInterfaces;_ylc=X3oDMTJkYWVsbWtsBF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMxNzA1MDA3MjA3BHNlYwNmdHIEc2xrA2hwZgRzdGltZQMxMTk0NDcyNTU5"> Visit Your Group </a> | <a href="http://docs.yahoo.com/info/terms/"> Yahoo! Groups Terms of Use </a> | <a href="mailto:TestFirstUserInterfaces-unsubscribe-hHKSG33TihhbjbujkaE4pw@public.gmane.org?subject="> Unsubscribe </a> </div> <!-- |**|end egp html banner|**| --> </div> <!-- ygrp-msg --> <!-- Sponsor --> <!-- |**|begin egp html banner|**| --> <div id="ygrp-sponsor" style="width:140px;float: left; clear: none; margin-left: 5px; background:white; margin-bottom:25px ;position:absolute; top:0; right: 0;"> <!-- Network content --> <!-- Start vitality --> <div id="ygrp-vital"> <a href="http://groups.yahoo.com/group/TestFirstUserInterfaces;_ylc=X3oDMTJlcjYzajJuBF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMxNzA1MDA3MjA3BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTE5NDQ3MjU1OQ--"> Visit Your Group </a> </div> <!-- Network content --> <div id="nc"> <div class="ad"> <div id="hd1">Yahoo! Finance</div> <p><a href="http://us.ard.yahoo.com/SIG=12jo430r6/M=493064.10729649.11333340.8674578/D=groups/S=1705007207:NC/Y=YAHOO/EXP=1194479759/A=4507179/R=0/SIG=12de4rskk/*http://us.rd.yahoo.com/evt=50284/*http://finance.yahoo.com/personal-finance">It's Now Personal</a></p> <p>Guides, news,</p> <p>advice & more.</p> </div> <div class="ad"> <div id="hd1">Search Ads</div> <p><a href="http://us.ard.yahoo.com/SIG=12joeb820/M=493064.10729656.11333347.8674578/D=groups/S=1705007207:NC/Y=YAHOO/EXP=1194479759/A=3848641/R=0/SIG=1312g85fq/*http://searchmarketing.yahoo.com/arp/srchv2.php?o=US2003&cmp=Yahoo&ctv=Groups2&s=Y&s2=&s3=&b=50">Get new customers.</a></p> <p>List your web site</p> <p>in Yahoo! Search.</p> </div> <div class="ad"> <div id="hd1">Green Groups</div> <p><a href="http://us.ard.yahoo.com/SIG=12jnsc5lv/M=493064.11135488.11710474.8674578/D=groups/S=1705007207:NC/Y=YAHOO/EXP=1194479759/A=4776367/R=0/SIG=11mj2s6kj/*http://advision.webevents.yahoo.com/green/index.html">on Yahoo! Groups</a></p> <p>share your passion</p> <p>for the planet.</p> </div> </div> </div> <!-- |**|end egp html banner|**| --> <div style="clear:both; color: #FFF; font-size:1px;">.</div> </div> <img src="http://geo.yahoo.com/serv?s=97359714/grpId=8744704/grpspId=1705007207/msgId=1001/stime=1194472559/nc1=4507179/nc2=3848641/nc3=4776367" width="1" height="1"> <br> <span style="color: white;">__,_._,___</span> <!--~-|**|PrettyHtmlEnd|**|-~--> </body> <!--~-|**|PrettyHtmlStart|**|-~--> <head> <style type="text/css"> <!-- #ygrp-mkp{ border: 1px solid #d8d8d8; font-family: Arial; margin: 14px 0px; padding: 0px 14px; } #ygrp-mkp hr{ border: 1px solid #d8d8d8; } #ygrp-mkp #hd{ color: #628c2a; font-size: 85%; font-weight: bold; line-height: 122%; margin: 10px 0px; } #ygrp-mkp #ads{ margin-bottom: 10px; } #ygrp-mkp .ad{ padding: 0 0; } #ygrp-mkp .ad a{ color: #0000ff; text-decoration: none; } --> </style> </head> <head> <style type="text/css"> <!-- #ygrp-sponsor #ygrp-lc{ font-family: Arial; } #ygrp-sponsor #ygrp-lc #hd{ margin: 10px 0px; font-weight: bold; font-size: 78%; line-height: 122%; } #ygrp-sponsor #ygrp-lc .ad{ margin-bottom: 10px; padding: 0 0; } --> </style> </head> <head> <style type="text/css"> <!-- #ygrp-mlmsg {font-size:13px; font-family: arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;} #ygrp-mlmsg table {font-size:inherit;font:100%;} #ygrp-mlmsg select, input, textarea {font:99% arial,helvetica,clean,sans-serif;} #ygrp-mlmsg pre, code {font:115% monospace;*font-size:100%;} #ygrp-mlmsg * {line-height:1.22em;} #ygrp-text{ font-family: Georgia; } #ygrp-text p{ margin: 0 0 1em 0; } #ygrp-tpmsgs{ font-family: Arial; clear: both; } #ygrp-vitnav{ padding-top: 10px; font-family: Verdana; font-size: 77%; margin: 0; } #ygrp-vitnav a{ padding: 0 1px; } #ygrp-actbar{ clear: both; margin: 25px 0; white-space:nowrap; color: #666; text-align: right; } #ygrp-actbar .left{ float: left; white-space:nowrap; } .bld{font-weight:bold;} #ygrp-grft{ font-family: Verdana; font-size: 77%; padding: 15px 0; } #ygrp-ft{ font-family: verdana; font-size: 77%; border-top: 1px solid #666; padding: 5px 0; } #ygrp-mlmsg #logo{ padding-bottom: 10px; } #ygrp-vital{ background-color: #e0ecee; margin-bottom: 20px; padding: 2px 0 8px 8px; } #ygrp-vital #vithd{ font-size: 77%; font-family: Verdana; font-weight: bold; color: #333; text-transform: uppercase; } #ygrp-vital ul{ padding: 0; margin: 2px 0; } #ygrp-vital ul li{ list-style-type: none; clear: both; border: 1px solid #e0ecee; } #ygrp-vital ul li .ct{ font-weight: bold; color: #ff7900; float: right; width: 2em; text-align:right; padding-right: .5em; } #ygrp-vital ul li .cat{ font-weight: bold; } #ygrp-vital a{ text-decoration: none; } #ygrp-vital a:hover{ text-decoration: underline; } #ygrp-sponsor #hd{ color: #999; font-size: 77%; } #ygrp-sponsor #ov{ padding: 6px 13px; background-color: #e0ecee; margin-bottom: 20px; } #ygrp-sponsor #ov ul{ padding: 0 0 0 8px; margin: 0; } #ygrp-sponsor #ov li{ list-style-type: square; padding: 6px 0; font-size: 77%; } #ygrp-sponsor #ov li a{ text-decoration: none; font-size: 130%; } #ygrp-sponsor #nc{ background-color: #eee; margin-bottom: 20px; padding: 0 8px; } #ygrp-sponsor .ad{ padding: 8px 0; } #ygrp-sponsor .ad #hd1{ font-family: Arial; font-weight: bold; color: #628c2a; font-size: 100%; line-height: 122%; } #ygrp-sponsor .ad a{ text-decoration: none; } #ygrp-sponsor .ad a:hover{ text-decoration: underline; } #ygrp-sponsor .ad p{ margin: 0; } o{font-size: 0; } .MsoNormal{ margin: 0 0 0 0; } #ygrp-text tt{ font-size: 120%; } blockquote{margin: 0 0 0 4px;} .replbq{margin:4} --> </style> </head> <!--~-|**|PrettyHtmlEnd|**|-~--> </html><!--End group email --> --zOKZVSOLz2FHRgs91FZoibnNntiB1xYKbNF0WGO--