Hi, Your contribution would be most welcome. You can start by forking the jbehave-core repo on GitHub and start testing out some ideas.
For the moment let's try to focus on the meta info approach, possibly introducing some meta-keywords. Cheers On 15 Apr 2012, at 21:42, joachim.nils...@molybden.se wrote: > You are right, it can be done through the meta tag instead or including it > into the stories. > Perhaps I should try doing it that way instead. It will work and as you say, > it will not change the current definition and language. > > However, my idea was to make it obvious in the scenario text that the > testcase would be using several different values. As you say, it should be > clear in the test what the test does. Adding different data through meta tags > may hide the fact that we will run the test differently from one time to > another. Using a keyword like 'any' would make it clear for the non techncal > staff that data for the test will vary, and I assume it is they who are > writing the stories. > > Regardless of implementation, the possibility to combine data will allow a > product to grow faster. > When a product reaches a certain size and complexity, adding features takes > more and more time since you will run into interference with other features > and patches. > By ths suggestion, the already written scenarios will be able to run > combinations of data by simply increasing the possible values of one category > At least so i believe. > > Anyhow, I will try the different implementations myself in a real product to > evaluate what requirement analysts and testers prefer. Currently it is only > an idea and used in a small POC. > My offer is still valid, if you believe it can be useful in JBehave, I am > willing to implement and send a patch. > > Regards, > Joachim > > ----- Original Message ----- > From: > dev@jbehave.codehaus.org > > To: > <dev@jbehave.codehaus.org> > Cc: > > Sent: > Fri, 13 Apr 2012 17:51:46 +0200 > Subject: > Re: [jbehave-dev] Data driven testing by categories > > > Some more thoughts: we can already specify parameters via Meta info, e.g. > > Meta: @locale en > > Given a user registers with any profile with username John and password > topsecret > And the system is using <locale> > When the user logs in using username John and password topsecret > Then the user is greeted with the message containing the name John > > We could extend this feature to give us a mechanism of parameter > combination via meta tags > > Meta: @locale en,fr,de @profile admin,user @combine locale,profile > > Here the meta tag "combine" would be a reserved word - we could use > "any" or others. > > The advantage of this approach is the readabililty and the fact that the > core of the step execution is unchanged. > > Cheers > > On 13/04/2012 17:31, Mauro Talevi wrote: > > Hi Joachim, > > > > let's forget for a second the implementation details and focus on the > > textual story. You have a scenario: > > > > Given a user registers with any profile with username John and > > password topsecret > > And the system is using any locale > > When the user logs in using username John and password topsecret > > Then the user is greeted with the message containing the name John > > > > Your use case is that you want to repeat this scenario any number of > > times for different locales (or any other parameter), and consider the > > combinations of these parameters? If this is the case it's a > > question of finding a way of expressing these combinations in the > > story itself. > > > > What I find confusing that your "software architects" would specify > > the parameters as Java methods. That to me defeats in part the point > > of BDD where all the specification should be expressed in the story > > itself. > > > > Cheers > > > > On 13/04/2012 16:45, joachim.nils...@molybden.se wrote: > >> > >> Hi all > >> I would like to trigger a discussion regarding different types of > >> data driven testing. > >> > >> What people normally mean by data driven test is a test where the > >> test designer sets up a number of data scenarios that will be tested. > >> This feature is nicely implemented using parametrised scenarios in > >> JBehave. I tried it and think that it gives excellent help to > >> decrease testcase writing when we have known test designs. And I > >> think that for 90% of all products, this is more than enough. > >> > >> However, I have seen complex products where development is being done > >> by hundereds of developers and testers at the same time. Complex > >> products that has support from several software architects working in > >> parallel. In these products, test gap may be created from feature > >> interference. Where different teams and different test teams does not > >> have enough deep knowledge of the oter teams features to make a full > >> test coverage analysis and implementation. Even with good tools > >> available, it is hard to be sure that all branches in the code are > >> covered. > >> > >> The reason that I want to raise the discussion is that I have an idea > >> of a solution, and I want some feedback, improvements or simply > >> reasons why the solution is a bad idea. > >> > >> My thoughts is to let the software architects be responsible for > >> defining existing features of the system. And this definition from a > >> JBehave perspective is to tag methods with an annotation indicating > >> that the method is responsible for providing possible variants > >> belonging to a specified category. > >> > >> Say for example that you have a system where people can be > >> registered. With the registration, they can be assigned different > >> profiles which contain different set of permissions to the system. > >> > >> Some features are still valid for all of the users, regardless of > >> which profile they have, for example login where the user is greeted > >> by name. > >> > >> I will try to give the example as a scenario, and i will use a new > >> keyword 'any' which is used to lookup a data category: > >> > >> > >> Given a user registers with any profile with username John and > >> password topsecret > >> And the system is using any locale > >> When the user logs in using username John and password topsecret > >> Then the user is greeted with the message containing the name John > >> > >> > >> The implementing method annotations will look like: > >> > >> @Given("a user registers with $profile with username $name and > >> password $password") > >> @Given("the system is using $locale") > >> @When("the user logs in using username $name and password $password") > >> @Then("the user is greeted with the message containing the name $name") > >> > >> And the system architect provides the methods: > >> @DataCategory("locale") > >> public String se_SV(){ > >> return "se_SV"; > >> } > >> @DataCategory("locale") > >> public String en_EN(){ > >> return "en_EN"; > >> } > >> @DataCategory("profile") > >> public String profile_admin(){ > >> return Profile.admin; > >> } > >> @DataCategory("profile") > >> public Profile profile_user(){ > >> return Profile.user; > >> } > >> > >> An idea is also to let JBehave decide in runtime the number of tests > >> to be performed by defining the test strategy by meta tags. For > >> example a random strategy will give only one testcase but with random > >> values. An exhaustive strategy will give all variants (four different > >> tests based on the above definition). > >> > >> The benefit of this feature is when the software architect decides to > >> add support for another language by adding a new data provider, > >> JBehave will create and run the tests already defined. : > >> > >> @DataCategory("locale") > >> public String fr_CA(){ > >> return "fr_CA"; > >> } > >> > >> The danger in this approach is obvious. The number of testcases > >> generated can be very large. But that is where we can add some more > >> real value by implementing test strategies like pair-wize and > >> strategys based on execution history or based on which development > >> team committed a specific feature. > >> > >> I have sent a proof of concept in a patch to Mauro containing the > >> implementation of the strategies 'random' and 'exhaustive' since they > >> were the easiest to implement. > >> > >> This step is to gather your feedback and input. Is this a feature > >> that will improve JBehave or will it obfuscate it and make it harder > >> to use? > >> > >> Best regards, > >> Joachim Nilsson > >> > > > > > > --------------------------------------------------------------------- > > To unsubscribe from this list, please visit: > > > > http://xircles.codehaus.org/manage_email > > > > > > > --------------------------------------------------------------------- > To unsubscribe from this list, please visit: > > http://xircles.codehaus.org/manage_email > >