From 04:00 PM CDT – 08:00 PM CDT (09:00 PM UTC – 01:00 AM UTC) Tuesday, April 16, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

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
(5,609 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
(5,236 Views)
Please post here or as a gist on github. thanks!
0 Kudos
Message 3 of 4
(5,230 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
(5,225 Views)