Multipage acceptance tests...

Discussion of testing theory and practice, including methodologies (such as TDD, BDD, DDD, Agile, XP) and software - anything to do with testing goes here. (Formerly "The Testing Side of Development")

Moderator: General Moderators

Post Reply
User avatar
nielsene
DevNet Resident
Posts: 1834
Joined: Fri Aug 16, 2002 8:57 am
Location: Watertown, MA

Multipage acceptance tests...

Post by nielsene »

I'm having an issue with a multipage acceptence test. Here's the start of the test case:

Code: Select all

class ResultTrackerLoadTest extends WebAuthTestCase {
  function ResultTrackerLoadTest() {
    $this->WebAuthTestCase('Result Tracker Import Tests','siteadmin-tester',
			   'results/import_cib.php');
  }

  function testImportProcess() {
    // Page 1 Generall Inforamtion
    $this->assertTrue($this->setField('compUnix','Foo'));
    $this->assertTrue($this->setField('compName','FooBar Ballroom Dance Competition'));
    $this->assertTrue($this->setField('compURL','http://example.net/redacted/'));
    $this->assertTrue($this->setField('compType','US Collegiate'));
    $this->assertTrue($this->setField('firstdayMonth','April'));
    $this->assertTrue($this->setField('firstdayDay','2'));
    $this->assertTrue($this->setField('firstdayYear','2005'));
    $this->assertTrue($this->setField('lastdayMonth','April'));
    $this->assertTrue($this->setField('lastdayDay','3'));
    $this->assertTrue($this->setField('lastdayYear','2005'));
    $this->clickSubmitByName("submit");
    $this->assertPattern("/import_cib_2/",$this->getUrl());
    $this->assertTrue($this->setField('resultURL','http://example.com/redacted'));
    $this->showSource();
    $this->clickSubmitByName("submit");
    $this->setConnectionTimeout(600);
    $this->showSource();
    echo $this->getUrl();
    $this->assertPattern("/import_cib_3/",$this->getUrl());
    
  }
}
The last assertPattern is failing, the URL still points to the second step and the showSource returns nothing. This step is slurping up a lot of data, normally takes about 2-3 minutes (when not run in testing), hence the 10 minute timeout I set. When I cut and paste from the test case into the form, it works. I've viewed source to make sure I have exact matches on the field names.

Any clue as to why it would fail in the multipage test? I had a problem before when the simple browser wasn't propagating the HTTP_REFERER, but I no longer require/check that.

[Edit:

Changing the second submission to:

Code: Select all

$postTo=CIB_URL."results/import_cib_2.php";
    $postParam=array("resultURL"=>'http://example.net/redacted',
		     "submit"=>"Get Results");
    $temp=$this->post($postTo, $postParam);
works. But that's turning the test into something not quite an acceptance test -- its not using the website the way a "person" would in setting fields and clicking buttons....]
User avatar
nielsene
DevNet Resident
Posts: 1834
Joined: Fri Aug 16, 2002 8:57 am
Location: Watertown, MA

Post by nielsene »

OK I have a working multipage load test. (Still has the funny issue from the OP) but the 5-page form is filled out and then a few of the generated pages are tested. I'll need to write one more of these to finish wrapping the form's functionality. After that I'll have confidence that the wizzard's user-facing functionality has been correctly wrapped.

I have three reported bugs to fix in it. The five pages are basically pure procedural. I want to fix the bugs and refactor to an Application Controller, Domain Model, etc.

I think it makes sense to do the refactoring before the bug hunts as that will allow for finer granularity of testing, etc. Does this make sense?

Any suggestions on initial refactoring's to start converting an existing procedural script to a more object model. I'd prefer to take it incrementally -- not just implementing a second version in parallel.
McGruff
DevNet Master
Posts: 2893
Joined: Thu Jan 30, 2003 8:26 pm
Location: Glasgow, Scotland

Post by McGruff »

If you can live with the bugs for now I think I'd probably refactor first.

How to start? Good question.. If you've got an idea by now what the new OOP application framework code will look like, this should show you where to make the cuts. It can be quite difficult to separate out responsibilities when everything is mixed up - depends just how bad it is. If it's not too tangled, maybe you can do it in stages, without regressing. If it's really bad maybe it won't be possible to keep it working while you edit. It'll all have to be done in one massive effort.
Post Reply