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 &lt;<a href="mailto:rick%40rimuresearch.com">rick@rimuresearch.<wbr>com</a>&gt; wrote:<br>
&gt;<br>
&gt;   Hi Rob,<br>
&gt; &gt; On the agile-testing list, I've been gathering info WRT acceptance<br>
&gt; &gt; tests for this and comparing WatiR, WatiN, Selenium, etc...<br>
&gt; &gt;<br>
&gt; &gt; So now I've noticed that our WatiN tests are very slow. (We have some<br>
&gt; &gt; NUnitAsp tests too which are worse.) We have 100s+ tests in FitNesse<br>
&gt; &gt; that take about 80s to run. And &lt;10 in WatiN that take about 80s to<br>
&gt; &gt; run.<br>
&gt; Yes, UI tests are very slow, whether it's web-based or GUI. That's one<br>
&gt; of the big problems with them. Sometimes you're forced to decide on<br>
&gt; timeout periods, and so have to balance speed against spurious fails.<br>
&gt; The other problem is that the UI tests are verbose and tend to be<br>
&gt; fragile under changes to the UI (I'm working on solving this problem).<br>
&gt; &gt;<br>
&gt; &gt; So I'm theorizing that Fit tests are really going to be the stronger<br>
&gt; &gt; set. It'll be 1 layer down, but as long as we do some sort of MVC/MVP<br>
&gt; &gt; or simple command pattern, we only won't be testing the client-side<br>
&gt; &gt; validation. I'm debating whether or not those tests are even worth<br>
&gt; &gt; writing? Especially if for example, we submit some form and the server<br>
&gt; &gt; side validates fields as well.<br>
&gt; I recommend using Fit for testing below the UI layer. Then have some<br>
&gt; UI-based tests that verify end-to-end behavior, so that pages are<br>
&gt; 'wired&quot; together correctly, etc.<br>
&gt;<br>
&gt; If the UI tests are too slow, you can run a two-stage build process,<br>
&gt; with fast feedback from Fit storytests. I've also had success with<br>
&gt; running lots of Selenium tests in parallel.<br>
&gt; &gt;<br>
&gt; &gt; Furthermore, for reuse of the validation logic, I'm leaning towards<br>
&gt; &gt; less JavaScript in the page for AJAX calls that get their results from<br>
&gt; &gt; the server.<br>
&gt; That's a tricky one, as Fit is only good for validating logic on the<br>
&gt; server. I'd use Javascript unit tests for testing the AJAX and<br>
&gt; validation logic in Javascript. And, again, have some UI tests to check<br>
&gt; end-to-end.<br>
&gt;<br>
&gt; Cheers, Rick<br>
&gt;<br>
&gt; PS, if GWT was used, the Java code intended for translation to<br>
&gt; Javascript could be tested with Fit<br>
&gt; &gt;<br>
&gt; &gt; Thoughts?<br>
&gt; &gt; Comments?<br>
&gt; &gt;<br>
&gt; &gt; .rob.<br>
&gt;<br>
&gt; <br>
&gt;<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--