Hi Has anyone considered using TAP (Test Anything Protocol) for test reporting? [1][2] disclaimer: I'm the maintainer of the Jenkins TAP plug-in and tap4j Java library
I know that pointing at something created around 1988 to fix a problem with the current testing tools may sound weird, but I think using TAP rather than JUnit could work. # Test reporting The syntax is human friendly. ``` 1..3ok 1 - everything working as expected not ok 2 - something went wrongok 3``` # Concurrency Even though TAP states that is must support concurrency, we are discussing how to make it more explicit in the next spec [3], what doesn't make it impossible to report tests concurrently in near real time with TAP 13, with limitations to test order, test suites, etc. # Logging more information in the test output With JUnit/TestNG/xUnit it can be quite hard to include extra information to the test output. Using Jenkins, you can include extra information using a not standard syntax and the JUnit Attachments Plug-in [4]. But with TAP you can use YAMLish [5][6]. It was never included in any TAP specification, but has been the most widely used way to extend test results with TAP (I started using it in 2010). ``` 1..3ok 1 - everything working as expectednot ok 2 - something went wrong--- date: 2001-11-23 15:03:17 -5 user: ed fatal: Unknown variable "bar" stack: - file: TopClass.py line: 23 code: | x = MoreObject("345\n") - file: MoreClass.py line: 58 code: |- foo = bar...ok 3 Jenkins TAP Plug-in [7] is an example of how to extend Jenkins to support different report formats. The YAMLish can already be used to attach files in the test result. It uses tap4j [8], which would have to be changed to support tests in parallel, but it wouldn't be so hard. It is just an example, so it could be possible to write a custom reporter and not use the TAP plug-in or tap4j, but since Perl has used TAP for so long, and people have tried running tests in parallel with Test::More, Test::Parallel and prove, maybe something could be re-used for Hadoop? I think Git is also using TAP to report its tests, though I've never compiled and tested it, and I think MySQL or some of its modules/tools uses TAP as well. Another possibility would be to take a look at the existing issue in Jenkins for real time tests [9] Just my 0.02 cents. Bruno [1] http://testanything.org/philosophy.html[2] https://github.com/testanything [3] https://github.com/TestAnything/Specification/issues/15[4] https://wiki.jenkins-ci.org/display/JENKINS/JUnit+Attachments+Plugin [5] https://www.npmjs.com/package/yamlish [6] https://github.com/TestAnything/Specification/issues/11 [7] https://wiki.jenkins-ci.org/display/JENKINS/TAP+Plugin [8] http://tap4j.org/[9] https://issues.jenkins-ci.org/browse/JENKINS-19154 From: Steve Loughran <ste...@hortonworks.com> To: "common-dev@hadoop.apache.org" <common-dev@hadoop.apache.org> Sent: Monday, July 13, 2015 9:52 PM Subject: Re: [Test-Patch TLP] consensus on naming > On 12 Jul 2015, at 22:32, Sean Busbey <bus...@cloudera.com> wrote: > > sure. what did you have in mind? > > Last time it was discussed we were going to wait to overhaul the repo until > we have a new repo to move to. > > On Sat, Jul 11, 2015 at 7:40 AM, Steve Loughran <ste...@hortonworks.com> > wrote: > >> +1, >> >> could you structure the source tree/build so that adding new modules is >> easy? nothing particular, except I want to do something better with test running and reporting http://steveloughran.blogspot.co.uk/2015/05/distributed-system-testing-where-now.html http://steveloughran.blogspot.co.uk/2015/06/why-is-so-much-of-my-life-wasted.html I actually think that Yetus may be the wrong place; I want to do some baby steps with -something to import ant Junit XML and generate some aggregate (avro?) format -spark libs for analysis in ipython, zepplin of test runs and test runs across time and configurations. ultimately I'd like to be able to stream test events from test runners & log events from (distributed) processes together for a linearized event log which could go into better analysis & some webapp to view better, with some as-test-run reporting. I think overall this wouldn't fit into Yetus, something way downstream -but I might like some of the test & log reporting in there if that helps get the dependency graph right. Like I said: want. Spare time work, which is why I didn't propose a talk on it at apachecon EU data.