32
www.ics.ug #icsug Let the machines do their work and have good night sleep Martin Přádný, @mpradny Martin Jinoch, @mjinoch

XPages build automation and testing

  • Upload
    mpradny

  • View
    418

  • Download
    3

Embed Size (px)

Citation preview

Page 1: XPages build automation and testing

www.ics.ug #icsug

Let the machines do their work and have good night sleep

Martin Přádný, @mpradnyMartin Jinoch, @mjinoch

Page 2: XPages build automation and testing

www.ics.ug #icsug

Agenda

• Introduction• Testing and Domino– Demo 1

• Build Automation– Demo 2

• Discussion

Page 3: XPages build automation and testing

www.ics.ug #icsug

About us

• Martin [email protected]@mjinochhttp://jinoch.cz

• Martin Přádný[email protected]@mpradnyhttp://pradny.com

Page 4: XPages build automation and testing

www.ics.ug #icsug

Why building and testing matters?

• Code changes break existing features• Developers step on each others code• Infrastructure changes break apps• Application works only for happy-path

scenarios

Page 5: XPages build automation and testing

www.ics.ug #icsug

Testing

• Unit testing• Integration testing• UI testing

Page 6: XPages build automation and testing

www.ics.ug #icsug

Domino Problems

• Tight data and code integration• Unstructured code• Dependency on Notes C runtime• No light in-memory option

Page 7: XPages build automation and testing

www.ics.ug #icsug

Solutions

• Write apps with testing in mind• Separate code and data• Source Control• Build automation

Page 8: XPages build automation and testing

www.ics.ug #icsug

Tools

• XPages with Junit– org.openntf.junit.xsp

• JUnit/TestNG in your ODS project– Easy test of non-XPages code– Mock domino classes – EasyMock, PowerMock

• UI testing– Selenium

Page 9: XPages build automation and testing

www.ics.ug #icsug

Local testing setup

• Change ODP to Java project– Maks Zhuk - http://mzhuk.blogspot.com/– Manually edit .project file– Add Code/Java as Source Folder– Add Local directory

• Create Java project with tests– Add mocking library (optional)

Page 10: XPages build automation and testing

www.ics.ug #icsug

Local testing setup - details• http://mzhuk.blogspot.com/2014/02/unit-tests-for-lotus-domino-applications.html

• Snippet from .project<buildCommand> <name>org.eclipse.jdt.core.javabuilder</name> <arguments> </arguments> </buildCommand></buildSpec><natures> <nature>org.eclipse.jdt.core.javanature</nature></natures>

Page 11: XPages build automation and testing

www.ics.ug #icsug

Page 12: XPages build automation and testing

www.ics.ug #icsug

Demo 1 - scenario

• XPages application – fake CMS with articles• Computation of article expiration date – based on article type– logic in Java

• 3 different types of definitions and tests– Hard-coded in Java– In a document– In a view

Page 13: XPages build automation and testing

www.ics.ug #icsug

Demo

Page 14: XPages build automation and testing

www.ics.ug #icsug

Automation

• Maven, Ant, Gradle, ..– Describe and run steps to get final deliverable

• Jenkins, Teamcity, Bamboo, …– Continuous integration– Check-out source code– Run periodical builds and much more

Page 15: XPages build automation and testing

www.ics.ug #icsug

Headless designer

• Command line invocation of Domino Designer• Create NSF from On Disk Project• Enable/Disable plugins

• New feature in 9.0.1• http://www-10.lotus.com/ldd/ddwiki.nsf/dx/Headless_Designer_Wiki• notes.ini parameter - DESIGNER_AUTO_ENABLED=true• ID without password

Page 16: XPages build automation and testing

www.ics.ug #icsug

Headless designer invocation

• Manually– Single command command line• designer -RPARAMS -vmargs -

Dcom.ibm.designer.cmd=[clean],[exit],[file name],[job name],[file path],[file name]

– Command file• designer -RPARAMS -vmargs -

Dcom.ibm.designer.cmd.file=[path to command file]

Page 17: XPages build automation and testing

www.ics.ug #icsug

Headless designer wrappers• Maven – Christian Güdemann

– Included in public Maven repository– Options to install Designer plugins– https://github.com/OpenNTF/BuildAndTestPattern4Xpages

