With TestNG you can define your scenarios in testsuites (a group of related tests) in xml files. For example, we have a folder for each Scrum sprint, and in them we place one file for each User Story. <?xml version="1.0" encoding="UTF-8"?> <!-- US XX: As an user I want to access to the intranet with a login form in order to access to private resources --> <suite name="IntranetLogin" enabled="true"> <test name="LoginChecking" order-by-instances="true"> <classes> <class name="com.company.LoginTestSet" /> <methods> <include name="loginWithExistingUser" /> <include name="loginWithNonExistingUser" /> <include name="loginWithWrongPassword" /> <include name="loginWithBlockedUser" /> <include name="loginWithEmptyFields" /> </methods> </classes> </test> ... </suite> You can define the tests steps in the javadoc of each test method so they will appear in the html documentation that is auto generated when you compile. For example: /** * Description: Should display an error if the user try to log in with an incorrect password * * Test steps: * 1) Go to the login page * 2) Write an username * 3) Write an incorrect password * 4) Click on Submit button * * Expected results: * - An error message is displayed * - The browser remains in the login page * */ And if you want a more expressive way to write the test steps you can take a look at Doxygen.