JBehave - Ignoring failures in examples - jbehave

I have many scenarios with Examples. In case of failure for an "Example", JBehave stop executing the scenario for remaining list of examples. e.g.
Given a record with classification
When I view the page
Then I see the record has type
Examples:
|classification|type|
|classification_1|type_1|
|classification_2|type_2|
|classification_3|type_3|
|classification_4|type_4|
If the scenario fails for
|classification_2|type_2|
then it will not execute 3 and 4.
Is there a way to configure JBehave to execute all the examples even in cas of failures?
Thanks.

After debugging with JBehave source code, looks like it is not possible. In StoryRunner class, in case of failure it uses instance of "SomethingHappened implements State" which doesn't look at any strategy just does the following:
StepResult result = step.doNotPerform(scenarioFailure);
result.describeTo(reporter.get());
Hence we see step NOT PERFORMED in the report.
I wish I'm wrong and somebody more knowledgeable can correct me.

This seems to be similar to a post I have just answered. Please check your configuration. More information can be found here
JBehave : How to ignore failure in scenario

Related

Not able to skip the scenarios in story while extending SerenityStories

While creating new scenarios I only want to test the scenario I am currently working with. For this purpose I want to use the Meta: #skip tag before my scenarios. As I found out I have to use the embedder to configure the used meta tags, so I tried:
configuredEmbedder().useMetaFilters(Arrays.asList("-skip"));
but actually this still has no effect on my test scenarios
But now I get the message [pool-1-thread-1] INFO net.serenitybdd.core.Serenity - TEST IGNORED but the scenario is still executed. Only in the result page I get the info that this scenario is ignored (but still executed). Is there a way to SKIP the scenario so it won't run?
Here is my scenario description Meta: #skip Given something When something Then something
Try with the latest version of serenity-bdd since there is an implementation which is related to your query. refer this.

How to add JBehave BeforeStory AfterStory in a story file

In JBehave, BeforeStory or AfterStory annotation can be added in Step level. So if there are multiple Steps classes with BeforeStory annotation, all those BeforeStory annotated methods will be executed before the each and every story start (which is not needed).
In JUnit we can add or leave BeforeClass or Before as needed in test classes separately. So what I need is a way to add BeforeStory or AfterStory in a story level just like JUnit test class.
Is there a way to add BeforeStory as a lifecycle in a story file ? or any alternative solution ?
Following example shows only adding Before in the lifecycle.
http://jbehave.org/reference/stable/story-syntax.html
Lifecycle:
Before:
Given a step that is executed before each scenario
After:
Outcome: ANY
Given a step that is executed after each scenario regardless of outcome
Outcome: SUCCESS
Given a step that is executed after each successful scenario
Outcome: FAILURE
Given a step that is executed after each failed scenario
Thanks.
In my opinion jbehave does not have such a facility as of now. But try the following - in the class file execute a Given to initialize users and in the end of the story scenarios define another Given to release resources. I know this approach breaks the BDD paradigm of whole and business defined scenarios, but atleast is a work around.
To ensure it executes first and last you could use (priority=1) for initUsers() and (priority=n) for cleanup().
As you have quoted from the documentation, Before and After steps are executed after each scenario and not step as was stated. There is no facility to have a 'before story' step defined in a story file.
An alternative to define something in a story file is to annotate method with #BeforeStory as described in: http://jbehave.org/reference/stable/annotations.html

Scala inconclusive Assertion

I am writing an integration test in Scala. The test starts by searching for a configuration file to get access information of another system.
If it finds the file then the test should run as usual, however if it does not find the file I don't want to fail the test, I would rather make it inconclusive to indicate that the test can not run because of missing configurations only.
In C# I know there is Assert.Inconclusive which is exactly what I want, is there anything similar in Scala?
I think what you need here is assume / cancel (from "Assumptions" section, found here):
Trait Assertions also provides methods that allow you to cancel a test. You would cancel a test if a resource required by the test was unavailable. For example, if a test requires an external database to be online, and it isn't, the test could be canceled to indicate it was unable to run because of the missing database.

Neat way to run same protractor test with different configurations

I would like to run the same suite of tests with multiple configurations, but I don't know how to queue the same test. A simple loop will cause tests to try and execute at the same time, which messes up with you are clicking and waiting for modals etc.
e.g. this does not work (coffeescript)
["Apple", "Microsoft"].forEach (e,i,l) ->
describe "Page is working...", ->
it "...has correct title", ->
expect browser.getTitle()
.toBe e + "'s website"
I see that describe returns an object, which I hoped was promise but its not. I started writing the same based on promises but its looking messy. Is there any other way I'm missing?
I'm not familiar with coffeescript (think that's what you're using right?), but I believe what you're asking is how to write parametrized tests with protractor.
There is an issue open requesting for this: https://github.com/angular/protractor/issues/620
For now that issue is still unresolved but this question should give you some ideas about how to approach the issue in your code: How do I open multiple windows or operate multiple instances

Need Help on Page Object Model Implementation

I am in a process of implementing Page object Model, I have one query regarding it, please see below:
I have created page files which is having locators and methods for the page, I have spec file in which I am doing the assertions by calling these methods. My question is that for one page I have over 100 test cases, now should I create single assertion file for single tests or should I create 100 assertion file for 100 test.
Please let me know what is the best way to manage it.
Regards,
Manan
I think it makes the most sense to group tests into files by functionality. It's hard to run only some tests from a file, so split out any groups of tests you think you might want to run independently. Are some of them suitable for a quick smoke test suite? Maybe those should be in a separate file.
You shouldn't need to create a new file for neither every assertion nor test case. I am confused by your question because in my understanding, the assertion is part of the test case, and test+assertion are part of the same function (assertion being the end goal of the test).
Regarding the Page Object Model: The important part of the pattern is ensuring the separation of page/DOM detail from test flow (i.e. tests should possess no knowledge of the DOM, but instead rely on page objects to act on actual pages).