apiaryio / dredd

Language-agnostic HTTP API Testing Tool
https://dredd.org
MIT License
4.18k stars 278 forks source link

Machine-readable reporter #341

Open honzajavorek opened 8 years ago

honzajavorek commented 8 years ago

...or a different easily machine-readable format. Would significantly simplify writing some integration tests (such as those in #338). Filing this issue so people can add other use cases - probably not worth implementing just because of couple of tests.

netmilk commented 8 years ago

Good idea I think. Might improve the integration possibilities. +1

prasanna981 commented 7 years ago

+1 Would be useful to add something like this https://www.npmjs.com/package/newman#json-reporter-options. This would make it easier to integrate with CI tools

honzajavorek commented 7 years ago

I think this should be implemented using the TAP protocol: https://testanything.org/

honzajavorek commented 6 years ago

Let's do this. The idea is:

Open questions

Following needs to be answered before we do this:

Resources

honzajavorek commented 6 years ago

@garyluu @juliengerboud @mlambley I noticed you are using the HTML reporter. What is your use case for it? Why do you prefer it?

honzajavorek commented 6 years ago

Thinking about this further:

So the remaining issue is how to support multiple reporters. I've seen quite a few people here to use Dredd with dot reporter together with apiary or html reporters, as in

as a Dredd user I can see whether anything failed in the console and I can go to the file to see the verbose output

TAP steals stdout, so that wouldn't be possible. And the stderr would be probably ocuppied by redirected server and hooks output... 🤔

garyluu commented 6 years ago

didn't end up using the html reporter, but i was trying to create a web link that quickly displayed the results

michalholasek commented 6 years ago

Regarding the stdout noise of parent process coming from server and hook instances - it could be good idea to leverage subprocess.send() method to handle incoming information from server/hooks and decide in main Dredd's process what should go to stdout instead of just writing directly to main process' stdout from server/hook processes.

juliengerboud commented 6 years ago

@honzajavorek The idea was to "store" the report as an artifact of TeamCity build. This way, users checking a build creating the report would just had to click on the file and the report would have been display directly into the browser.

honzajavorek commented 6 years ago

With @michalholasek we designed following steps to take:

  1. Use debug for Dredd application logging. Separate application logging from the reporters output completely.
  2. Add the TAP reporter alongside current reporters and add respective tests and docs. Add deprecation warning to reporters intended to be replaced by TAP with a link to this issue and a call for comments.
  3. Let's see whether TAP covers all use cases for people. If yes, let's remove the other reporters in the future. If not, let's design the solution together with interested users.

Regarding the server/hooks output, we can capture it as suggested in https://github.com/apiaryio/dredd/issues/593#issuecomment-251946163 and put it into special TAP comments as part of the stdout. The stderr would be reserved for output of the debug utility.

honzajavorek commented 6 years ago

@garyluu @juliengerboud Thanks for sharing! Did you need the CLI output as well or was the HTML file sufficient for you? I mean, if you run Dredd like you described, did you care about what it outputs to the console at all?

garyluu commented 6 years ago

The last time I tried, I needed the CLI output as well (in order to get the summary): https://github.com/apiaryio/dredd/issues/1001

juliengerboud commented 6 years ago

@honzajavorek The CLI log is quite useful! It is easier to read IMHO.

mlambley commented 6 years ago

It's been... quite a while, but I'll try to remember my use case. I wanted the cli to give brief information (a single line for each test, showing perhaps method, url, result). The problem I had was that the cli reporter was cluttered with json dumps of failed tests. There were two options for the cli reporter: show errors inline or show errors at the end. I wanted the option to not show errors at all.

The dot reporter wasn't ideal either because you couldn't see the test information (and if memory serves, it still dumped json data anyway).

A HTML file is a much easier place to review long strings of json and identify where the errors are. I wanted the cli reporter to give summary info, with detailed information in the html.

I don't know how TAP will fit into this, but my suggestion was to have an interface for creating custom reporters and be able to configure dredd to say "read extra reporters from this directory". I think another suggestion I had was to create a "quiet cli reporter" which was a copy of cli reporter with all of the "show errors" code removed.