Those of you that know me or have been following the blog will know that for a while now I have been practicing test driven development in LabVIEW.
This is great, most of my LabVIEW projects now have 50-100 tests attached to them that check various parts of the system are working, but of course, this is only when I remember to run them!
We are all fallible, when it comes to 6pm and I want to go home, I add my last flourish, commit to source code and go home, forgetting to test.
(Well the voice is an email, but you get the idea)
I get no such prompt with LabVIEW.
There have been a number of projects over the years to do this. JKI have a system that we managed to set up and get working some years ago but it depended on some intermediate files and took a bit of fiddling a couple of years ago.
In order to try and make it easier, a couple of years ago I learnt some Java to try and build a plugin for Jenkins which could talk to some corresponding LabVIEW code over TCP. But it was over-complicated and I was over-ambitious and never finished it.
The all-powerful command line interface!
Although most people have long given up on it (If you are a LabVIEW developer, your probably more of a GUI kind of person) it is still a common and straightforward way to get two programs to talk together (it forms the backbone of the Unix philosophy)
If we can use the command line, we can talk to Jenkins and any other technology which comes up for the next decade at least.
The problem is LabVIEW’s command line interface is quite basic. You can recieve calling arguments but can’t recieve or send text (stdIn and StdOut) and can’t return an exit code. That last bit is critical since it is how one program determines if another was successful, therefore how we signal to Jenkins whether we have succeeded or failed our tests.
JKI solved this problem through the use of batch files and text files but I wanted to try a different method.
I created LabVIEW CLI. This has two components:
- A C# console application. This can run on the command line and basically proxies the interface through TCP to…
- A corresponding LabVIEW library that gives us the ability to access the command line.
The philosophy is that the C# application is very small but can be called directly by Jenkins or any other language and will then launch LabVIEW or our LabVIEW built application.
I’m hoping that by keeping it quite simple, it can become a building block for CI tools and others for LabVIEW.
So if your interested you can check out the builds on github and give it a go. I am not currently using this in anger so please don’t bet your job on it working! But early tests look good!
You will need to install the C# application with the installer and then there is a vip package for the LabVIEW library. Look at the readme on github and happy building!
Any issues you can create bugs on the github page or comment on the NI community page.