Continuous Integration

cancel
Showing results for 
Search instead for 
Did you mean: 

Contionius Integration and TestStand

Hi All,

 

I have a problem - is there any way of making any unit/functional tests for TestStand sequences? I know that for VIs there are at least several ways of testing, and what with TS? 

0 Kudos
Message 1 of 4
(6,591 Views)

In case you're still interested in this - you could write your own tests using the TestStand API - but realistically, the Sequence Analyzer is the way to go. There are plenty of built in rules, and you can also create your own rules to trigger a warning or an error.

 

The stand alone analyzer app has a command line interface so this can be automated. The output report is XML, which can be parsed pretty easily or converted to another format with a custom stylesheet. I have a stylesheet that will convert the output to JUnit if anyone is interested.

 

 

https://www.linkedin.com/in/trentweaver
0 Kudos
Message 2 of 4
(6,218 Views)
Please post here or as a gist on github. thanks!
0 Kudos
Message 3 of 4
(6,212 Views)

I wrote this for TS 2016. It should be very similar for previous versions, but you'll probably need to update the namespaces.

 

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ts="http://www.ni.com/TestStand/16.0.0/PropertyObjectFile" exclude-result-prefixes="ts">
  <xsl:strip-space elements="*"/>
  <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
  <xsl:template match="ts:teststandfileheader/ts:TEOLEDataSource/ts:ReportData/ts:subprops">
    <testsuite>
      <xsl:attribute name="name">Sequence Analyzer Results</xsl:attribute>
      <xsl:attribute name="tests">
        <xsl:value-of select="substring-before(substring-after(ts:RulesUsedForAnalysis/ts:value/@ubound,'['),']')+1"/>
      </xsl:attribute>
      <xsl:for-each select="ts:RulesUsedForAnalysis/ts:value/ts:value/ts:Obj">
        <xsl:variable name="ruleId" select="ts:subprops/ts:Id/ts:value"/>
        <xsl:variable name="CorrespondingMessage" select="/ts:teststandfileheader/ts:TEOLEDataSource/ts:ReportData/ts:subprops/ts:Messages/ts:value/ts:value/ts:Obj/ts:subprops[ts:RuleId/ts:value = $ruleId]"/>
        <xsl:choose>
          <xsl:when test="$CorrespondingMessage">
            <testcase>
              <xsl:attribute name="name">
                <xsl:value-of select="ts:subprops/ts:Name/ts:value"/>
              </xsl:attribute>
              <xsl:attribute name="classname">
                <xsl:value-of select="$ruleId"/>
              </xsl:attribute>
              <xsl:if test="ts:subprops/ts:Severity/ts:value=0">
                <error>
                  <xsl:attribute name="message">
                    <xsl:value-of select="normalize-space($CorrespondingMessage/ts:Text)"/>
                  </xsl:attribute>
                </error>
              </xsl:if>
              <xsl:if test="ts:subprops/ts:Severity/ts:value=1">
                <failure>
                  <xsl:attribute name="message">
                    <xsl:value-of select="normalize-space($CorrespondingMessage/ts:Text)"/>
                  </xsl:attribute>
                </failure>
              </xsl:if>
            </testcase>
          </xsl:when>
          <xsl:otherwise>
            <testcase>
              <xsl:attribute name="name">
                <xsl:value-of select="ts:subprops/ts:Name/ts:value"/>
              </xsl:attribute>
              <xsl:attribute name="classname">
                <xsl:value-of select="$ruleId"/>
              </xsl:attribute>
            </testcase>
          </xsl:otherwise>
        </xsl:choose>
      </xsl:for-each>
    </testsuite>
  </xsl:template>
</xsl:stylesheet>

 

 

 You can apply the stylesheet from the command line with MSXSL.exe:

msxsl <path to analyzer report> <path to example stylesheet> -o <path to output xml file>

I'll be posting some related examples in the coming weeks.

 

Hope this helps!

Trent

 

https://www.linkedin.com/in/trentweaver
Message 4 of 4
(6,207 Views)