This is now in 1.7. I've verified that it does what I needed it to with Jenkins, which was to have the https://wiki.jenkins-ci.org/display/JENKINS/JUnit+Attachments+Plugin plugin associate Selenium screen shots with individual test methods instead of at the class level (which is useless).
On 24/04/2013, at 1:27 PM, Luke Daley <luke.da...@gradleware.com> wrote: > > On 23/04/2013, at 11:00 PM, Adam Murdoch <adam.murd...@gradleware.com> wrote: > >> >> The longer-term plan is to deliver the test events to the CI server via the >> tooling API, and we can make these events as rich as we like. Doesn't help >> us now, though. >> >> There are 3 case we want to support here: >> >> 1. Don't generate the XML at all. For example, don't generate the xml if >> nothing went wrong, or if I'm doing a dev build, or if I'm using a CI server >> that doesn't use it (TeamCity uses the events already, Bamboo doesn't show >> the output). >> 2. Generate the XML with output per atomic test. >> 3. Generate the XML with output per test class (aka 'broken mode'). >> >> We want to deprecate and remove #3 as soon as is practical, once #2 is >> available. The question here is what we would break if we just switched to >> #2? We should put some effort into answering that question. > > We may have to do #2 and #3 indefinitely depending on what the tools out > there do. > > We need to work out the list of things we need to test. Here's what I can > think of (rough priority order): > > 1. Jenkins > 2. Hudson > 3. Ant JUnit HTML reporter > 4. Team City > 5. Bamboo > 6. Thoughtworks Go > > > There are a lot of CI servers out there, we can't test them all. > > I'll try to get in touch with someone from the Jenkins team and ask them > about why they support this format and what produces XML files in this > format. If something that is in widespread use already does this, then that's > a good sign. > > >> >> On 19/04/2013, at 10:33 PM, Luke Daley <luke.da...@gradleware.com> wrote: >> >>> Hi all, >>> >>> In the “JUnit XML” file that we currently produce we do not associate >>> output (std, err) with individual test cases, but with the suite (in >>> practice: class) as a whole. This is causing problems in integrating with >>> https://wiki.jenkins-ci.org/display/JENKINS/JUnit+Attachments+Plugin. >>> >>> Given: >>> >>> package junit; >>> >>> import org.junit.Test; >>> import org.junit.runner.RunWith; >>> import org.junit.runners.JUnit4; >>> >>> @RunWith(JUnit4.class) >>> public class TheTest { >>> >>> @Test >>> public void t() { >>> System.out.println("foo"); >>> } >>> >>> } >>> >>> We generate XML like: >>> >>> <?xml version="1.1" encoding="UTF-8"?> >>> <testsuite name="junit.TheTest" tests="1" failures="0" errors="0" >>> timestamp="1970-01-01T00:00:00" hostname="hasdrubal.local" >>> time="1.366372749405E9"> >>> <properties/> >>> <testcase name="t" classname="junit.TheTest" time="0.001"/> >>> <system-out><![CDATA[foo >>> ]]></system-out> >>> <system-err><![CDATA[]]></system-err> >>> </testsuite> >>> >>> After digging through the Jenkins code for how it parses these files, I >>> discovered that it supports: >>> >>> <?xml version="1.1" encoding="UTF-8"?> >>> <testsuite name="junit.TheTest" tests="1" failures="0" errors="0" >>> timestamp="1970-01-01T00:00:00" hostname="hasdrubal.local" >>> time="1.366372749405E9"> >>> <properties/> >>> <testcase name="t" classname="junit.TheTest" time="0.001"> >>> <system-out><![CDATA[foo >>> ]]></system-out> >>> <system-err><![CDATA[]]></system-err> >>> </testcase> >>> </testsuite> >>> >>> That is, you can associate output with an individual testcase. >>> >>> I did some experiments with Maven to see what it does. Maven doesn't record >>> any stdio information in the XML file usually; it puts text files on the >>> side. However, I happened upon a case where it does. If you try and execute >>> a non public class you get: >>> >>> <?xml version="1.0" encoding="UTF-8" ?> >>> <testsuite failures="0" time="0.006" errors="2" skipped="0" tests="2" >>> name="junit.TheTest"> >>> >>> <testcase time="0.002" classname="junit.TheTest" name="initializationError"> >>> <error message="Test class should have exactly one public constructor" >>> type="java.lang.Exception">java.lang.Exception: Test class should have >>> exactly one public constructor >>> at >>> org.junit.runners.BlockJUnit4ClassRunner.validateOnlyOneConstructor(BlockJUnit4ClassRunner.java:131) >>> … >>> </error> >>> <system-out>@SLTests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time >>> elapsed: 0.033 sec >>> @SLRunning junit.TheTest >>> </system-out> >>> </testcase> >>> <testcase time="0.001" classname="junit.TheTest" name="initializationError"> >>> <error message="Class junit.TheTest should be public" >>> type="java.lang.Exception">java.lang.Exception: Class junit.TheTest should >>> be public >>> at >>> org.junit.runners.model.FrameworkMethod.validatePublicVoid(FrameworkMethod.java:87) >>> … >>> </error> >>> </testcase> >>> </testsuite> >>> >>> The <system-out> elements are nested under <testcase> there. So it seems >>> there is some precedent for this. >>> >>> >>> I have some incentive to at least get this working for a client in Jenkins. >>> Where "get it working" would be to have the <system-out> nested under >>> <testcase> so it can do the correct association. >>> >>> I have no idea who else supports this format though. It's hard to predict >>> given that there is no schema for this XML file. >>> >>> -- >>> Luke Daley >>> Principal Engineer, Gradleware >>> http://gradleware.com >>> >>> Join me at the Gradle Summit 2013, June 13th and 14th in Santa Clara, CA: >>> http://www.gradlesummit.com >>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe from this list, please visit: >>> >>> http://xircles.codehaus.org/manage_email >>> >>> >> >> >> -- >> Adam Murdoch >> Gradle Co-founder >> http://www.gradle.org >> VP of Engineering, Gradleware Inc. - Gradle Training, Support, Consulting >> http://www.gradleware.com >> >> Join us at the Gradle Summit 2013, June 13th and 14th in Santa Clara, CA: >> http://www.gradlesummit.com >> > > -- > Luke Daley > Principal Engineer, Gradleware > http://gradleware.com > > Join me at the Gradle Summit 2013, June 13th and 14th in Santa Clara, CA: > http://www.gradlesummit.com > -- Luke Daley Principal Engineer, Gradleware http://gradleware.com Join me at the Gradle Summit 2013, June 13th and 14th in Santa Clara, CA: http://www.gradlesummit.com --------------------------------------------------------------------- To unsubscribe from this list, please visit: http://xircles.codehaus.org/manage_email