• Ant – Cameron Gregor– Additional tasks for NSF manipulation– Uses Java Native Interface– https://github.com/camac/BuildXPages

• Gradle - Martin Pradny – not maintained– https://bitbucket.org/pradnik/gradledominoplugin

Page 18: XPages build automation and testing

www.ics.ug #icsug

Headless designer - Maven<packaging>domino-nsf</packaging><properties>

<ddehd.odpdirectory>${basedir}/on-disk-project</ddehd.odpdirectory></properties><build><plugins>

<plugin><groupId>org.openntf.maven</groupId><artifactId>headlessdesigner-maven-plugin</artifactId><version>1.2.0</version><extensions>true</extensions>

</plugin></plugins></build>From:https://github.com/OpenNTF/BuildAndTestPattern4Xpages/blob/master/testpatterns/org.openntf.junit.xsp.parent/org.openntf.junit.odp/pom.xml

Page 19: XPages build automation and testing

www.ics.ug #icsug

Why Maven

• Standard in XPages community• OSGi friendly with Tycho plugin• IBM released Update Site on OpenNTF.org– IBM Domino Update Site for Build Management– http://

openntf.org/main.nsf/project.xsp?r=project/IBM%20Domino%20Update%20Site%20for%20Build%20Management

• Allows building Extension Libraries

Page 20: XPages build automation and testing

www.ics.ug #icsug

Jenkins (teamcity, bamboo,..)

• Continuous Integration• Integrate with SCM (Git, SVN, …)– Trigger build, push/pull, …

• Run build, Run tests• Report errors• Deploy to production• Extensible with plugins

Page 21: XPages build automation and testing

www.ics.ug #icsug

• Jenkins – https://jenkins-ci.org/

• Bamboo– https://www.atlassian.com/software/bamboo

• TeamCity– https://www.jetbrains.com/teamcity/

Page 22: XPages build automation and testing

www.ics.ug #icsug

Selenium

• Web browser automation (Firefox, Chrome, IE,…)• Selenium IDE (Firefox)

– Record tests– Replay tests– Export (Java, C#, ruby, Python, ..)

• Selenium server, grid– Run tests on remote machines

• http://www.seleniumhq.org

Page 23: XPages build automation and testing

www.ics.ug #icsug

Demo 2 - scenario

• Same application as in Demo 1• Maven driven build on Jenkins– Compile and run tests using Tycho/OSGi– Build NSF from ODP – Maven plugin– Run Selenium tests• Copy NSF to server – Ant task• Load data – calling an Agent using URL

Page 24: XPages build automation and testing

www.ics.ug #icsug

Demo 2 - Environment

Page 25: XPages build automation and testing

www.ics.ug #icsug

Demo 2

Page 26: XPages build automation and testing

www.ics.ug #icsug

Demo 2 - notes• https://bitbucket.org/pradnik/ics.ug-demo• mvn clean verify –P complete• Jenkins running as a service

– Allow to interact with desktop– SCM Poll since running as local VM (not optimal)

• Maven settings – using Config File Provider plugin– <notes-platform> for Domino Update Site– <ddehd.notesdata> for Designer data directory

• Profile for just testing• Some properties are hard coded in pom.xml

Page 27: XPages build automation and testing

www.ics.ug #icsug

Demo 2 – settings.xml<settings> <pluginGroups>

<pluginGroup>org.openntf.maven</pluginGroup>

</pluginGroups><profiles> <profile> <id>main</id> <properties> <notes-platform>file:///Z:/Share/DominoUpdatsite</notes-platform>

<ddehd.notesdata>c:/IBM/Notes/Data/</ddehd.notesdata> </properties> </profile> </profiles></settings>

Page 28: XPages build automation and testing

www.ics.ug #icsug

Demo 2 – Jenkins configuration

Page 29: XPages build automation and testing

www.ics.ug #icsug

Trade-offs

• What to automate• Cost of test maintenance vs. manual execution• False feeling of security

Page 30: XPages build automation and testing

www.ics.ug #icsug

Conclusion

• Testing is good• Test from very start– Helps cleaner code– Helps cleaner UI

• Path to Continuous Delivery• Code quality automated analysis– SonarQube - http://www.sonarqube.org/

Page 31: XPages build automation and testing

www.ics.ug #icsug

Questions?

Page 32: XPages build automation and testing

www.ics.ug #icsug

Thank you!