Download ppt - View Presentation

Transcript
Page 1: View Presentation

2002-12-09

UNITEnheten för IT-stöd

Testing Testing Testing

Joakim Björklund

Director of IT Services Division

Linköpings universitet

Sweden

Page 2: View Presentation

2002-12-09

UNITEnheten för IT-stöd

Testing testing testing

“You all know the need for testing, but how do you actually find time to do it? This presentation gives an outline on some of the tools you can use to perform testing of your Java application and save time while weeding out the bugs. The tools discussed include HttpUnit and Canoo.”

An odyssey of open source tools for testing.

Page 3: View Presentation

2002-12-09

UNITEnheten för IT-stöd

Testing testing testing

Before we get started:• Get a good software testing book!• Go a course on testing at the Computer Science

department!• Follow a software production model• Automate all testing!• Daily builds! (With testing and test reports)• Documentation (JavaDocs and Wiki)

Page 4: View Presentation

2002-12-09

UNITEnheten för IT-stöd

Testing testing testing

• Design patterns• Refactoring • Reusability• Don’t gold plate the code!• Spend a moment or two on system architecture

Page 5: View Presentation

2002-12-09

UNITEnheten för IT-stöd

Testing Testing Testing

You all know the need for testing? Or do you?

• When are you supposed to take the cost for testing?- During development or during system maintance?

• Automated testing – take the time to save time!• When are your application done?!?

Page 6: View Presentation

2002-12-09

UNITEnheten för IT-stöd

Testing Testing Testing

Testing is a bit more than:

• System.out.println(“This works!”);• Debugger expressions• Small test scripts

Page 7: View Presentation

2002-12-09

UNITEnheten för IT-stöd

“Testing theory”

• Testing can be done on several “layers” of the product being developed.

• Unit testing – domain/application logic• Integration testing – APIs• Functional testing – acceptance, top-level• Performance testing – the need for speed• "Regression testing" is the concept of testing that

asserts that everything that worked yesterday still works today

Page 8: View Presentation

2002-12-09

UNITEnheten för IT-stöd

Automatic Testing

• In order to decrease the cost, time and hassle during the testing phase, the first thing to consider is automatic testing.

• ”If a program feature lacks an automated test, we assume it doesn’t work. This seems much safer than the prevailing assumption, that if a developer assures us a program feature works, then it works now and forever.”

• Helps regression testing (or is a prerequisite)

Page 9: View Presentation

2002-12-09

UNITEnheten för IT-stöd

Tools - mentioned

Testing tools• JUnit – unit testing• Cactus – unit/integration• Canoo – functional testing• HTTPunit – functional testing• JMeter – performance testingOther useful tools• Ant – build tool• Bugzilla – bug tracking tool

Page 10: View Presentation

2002-12-09

UNITEnheten för IT-stöd

Open Source vs Commercial

As you noticed all tools in this presentation is Open Source. One of the reasons for this is that the cost for the testing tool should not be an obstacle for the testing process itself.

Access to the source code…

Page 11: View Presentation

2002-12-09

UNITEnheten för IT-stöd

Ant

• Ant is a build tool that enables you to automate the build process.

• Ant – in java for java• Build files in XML i.e. build.xml• Every build file contains one project element. A

project element contains target elements. Each target consists of a set of task elements.

• Many of the tools described in this presentation utilize Ant…

Page 12: View Presentation

2002-12-09

UNITEnheten för IT-stöd

Ant

Example of targets:• Test – run the tests• Clean – Clean out the output directories• Deploy – Compile the JARs, WARs etc to a exec

system• Publish – Output the source and binaries to any

distribution site• All – Perform clean, fetch, build, test, docs and

deploy

Page 13: View Presentation

2002-12-09

UNITEnheten för IT-stöd

JUnit

• JUnit is a framework for writing unit tests. • Test case = a related set of tests, typically every

class should have a test case.• Test fixture – the resources needed to run the test• Test suite – a collection of related test cases.

Page 14: View Presentation

2002-12-09

UNITEnheten för IT-stöd

JUnit

1. Subclass junit.framework.TestCase

2. If you need fixture objects, override the setUp() method.

3. Define a number of tests that return void and whose method name begin with test (testAdd(), testPut() etc)

4. If you need to release resources that where part of the fixture, override the tearDown() method

5. If needed define a suite of tests

Page 15: View Presentation

2002-12-09

UNITEnheten för IT-stöd

JUnit

Page 16: View Presentation

2002-12-09

UNITEnheten för IT-stöd

JUnit

To get xml-output from the test:<target name=”test” depends=”compile”> <junit printsummary=”true”> <formatter type=”xml” /> <test name=”junit.samples.TEST”> <classpath> <pathelement location=”${outdir}” /> </classpath> </junit></target>JUnitreport – to generate WebPages of the result

Page 17: View Presentation

2002-12-09

UNITEnheten för IT-stöd

Cactus

• A tool for tests on servlets and other J2EE components.

• Cactus provides ”redirectors”, which serve as points of entry to the container.

• The redirectors execute test cases written for Cactus in the container and provide access to container objects (HttpServletRequest, PageContext etc)

• Cactus integrates with JUnit

Page 18: View Presentation

2002-12-09

UNITEnheten för IT-stöd

Example servlet

