<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Waldemar's blog &#187; xpath</title>
	<atom:link href="http://blog.testsautomation.com/tag/xpath/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.testsautomation.com</link>
	<description>Live fast, die old...</description>
	<lastBuildDate>Mon, 02 Jan 2012 20:36:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Validating Web Service response with XPath</title>
		<link>http://blog.testsautomation.com/2009/05/validating-web-service-response-with-xpath/</link>
		<comments>http://blog.testsautomation.com/2009/05/validating-web-service-response-with-xpath/#comments</comments>
		<pubDate>Mon, 18 May 2009 15:34:04 +0000</pubDate>
		<dc:creator>Waldemar</dc:creator>
				<category><![CDATA[LoadRunner]]></category>
		<category><![CDATA[web service]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[xpath]]></category>

		<guid isPermaLink="false">http://blog.testsautomation.com/?p=255</guid>
		<description><![CDATA[The easiest way for checking web service response in HP LoadRunner is by using XPath query language. LR API contains few functions designed especially for dealing with XML. lr_xml_get_values&#40;&#41; &#160;//Retrieves values of XML elements found by a query lr_xml_set_values&#40;&#41; &#160;//Sets the values of XML elements found by a query lr_xml_extract&#40;&#41; &#160;//Extracts XML string fragments from [...]]]></description>
			<content:encoded><![CDATA[<p>The easiest way for checking web service response in HP LoadRunner is by using XPath query language. LR API contains few functions designed especially for dealing with XML. </p>
<div class="codesnip-container" >
<div class="codesnip" style="font-family: monospace;">
<ol>
<li class="li1">
<div class="de1">lr_xml_get_values<span class="br0">&#40;</span><span class="br0">&#41;</span> &nbsp;<span class="co1">//Retrieves values of XML elements found by a query</span></div>
</li>
<li class="li1">
<div class="de1">lr_xml_set_values<span class="br0">&#40;</span><span class="br0">&#41;</span> &nbsp;<span class="co1">//Sets the values of XML elements found by a query</span></div>
</li>
<li class="li1">
<div class="de1">lr_xml_extract<span class="br0">&#40;</span><span class="br0">&#41;</span> &nbsp;<span class="co1">//Extracts XML string fragments from an XML string</span></div>
</li>
<li class="li1">
<div class="de1">lr_xml_delete<span class="br0">&#40;</span><span class="br0">&#41;</span> &nbsp;<span class="co1">//Deletes fragments from an XML string</span></div>
</li>
<li class="li1">
<div class="de1">lr_xml_replace<span class="br0">&#40;</span><span class="br0">&#41;</span> &nbsp;<span class="co1">//Replaces fragments of an XML string</span></div>
</li>
<li class="li1">
<div class="de1">lr_xml_insert<span class="br0">&#40;</span><span class="br0">&#41;</span> &nbsp;<span class="co1">//Inserts a new XML fragment into an XML string</span></div>
</li>
<li class="li1">
<div class="de1">lr_xml_find<span class="br0">&#40;</span><span class="br0">&#41;</span> &nbsp;<span class="co1">//Verifies that XML values are returned by a query</span></div>
</li>
<li class="li1">
<div class="de1">lr_xml_transform<span class="br0">&#40;</span><span class="br0">&#41;</span> &nbsp;<span class="co1">//Applies Extensible Stylesheet Language (XSL) Transformation to XML data</span></div>
</li>
</ol>
</div>
</div>
<p>Now, lets say we have sample web service for on-line book store and we want to ask what is the author for book id 123. Our web service can send following XML as a response:</p>
<div class="codesnip-container" >
<div class="codesnip" style="font-family: monospace;">
<ol>
<li class="li1">
<div class="de1">&lt;books&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &lt;book&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &lt;id&gt;<span class="nu0">123</span>&lt;/id&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &lt;author&gt;John Smith&lt;/author&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &lt;title&gt;Working with Legacy code&lt;/title&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &lt;publisher&gt;Microsoft&lt;/publisher&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &lt;/book&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;/books&gt;</div>
</li>
</ol>
</div>
</div>
<p>For checking if the &#8220;author&#8221; element within XML response contains &#8220;John Smith&#8221; value we will use lr_xml_get_values() function. Here is the code that calls web service and checks if the value is as expected:</p>
<div class="codesnip-container" >
<div class="codesnip" style="font-family: monospace;">
<ol>
<li class="li1">
<div class="de1">Action<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;web_add_header<span class="br0">&#40;</span><span class="st0">&quot;SOAPAction&quot;</span>, <span class="st0">&quot;<span class="es0">\&quot;</span>CallMe<span class="es0">\&quot;</span>&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;lr_start_transaction<span class="br0">&#40;</span><span class="st0">&quot;AUTHOR&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;soap_request<span class="br0">&#40;</span><span class="st0">&quot;StepName=Sample Soap Request&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&quot;ExpectedResponse=ANY&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&quot;URL=http://foo.com/api&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&quot;SOAPEnvelope= &quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&quot;&lt;?xml version=<span class="es0">\&quot;</span>1.0<span class="es0">\&quot;</span> encoding=<span class="es0">\&quot;</span>utf-8<span class="es0">\&quot;</span>?&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&quot;&lt;soap:Envelope &quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&quot;xmlns:soap=<span class="es0">\&quot;</span>http://schemas.xmlsoap.org/soap/envelope/<span class="es0">\&quot;</span> &gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&quot;&lt;soap:Body soap:encodingStyle=<span class="es0">\&quot;</span>http://schemas.xmlsoap.org/soap/encoding/<span class="es0">\&quot;</span>&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&quot;&lt;GetBookDetails&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&quot;&lt;idValue&gt;123&lt;/idValue&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&quot;&lt;/GetBookDetails&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&quot;&lt;/soap:Body&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&quot;&lt;/soap:Envelope&gt;&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&quot;Snapshot=t765765765.inf&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&quot;ResponseParam=Response_Xml&quot;</span>,LAST<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;lr_xml_get_values<span class="br0">&#40;</span><span class="st0">&quot;XML={Response_Xml}&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;ValueParam=Author_Name&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;Query=/books/book/author&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; LAST<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;lr_output_message<span class="br0">&#40;</span>lr_eval_string<span class="br0">&#40;</span><span class="st0">&quot;Author is = {Author_Name}&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span>strcmp<span class="br0">&#40;</span>lr_eval_string<span class="br0">&#40;</span><span class="st0">&quot;{Author_Name}&quot;</span><span class="br0">&#41;</span>,<span class="st0">&quot;John Smith&quot;</span><span class="br0">&#41;</span> == <span class="nu0">0</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;&nbsp; &nbsp;lr_end_transaction<span class="br0">&#40;</span><span class="st0">&quot;AUTHOR&quot;</span>, LR_PASS<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;&nbsp; &nbsp;lr_end_transaction<span class="br0">&#40;</span><span class="st0">&quot;AUTHOR&quot;</span>, LR_FAIL<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="kw1">return</span> <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
</div>
<p>First argument in lr_xml_get_values() call is parameter name that holds response XML. Second argument in name of new parameter that will hold author value extracted from response XML. Third argument is XPath query that extracts author element value.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.testsautomation.com/2009/05/validating-web-service-response-with-xpath/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

