For all tests you must make sure that you provide precise instructions that a computer without general intelligence or creativity can run. In other words, you have to precisely define all parameters.
Example:
Feature: review
In order to write or delete a review to a product
As a buyer
I need to be able to write or delete my comment to a product that I purchased
Scenario: write my comment
Given I have the "widget" product that costs "100$" and has the "This is a widget" description
And I am on "/Catalog"
And I click "widget"
And I click "add to cart"
And I check out my cart
When I am on "/Profile/purchases"
And I click "widget"
And I click "write review"
And I enter "Great product" in the "comment" input
And I click "Send!"
And I am on "/Catalog"
And I click "widget"
Then I see "Reviews:"
And I see "Great product"
For each of the tests, you have to be able to control the data that you verify.
"I have a product" is not a good enough statement: you must be able to tell us which product you have.
You have to place all variables between double quotes (")
Feature: advertise
In order to promote my products
As a vendor
I need to be able to promote my products
Scenario: advertise my product
Given I am logged in a as "admin" with the password "adminpass"
And I have the "widget" product that costs "100$" and has the "This is a widget" description
And I have "10000" amount balance
When I click "advertise"
And I see "100.00$"
And I click "pay"
Then I am on "/Profile"
And I see "Balance: 9900.00$"
And I am logged in a as "user" with the password "userpass"
And I see "Promotion"
And I see "widget"
And I see "100.00$"