Public class LiUServlet extends javax.servlet.http.HttpServlet {

Public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {

Response.setContentType(”text/html”);

PrintWriter writer=response.getWriter();

Writer.println(”<a href=’http://www.liu.se’>”);

Writer.println(”Linköpings universitet</a>”);

}}

Page 19: View Presentation

2002-12-09

UNITEnheten för IT-stöd

Cactus

Private LiUServlet servlet;

Public void setUp() throws Exception {

servlet = new LiUServlet();

servlet.init(config);

}

/** Test of doGet method **/

public void testDoGet() throws Exception {

servlet.doGet(request, response);

}

Page 20: View Presentation

2002-12-09

UNITEnheten för IT-stöd

Cactus

Public void endDoGet(com.meterware.httpunit.WebResponse response) throws Exception {

WebLink link = response.getLinkWith(” Linköpings universitet”);

assertNotNull(link);

System.out.println(response.getText());

org.w3c.dom.Node = response.getDOM();

}

Page 21: View Presentation

2002-12-09

UNITEnheten för IT-stöd

Canoo

• Canoo is a web application testing suite.• Canoo is not restricted to only testing Java

applications• Uses other Open Source packages (JUnit, JTidy)• Fairly easy to use, can the customer write tests?

Page 22: View Presentation

2002-12-09

UNITEnheten för IT-stöd

Canoo

As usual a project tag<project name="anstp" basedir="." default="test">

Properties, esp canoo.dir<property name="base.dir" value="${basedir}"/>

<property name="canoo.dir" value="/service/canoo"/>

<property file="${basedir}/../../../tomcat-src/local.properties" />

<property file="${basedir}/../../../tomcat-src/webtest.properties" />

Page 23: View Presentation

2002-12-09

UNITEnheten för IT-stöd

Canoo

The following target is needed to call canoo: <taskdef name="testSpec"

classname="com.canoo.webtest.ant.TestSpecificationTask">

<classpath>

<fileset dir="${canoo.dir}“ includes = "**/lib/*.jar"/>

</classpath>

</taskdef>

Page 24: View Presentation

2002-12-09

UNITEnheten för IT-stöd

Canoo

Lastly the target for the testing itself

<target name="test" >

Detta target ska innehålla tasken testSpec (med ett eventuellt name):

<testSpec name=“Template for Canoo tests">

In testSpec you need some config parameters:<config host="${SERVER_HOST}" port="${HTTP11_PORT}" protocol="$

{SERVER_PROTOCOL}" basepath="${SERVER_BASEPATH}" verbose="${webtest.verbose}" resultpath="${base.dir}" resultfile="${webtest.resultfile}" showhtmlparseroutput="${webtest.showhtmlparseroutput}" summary="${webtest.summary}" saveresponse="${webtest.saveresponse}" />

Page 25: View Presentation

2002-12-09

UNITEnheten för IT-stöd

Canoo

A suitable sequence of test steps

<steps> <!– test steps below -->

<invoke stepid=“Fetch start page" url="render.uP" />

<verifytitle stepid=“Verify page title" text="Mitt LiU" />

<setinputfield stepid=“Set username" name="userName" value="xgugro828" />

<setinputfield stepid=“Set password" name="password" value="kisen" />

<clickbutton stepid=“Press login button" name="Login" />

<verifytext stepid=“Verify that we came to Gusten Grodslukares start page in the portal" text="/Gusten Grodslukare" />

<!– Test steps above -->

</steps>

Page 26: View Presentation

2002-12-09

UNITEnheten för IT-stöd

Canoo

Closing tags:</testSpec>

</target>

</project>

Page 27: View Presentation

2002-12-09

UNITEnheten för IT-stöd

HttpUnit

• HttpUnit provides a Java framework for functional testing.

• HttpUnit is a solid ground to build your tests on.• But it might comes with the price of duplication.

Page 28: View Presentation

2002-12-09

UNITEnheten för IT-stöd

HttpUnit

WebResponse response = converstion.getResponse(http://codex.liu.se);

WebLink link = response.getLinkWith(”Linköpings universitet”);

WebRequest request = link.getRequest();

response = conversion.getResponse(request);

Page 29: View Presentation

2002-12-09

UNITEnheten för IT-stöd

Performance

• Performance: Number of simultaneous users, size of web pages returned...

• “the user experience” – It is the end users experience that are key to the application performance.

• Locate the bottlenecks as early as possible – refactor and re-architect

Page 30: View Presentation

2002-12-09

UNITEnheten för IT-stöd

JMeter

• JMeter a 100% pure java desktop application.• Test: HTTP, FTP, RDBMS…• Extensible… write your own test• Simulate heavy load (application, server and

network)• Gives instant visual feedback

Page 31: View Presentation

2002-12-09

UNITEnheten för IT-stöd

JMeter

• You must have a TestPlan• A TestPlan consists of one to many

ThreadGroups.• A thread can be seen as a simulated user• A timer is added to a ThreadGroup (Constant,

gaussian random, uniform random)• Controller• Listener

Page 32: View Presentation

2002-12-09

UNITEnheten för IT-stöd

Bugzilla

• http://www.bugzilla.org/• A bug-tracking tool, since naturally there will be

bugs and there is an actual need to follow progress of the software.

• Consider adding bugs automatically…

Page 33: View Presentation

2002-12-09

UNITEnheten för IT-stöd

Bugzilla

Page 34: View Presentation

2002-12-09

UNITEnheten för IT-stöd

Links

• JUnit – http://junit.org• Canoo – http://webtest.canoo.com• HttpUnit - http://httpunit.sourceforge.net• Bugzilla – http://www.bugzilla.org• Ant, Cactus, JMeter - http://jakarta.apache.org

Page 35: View Presentation

2002-12-09

UNITEnheten för IT-stöd

Summary

• Automate the testing!• Testing is not rocket science• Include testing from the beginning• Use the web

Page 36: View Presentation

2002-12-09

UNITEnheten för IT-stöd

Testing Testing Testing

Q & A

Joakim Bjö[email protected]