Test Knime workflows from a Junit test.
The Knime Testing Framework can run a test workflow either:
- Inside Knime, if you right-click on a workflow in your local workspace, you can select "Run as workflow test".
- From the command line, using
knime -application org.knime.testing.NGTestflowRunner -root <workflow dir>
.
This repo gives you another option run a test workflow inside of a Junit @Test method declaration.
This project uses Eclipse Tycho to perform build steps.
Using the plugin requires several steps.
This plugin is available in the https://3d-e-chem.github.io/updates
update site.
To make use of in a Tycho based project add to the <repositories>
tag of the pom.xml
file the following:
<repository>
<id>3d-e-chem</id>
<layout>p2</layout>
<url>https://3d-e-chem.github.io/updates</url>
</repository>
In the Require-Bundle
attribute of the META-INF/MANIFEST.MF
of the tests module add
nl.esciencecenter.e3dchem.knime.testing.plugin;bundle-version="[1.0.0,2.0.0)",
org.knime.testing;bundle-version="[4.0.0,6.0.0)",
Create a test workflow as described in the "Testing Framework" manual.
Place the workflow as a directory inside the src/knime/
directory of the tests module.
Create a new test class and inside the class put the following:
@Rule
public ErrorCollector collector = new ErrorCollector();
private TestFlowRunner runner;
@Before
public void setUp() {
TestrunConfiguration runConfiguration = new TestrunConfiguration();
runner = new TestFlowRunner(collector, runConfiguration);
}
@Test
public void test_simple() throws IOException, InvalidSettingsException, CanceledExecutionException,
UnsupportedWorkflowVersionException, LockFailedException, InterruptedException {
File workflowDir = new File("src/knime/my-workflow-test");
runner.runTestWorkflow(workflowDir);
}
This will test the workflow put in src/knime/my-workflow-test
in the previous step.
This will run minimal checks, to check more configure runConfiguration
object.
For example add some more checks by adding
runConfiguration.setTestDialogs(true);
runConfiguration.setReportDeprecatedNodes(true);
runConfiguration.setCheckMemoryLeaks(true);
mvn verify
The test results can be found in the T E S T S
section of the standard output.
As you might have noticed during the previouse step, running test will quickly show some dialogs and windows. To show graphical user elements an X-server is required, sadly GitHub actions does not run an X-server. A temporary X-server can be run with Xvfb, which is luckily available on all GitHub actions environments.
Prepend xvfb-run
before the mvn verify
command in the .github/workflows/*.yml
file.
For example
script: xvfb-run mvn verify -B
mvn verify
An Eclipse update site will be made in p2/target/repository/
repository.
The update site can be used to perform a local installation.
By default this will compile against KNIME AP v5.1, using the KNIME-AP-5.1 file.
To build instead for KNIME AP v4.7, use:
mvn verify -Dknime.version=4.7
Steps to get development environment setup based on https://github.com/knime/knime-sdk-setup#sdk-setup:
- Install Java 17
- Install Eclipse for RCP and RAP developers
- Configure Java 17 inside Eclipse Window > Preferences > Java > Installed JREs
- Import this repo as an Existing Maven project
- Activate target platform by going to Window > Preferences > Plug-in Development > Target Platform and check the
KNIME Analytics Platform (5.1) - nl.esciencecenter.e3dchem.knime.testing.targetplatform/KNIME-AP-5.1.target
target definition.
During import the Tycho Eclipse providers must be installed.
- Update versions in pom files with
mvn org.eclipse.tycho:tycho-versions-plugin:set-version -DnewVersion=<version>-SNAPSHOT
command. - Commit and push changes
- Create package with
mvn package
, will create update site inp2/target/repository
- Append new release to an update site
- Make clone of an update site repo
- Append release to the update site with
mvn install -Dtarget.update.site=<path to update site>
- Commit and push changes in this repo and update site repo.