Concordion Logo in Green

Presented by @nigel_charman
Project Lead @concordion

Concordion is a test runner
for executable specifications
that creates beautiful living documentation

Use cases

  1. Integrating specification and checking of key scenarios (SBE/BDD/ATDD)
  2. Creating great documentation of your automated checks
Open Source Logo
Apache 2.0 License
Contributors Contributors Contributors

How it works

how it works image

What's new in 2.0?

Markdown support

Markdown is a simple, natural format for creating rich text:

                ## This is a H2

                This is a paragraph

                * This is a
                * bullet point list

                This is an [example](example.html "Title") link

                | Table | Heading |
                | ----- | ------- |
                | Table | Row 1   |
                | Table | Row 2   |

Markdown commands

Set [Jane Smith](- '#name')
Execute [broken](- '#result = split(#name)')
Assert Equals [Jane](- '?=#result.firstName')

when previewed...
preview showing concordion commands when you hover over markdown links

Execute on a table

    | [split][][Full Name][full] | [First][first] | [Last][last] |
    | -------------------------- | -------------- | ------------ |
    | John Smith                 | John           | Smith        |
    | David Peterson             | David          | Peterson     |

    [split]: - "#result = split(#fullName)"
    [full]:  - "#fullName"
    [first]: - "?=#result.firstName"
    [last]:  - "?=#result.lastName"

Verify Rows

|[_check GST_][][Sub Total][]|[GST][]|
| -------------------------- | ----: |
|                         100|     15|
|                         500|     75|
|                          20|      2|

[_check GST_]: - "c:verifyRows=#detail:getInvoiceDetails()"
[Sub Total]:   - "?=#detail.subTotal"
[GST]:         - "?=#detail.gst"

Run another spec

[Shipping](shipping.html "c:run")


[Shipping]( "c:run")

You can run HTML specs from Markdown and vice versa


### [Basic Example](- "basic")

The full name [Jane Smith](- "#name") 
is [broken](- "#result = split(#name)") 
into first name [Jane](- "?=#result.firstName") 
and last name [Smith](- "?=#result.lastName").
when run...
screenshot showing JUnit test called basic

Scoped Fields

Fields are now reset for each example (similar to JUnit).

If you want to keep field for whole specification:

private ScopedObjectHolder<Browser> browserHolder = new ScopedObjectHolder<Browser>() {
    public Browser create() {
        Browser browser = new Browser();
        extension.setScreenshotTaker(new SeleniumScreenshotTaker(browser));
        return browser;

    protected void destroy(Browser browser) {

See concordion-scope-examples project for examples.

Markdown Editors

Markdown can be created/edited with all sorts of tools:

  • Github, Bitbucket, etc
  • Mindmapping tools - eg. MindMup
  • IDEs - eg. Eclipse, IDEA
  • Editors - eg. Notepad++, Sublime

Updated IntelliJ IDEA Plugin

animated gif showing intellij plugin support

IntelliJ IDEA

Concordion Support plugin

Surround with Concordion command Alt - Enter
Create method from usage Alt - Enter
Auto complete method and variable names Ctrl - space
Go to declaration Ctrl - left-click
Navigate spec <-> fixture Ctrl - Shift - s
Run tests (from spec or fixture) Ctrl - Shift - F10

HTML only

Find usages Ctrl - F7
Rename Shift - F6



storyboard image screenshot image logging tooltip image log viewer image

Excel, Parallel Runner,
Storyboard, Screenshot,
Logging Tooltip, Log Viewer
and more...

Learn more


This presentation -

Fork me on GitHub