Remove the older utilities that I used to use for load testing. Replaced some time ago by those in utilities/LoadTesting
This commit is contained in:
parent
1d3dc28c32
commit
251d7fff7a
28 changed files with 0 additions and 7114 deletions
|
@ -1,235 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
|
||||
|
||||
<!-- ======================================================================
|
||||
|
||||
vivoLoadTesting
|
||||
Run JMeter tests and summarize the results.
|
||||
|
||||
====================================================================== -->
|
||||
<project name="vivoLoadTesting" default="describe">
|
||||
<description>
|
||||
Run JMeter tests and summarize the results.
|
||||
</description>
|
||||
|
||||
<taskdef name="jmeter"
|
||||
classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"
|
||||
classpath="lib/ant-jmeter-1.0.9.jar" />
|
||||
|
||||
<tstamp>
|
||||
<format property="TIMESTAMP" pattern="MMMM dd, yyyy hh:mm a" />
|
||||
</tstamp>
|
||||
|
||||
<!-- =================================
|
||||
target: describe
|
||||
================================= -->
|
||||
<target name="describe" description="--> Describe the targets (this is the default).">
|
||||
<echo>
|
||||
all - Run the tests and summarize the output.
|
||||
clean - Remove any existing output and summaries.
|
||||
run - Just run the tests.
|
||||
report - Just summarize output from previously run tests.
|
||||
</echo>
|
||||
</target>
|
||||
|
||||
<!-- =================================
|
||||
target: all
|
||||
================================= -->
|
||||
<target name="all"
|
||||
depends="run, report"
|
||||
description="--> Run the tests and summarize the output." />
|
||||
|
||||
<!-- =================================
|
||||
target: clean
|
||||
================================= -->
|
||||
<target name="clean"
|
||||
depends="properties"
|
||||
description="--> Remove any existing output and summaries.">
|
||||
<delete dir="${results.dir}" />
|
||||
</target>
|
||||
|
||||
<!-- - - - - - - - - - - - - - - - - -
|
||||
target: properties
|
||||
- - - - - - - - - - - - - - - - - -->
|
||||
<target name="properties">
|
||||
<property name="source.dir" value="src" />
|
||||
<property name="build.dir" value=".build" />
|
||||
<property name="tests.dir" value="tests" />
|
||||
<property name="properties.file" location="loadtesting.properties" />
|
||||
|
||||
<fail message="You must create a "${properties.file}" file.">
|
||||
<condition>
|
||||
<not>
|
||||
<available file="${properties.file}" />
|
||||
</not>
|
||||
</condition>
|
||||
</fail>
|
||||
|
||||
<property file="${properties.file}" />
|
||||
|
||||
<fail unless="test.name" message="${properties.file} must contain a value for test.name" />
|
||||
|
||||
<fail unless="jmeter.home.dir"
|
||||
message="${properties.file} must contain a value for jmeter.home.dir" />
|
||||
|
||||
<fail unless="webapp.host"
|
||||
message="${properties.file} must contain a value for webapp.host" />
|
||||
<fail unless="webapp.port"
|
||||
message="${properties.file} must contain a value for webapp.port" />
|
||||
<fail unless="webapp.name"
|
||||
message="${properties.file} must contain a value for webapp.name" />
|
||||
|
||||
<fail unless="data.dir" message="${properties.file} must contain a value for data.dir" />
|
||||
|
||||
<!-- If no value was provided, store the results here. -->
|
||||
<property name="results.dir" value=".results" />
|
||||
|
||||
<!-- If no value was provided, run a single thread -->
|
||||
<property name="threads" value="1" />
|
||||
|
||||
<!-- If no value was provided, run everything 10 times per thread -->
|
||||
<property name="iterations" value="10" />
|
||||
|
||||
<!-- If no value was provided, use this as the default namespace -->
|
||||
<property name="default.namespace" value="http://vivo.cornell.edu/individual/" />
|
||||
|
||||
<property name="webapp.url" value="http://${webapp.host}:${webapp.port}/${webapp.name}" />
|
||||
|
||||
<path id="xslt.classpath">
|
||||
<pathelement location="${jmeter.home.dir}/lib/xalan-2.7.1.jar" />
|
||||
<pathelement location="${jmeter.home.dir}/lib/serializer-2.7.1.jar" />
|
||||
<pathelement location="${jmeter.home.dir}/lib/xercesImpl-2.9.1.jar" />
|
||||
</path>
|
||||
</target>
|
||||
|
||||
<!-- - - - - - - - - - - - - - - - - -
|
||||
target: prepare
|
||||
- - - - - - - - - - - - - - - - - -->
|
||||
<target name="prepare" depends="properties">
|
||||
<mkdir dir="${build.dir}" />
|
||||
<mkdir dir="${results.dir}" />
|
||||
</target>
|
||||
|
||||
<!-- =================================
|
||||
target: run
|
||||
================================= -->
|
||||
<target name="run" depends="prepare" description="--> Just run the tests.">
|
||||
<delete file="${results.dir}/${test.name}.jtl" />
|
||||
<delete file="${results.dir}/${test.name}.html" />
|
||||
|
||||
<condition property="webapp.is.available">
|
||||
<http url="${webapp.url}" />
|
||||
</condition>
|
||||
<fail unless="webapp.is.available" message="Webapp is not available at ${webapp.url}" />
|
||||
|
||||
<property name="file.person.uris" location="${data.dir}/personUris.csv" />
|
||||
<fail message="File "${file.person.uris}" does not exist.">
|
||||
<condition>
|
||||
<not>
|
||||
<available file="${file.person.uris}" />
|
||||
</not>
|
||||
</condition>
|
||||
</fail>
|
||||
|
||||
<property name="file.infoResource.uris" location="${data.dir}/infoResourceUris.csv" />
|
||||
<fail message="File "${file.infoResource.uris}" does not exist.">
|
||||
<condition>
|
||||
<not>
|
||||
<available file="${file.infoResource.uris}" />
|
||||
</not>
|
||||
</condition>
|
||||
</fail>
|
||||
|
||||
<property name="file.author.uris" location="${data.dir}/authorUris.csv" />
|
||||
<fail message="File "${file.author.uris}" does not exist.">
|
||||
<condition>
|
||||
<not>
|
||||
<available file="${file.author.uris}" />
|
||||
</not>
|
||||
</condition>
|
||||
</fail>
|
||||
|
||||
<jmeter jmeterhome="${jmeter.home.dir}"
|
||||
testplan="${tests.dir}/${test.name}.jmx"
|
||||
resultlogdir="${results.dir}">
|
||||
<!-- Set parameters for the tests -->
|
||||
<property name="webapp.host" value="${webapp.host}" />
|
||||
<property name="webapp.port" value="${webapp.port}" />
|
||||
<property name="webapp.name" value="${webapp.name}" />
|
||||
<property name="iterations" value="${iterations}" />
|
||||
<property name="threads" value="${threads}" />
|
||||
<property name="file.person.uris" value="${file.person.uris}" />
|
||||
<property name="file.infoResource.uris" value="${file.infoResource.uris}" />
|
||||
<property name="file.author.uris" value="${file.author.uris}" />
|
||||
<property name="default.namespace" value="${default.namespace}" />
|
||||
|
||||
<!-- Set parameters for the output -->
|
||||
<property name="jmeter.save.saveservice.output_format" value="xml" />
|
||||
<property name="jmeter.save.saveservice.response_data.on_error" value="true" />
|
||||
<property name="jmeter.save.saveservice.url" value="true" />
|
||||
<property name="jmeter.save.saveservice.bytes" value="true" />
|
||||
|
||||
<!-- Show a summary line periodically, so we know its running. -->
|
||||
<property name="summariser.name" value="summary" />
|
||||
<property name="summariser.out" value="true" />
|
||||
<property name="summariser.log" value="true" />
|
||||
<property name="summariser.interval" value="10" />
|
||||
</jmeter>
|
||||
|
||||
</target>
|
||||
|
||||
<!-- =================================
|
||||
target: report
|
||||
================================= -->
|
||||
<target name="report" depends="prepare" description="--> Just summarize the output.">
|
||||
<!-- Can't use xslt task because it screws up on the xsl:sort tag -->
|
||||
<property name="report.in" location="${results.dir}/${test.name}.jtl" />
|
||||
<property name="report.out" location="${results.dir}/${test.name}.html" />
|
||||
<property name="report.style" location="${basedir}/jmeter-results-report.xsl" />
|
||||
|
||||
<java classname="org.apache.xalan.xslt.Process" classpathref="xslt.classpath">
|
||||
<arg value="-in" />
|
||||
<arg value="${report.in}" />
|
||||
<arg value="-out" />
|
||||
<arg value="${report.out}" />
|
||||
<arg value="-xsl" />
|
||||
<arg value="${report.style}" />
|
||||
</java>
|
||||
|
||||
<echo append="true" file="${report.out}">
|
||||
<![CDATA[<p>${TIMESTAMP}</p>]]>
|
||||
</echo>
|
||||
</target>
|
||||
|
||||
<!-- =================================
|
||||
target: merge
|
||||
================================= -->
|
||||
<target name="merge" depends="prepare" description="--> Merge summaries together">
|
||||
<javac srcdir="${source.dir}"
|
||||
destdir="${build.dir}"
|
||||
debug="true"
|
||||
deprecation="true"
|
||||
optimize="true"
|
||||
source="1.6">
|
||||
</javac>
|
||||
|
||||
<property name="merge.output.dir"
|
||||
location="/Development/JIRA issues/NIHVIVO-1129_Load_testing/mergerFiles/" />
|
||||
<property name="merge.input.dir"
|
||||
location="/Development/JIRA issues/NIHVIVO-1129_Load_testing/mergerFiles/results" />
|
||||
<property name="merge.input.filenames"
|
||||
value="ver_release1.1.1/SecondTests-rel-1-1-1.html, ver_trunkRdb/SecondTests-rel-1-2.html, ver_trunkSdb/SecondTests-rel-1-2.html" />
|
||||
|
||||
<java classname="edu.cornell.mannlib.vitro.utilities.loadtesting.reportmerger.ReportsMerger"
|
||||
fork="yes"
|
||||
failonerror="true">
|
||||
<classpath location="${build.dir}" />
|
||||
<arg value="${merge.output.dir}" />
|
||||
<arg value="${merge.input.dir}" />
|
||||
<arg value="${merge.input.filenames}" />
|
||||
</java>
|
||||
|
||||
<copy file="mergedResults.css" todir="${merge.output.dir}" />
|
||||
</target>
|
||||
|
||||
</project>
|
|
@ -1,37 +0,0 @@
|
|||
# -----------------------------------------------------------------------------
|
||||
#
|
||||
# VIVO load-testing properties
|
||||
#
|
||||
# This file is provided as example.loadtesting.properties.
|
||||
#
|
||||
# Save a copy of this file as loadtesting.properties, and edit the properties
|
||||
# as needed for your deployment.
|
||||
#
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
#
|
||||
# What test should we run?
|
||||
#
|
||||
test.name = SecondTests-rel-1-2
|
||||
|
||||
#
|
||||
# The base install directory for JMeter, and some JARs required by XSLT
|
||||
#
|
||||
jmeter.home.dir = /Users/jeb228/Downloads/JMeter/jakarta-jmeter-2.4
|
||||
|
||||
#
|
||||
# Where do we find the Vivo instance that we are testing?
|
||||
#
|
||||
webapp.host = localhost
|
||||
webapp.port = 8080
|
||||
webapp.name = vivo
|
||||
|
||||
#
|
||||
# Where is the data to test against?
|
||||
#
|
||||
data.dir = /eclipseVitroWorkspace/vivo/utilities/load-testing/tests
|
||||
|
||||
#
|
||||
# What's the default namespace (URIs are expressed as local-name only)
|
||||
#
|
||||
default.namespace = http://vivo.cornell.edu/individual/
|
|
@ -1,389 +0,0 @@
|
|||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
|
||||
<xsl:output method="html" indent="yes" encoding="US-ASCII" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" />
|
||||
|
||||
<!-- Defined parameters (overrideable) -->
|
||||
<xsl:param name="showData" select="'N'"/>
|
||||
|
||||
<xsl:template match="testResults">
|
||||
<html>
|
||||
<head>
|
||||
<title>Load Test Results</title>
|
||||
<style type="text/css">
|
||||
body {
|
||||
font:normal 68% verdana,arial,helvetica;
|
||||
color:#000000;
|
||||
}
|
||||
table tr td, table tr th {
|
||||
font-size: 68%;
|
||||
}
|
||||
table.details tr th{
|
||||
font-weight: bold;
|
||||
text-align:left;
|
||||
background:#a6caf0;
|
||||
white-space: nowrap;
|
||||
}
|
||||
table.details tr td{
|
||||
background:#eeeee0;
|
||||
white-space: nowrap;
|
||||
}
|
||||
h1 {
|
||||
margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
|
||||
}
|
||||
h2 {
|
||||
margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
|
||||
}
|
||||
h3 {
|
||||
margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
|
||||
}
|
||||
.Failure {
|
||||
font-weight:bold; color:red;
|
||||
}
|
||||
|
||||
|
||||
img
|
||||
{
|
||||
border-width: 0px;
|
||||
}
|
||||
|
||||
.expand_link
|
||||
{
|
||||
position=absolute;
|
||||
right: 0px;
|
||||
width: 27px;
|
||||
top: 1px;
|
||||
height: 27px;
|
||||
}
|
||||
|
||||
.page_details
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
|
||||
.page_details_expanded
|
||||
{
|
||||
display: block;
|
||||
display/* hide this definition from IE5/6 */: table-row;
|
||||
}
|
||||
|
||||
|
||||
</style>
|
||||
<script language="JavaScript"><![CDATA[
|
||||
function expand(details_id)
|
||||
{
|
||||
|
||||
document.getElementById(details_id).className = "page_details_expanded";
|
||||
}
|
||||
|
||||
function collapse(details_id)
|
||||
{
|
||||
|
||||
document.getElementById(details_id).className = "page_details";
|
||||
}
|
||||
|
||||
function change(details_id)
|
||||
{
|
||||
if(document.getElementById(details_id+"_image").src.match("expand"))
|
||||
{
|
||||
document.getElementById(details_id+"_image").src = "collapse.jpg";
|
||||
expand(details_id);
|
||||
}
|
||||
else
|
||||
{
|
||||
document.getElementById(details_id+"_image").src = "expand.jpg";
|
||||
collapse(details_id);
|
||||
}
|
||||
}
|
||||
]]></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<xsl:call-template name="pageHeader" />
|
||||
|
||||
<xsl:call-template name="summary" />
|
||||
<hr size="1" width="95%" align="left" />
|
||||
|
||||
<xsl:call-template name="pagelist" />
|
||||
<hr size="1" width="95%" align="left" />
|
||||
|
||||
<xsl:call-template name="detail" />
|
||||
|
||||
</body>
|
||||
</html>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="pageHeader">
|
||||
<h1>Load Test Results</h1>
|
||||
<table width="100%">
|
||||
<tr>
|
||||
<td align="left"></td>
|
||||
<td align="right">Designed for use with <a href="http://jakarta.apache.org/jmeter">JMeter</a> and <a href="http://ant.apache.org">Ant</a>.</td>
|
||||
</tr>
|
||||
</table>
|
||||
<hr size="1" />
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="summary">
|
||||
<h2>Summary</h2>
|
||||
<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
|
||||
<tr valign="top">
|
||||
<th>Tests</th>
|
||||
<th>Failures</th>
|
||||
<th>Success Rate</th>
|
||||
<th>Average Time</th>
|
||||
<th>Min Time</th>
|
||||
<th>Max Time</th>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<xsl:variable name="allCount" select="count(/testResults/httpSample)" />
|
||||
<xsl:variable name="allFailureCount" select="count(/testResults/httpSample[attribute::s='false'])" />
|
||||
<xsl:variable name="allSuccessCount" select="count(/testResults/httpSample[attribute::s='true'])" />
|
||||
<xsl:variable name="allSuccessPercent" select="$allSuccessCount div $allCount" />
|
||||
<xsl:variable name="allTotalTime" select="sum(/testResults/httpSample/@t)" />
|
||||
<xsl:variable name="allAverageTime" select="$allTotalTime div $allCount" />
|
||||
<xsl:variable name="allMinTime">
|
||||
<xsl:call-template name="min">
|
||||
<xsl:with-param name="nodes" select="/testResults/httpSample/@t" />
|
||||
</xsl:call-template>
|
||||
</xsl:variable>
|
||||
<xsl:variable name="allMaxTime">
|
||||
<xsl:call-template name="max">
|
||||
<xsl:with-param name="nodes" select="/testResults/httpSample/@t" />
|
||||
</xsl:call-template>
|
||||
</xsl:variable>
|
||||
<xsl:attribute name="class">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$allFailureCount > 0">Failure</xsl:when>
|
||||
</xsl:choose>
|
||||
</xsl:attribute>
|
||||
<td>
|
||||
<xsl:value-of select="$allCount" />
|
||||
</td>
|
||||
<td>
|
||||
<xsl:value-of select="$allFailureCount" />
|
||||
</td>
|
||||
<td>
|
||||
<xsl:call-template name="display-percent">
|
||||
<xsl:with-param name="value" select="$allSuccessPercent" />
|
||||
</xsl:call-template>
|
||||
</td>
|
||||
<td>
|
||||
<xsl:call-template name="display-time">
|
||||
<xsl:with-param name="value" select="$allAverageTime" />
|
||||
</xsl:call-template>
|
||||
</td>
|
||||
<td>
|
||||
<xsl:call-template name="display-time">
|
||||
<xsl:with-param name="value" select="$allMinTime" />
|
||||
</xsl:call-template>
|
||||
</td>
|
||||
<td>
|
||||
<xsl:call-template name="display-time">
|
||||
<xsl:with-param name="value" select="$allMaxTime" />
|
||||
</xsl:call-template>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="pagelist">
|
||||
<h2>Pages</h2>
|
||||
<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
|
||||
<tr valign="top">
|
||||
<th>URL</th>
|
||||
<th>Tests</th>
|
||||
<th>Failures</th>
|
||||
<th>Success Rate</th>
|
||||
<th>Average Time</th>
|
||||
<th>Min Time</th>
|
||||
<th>Max Time</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
<xsl:for-each select="/testResults/httpSample[not(@lb = preceding::*/@lb)]">
|
||||
<xsl:variable name="label" select="@lb" />
|
||||
<xsl:variable name="count" select="count(../httpSample[@lb = current()/@lb])" />
|
||||
<xsl:variable name="failureCount" select="count(../httpSample[@lb = current()/@lb][attribute::s='false'])" />
|
||||
<xsl:variable name="successCount" select="count(../httpSample[@lb = current()/@lb][attribute::s='true'])" />
|
||||
<xsl:variable name="successPercent" select="$successCount div $count" />
|
||||
<xsl:variable name="totalTime" select="sum(../httpSample[@lb = current()/@lb]/@t)" />
|
||||
<xsl:variable name="averageTime" select="$totalTime div $count" />
|
||||
<xsl:variable name="minTime">
|
||||
<xsl:call-template name="min">
|
||||
<xsl:with-param name="nodes" select="../httpSample[@lb = current()/@lb]/@t" />
|
||||
</xsl:call-template>
|
||||
</xsl:variable>
|
||||
<xsl:variable name="maxTime">
|
||||
<xsl:call-template name="max">
|
||||
<xsl:with-param name="nodes" select="../httpSample[@lb = current()/@lb]/@t" />
|
||||
</xsl:call-template>
|
||||
</xsl:variable>
|
||||
<tr valign="top">
|
||||
<xsl:attribute name="class">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$failureCount > 0">Failure</xsl:when>
|
||||
</xsl:choose>
|
||||
</xsl:attribute>
|
||||
<td>
|
||||
<xsl:if test="$failureCount > 0">
|
||||
<a><xsl:attribute name="href">#<xsl:value-of select="$label" /></xsl:attribute>
|
||||
<xsl:value-of select="$label" />
|
||||
</a>
|
||||
</xsl:if>
|
||||
<xsl:if test="0 >= $failureCount">
|
||||
<xsl:value-of select="$label" />
|
||||
</xsl:if>
|
||||
</td>
|
||||
<td>
|
||||
<xsl:value-of select="$count" />
|
||||
</td>
|
||||
<td>
|
||||
<xsl:value-of select="$failureCount" />
|
||||
</td>
|
||||
<td>
|
||||
<xsl:call-template name="display-percent">
|
||||
<xsl:with-param name="value" select="$successPercent" />
|
||||
</xsl:call-template>
|
||||
</td>
|
||||
<td>
|
||||
<xsl:call-template name="display-time">
|
||||
<xsl:with-param name="value" select="$averageTime" />
|
||||
</xsl:call-template>
|
||||
</td>
|
||||
<td>
|
||||
<xsl:call-template name="display-time">
|
||||
<xsl:with-param name="value" select="$minTime" />
|
||||
</xsl:call-template>
|
||||
</td>
|
||||
<td>
|
||||
<xsl:call-template name="display-time">
|
||||
<xsl:with-param name="value" select="$maxTime" />
|
||||
</xsl:call-template>
|
||||
</td>
|
||||
<td align="center">
|
||||
<a href="">
|
||||
<xsl:attribute name="href"><xsl:text/>javascript:change('page_details_<xsl:value-of select="position()" />')</xsl:attribute>
|
||||
<img src="expand.jpg" alt="expand/collapse"><xsl:attribute name="id"><xsl:text/>page_details_<xsl:value-of select="position()" />_image</xsl:attribute></img>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr class="page_details">
|
||||
<xsl:attribute name="id"><xsl:text/>page_details_<xsl:value-of select="position()" /></xsl:attribute>
|
||||
<td colspan="8" bgcolor="#FF0000">
|
||||
<div align="center">
|
||||
<b>Details for Page "<xsl:value-of select="$label" />"</b>
|
||||
<table bordercolor="#000000" border="1" cellpadding="0" cellspacing="0" width="95%">
|
||||
<tr>
|
||||
<th>Thread</th>
|
||||
<th>Iteration</th>
|
||||
<th>Time</th>
|
||||
<th>Success</th>
|
||||
<!--
|
||||
itterations = position() - thread stuff
|
||||
time="312"
|
||||
timeStamp="1053622047640"
|
||||
responseMessage="OK"
|
||||
threadName="Thread Group-1"
|
||||
dataType="text"
|
||||
label="/CansysAandA/processAuthentication.do"
|
||||
success="true"
|
||||
-->
|
||||
</tr>
|
||||
|
||||
<xsl:for-each select="../httpSample[@lb = $label and @tn != $label]">
|
||||
<tr>
|
||||
<td><xsl:value-of select="@tn" /></td>
|
||||
<td><xsl:value-of select="position()" /></td>
|
||||
<td><xsl:value-of select="@t" />ms</td>
|
||||
<td><xsl:value-of select="@s" /></td>
|
||||
</tr>
|
||||
</xsl:for-each>
|
||||
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</xsl:for-each>
|
||||
</table>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="detail">
|
||||
<xsl:variable name="allFailureCount" select="count(/testResults/httpSample[attribute::s='false'])" />
|
||||
|
||||
<xsl:if test="$allFailureCount > 0">
|
||||
<h2>Failure Detail</h2>
|
||||
|
||||
<xsl:for-each select="/testResults/httpSample[not(@lb = preceding::*/@lb)]">
|
||||
|
||||
<xsl:variable name="failureCount" select="count(../httpSample[@lb = current()/@lb][attribute::s='false'])" />
|
||||
|
||||
<xsl:if test="$failureCount > 0">
|
||||
<h3><xsl:value-of select="@lb" /><a><xsl:attribute name="name"><xsl:value-of select="@lb" /></xsl:attribute></a></h3>
|
||||
|
||||
<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
|
||||
<tr valign="top">
|
||||
<th>Response</th>
|
||||
<th>Failure Message</th>
|
||||
<xsl:if test="$showData = 'y'">
|
||||
<th>Response Data</th>
|
||||
</xsl:if>
|
||||
</tr>
|
||||
|
||||
<xsl:for-each select="/testResults/httpSample[@lb = current()/@lb][attribute::s='false']">
|
||||
<tr>
|
||||
<td><xsl:value-of select="@rc" /> - <xsl:value-of select="@rm" /></td>
|
||||
<td><xsl:value-of select="assertionResult/@failureMessage" /></td>
|
||||
<xsl:if test="$showData = 'y'">
|
||||
<td><xsl:value-of select="./binary" /></td>
|
||||
</xsl:if>
|
||||
</tr>
|
||||
</xsl:for-each>
|
||||
|
||||
</table>
|
||||
</xsl:if>
|
||||
|
||||
</xsl:for-each>
|
||||
</xsl:if>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="min">
|
||||
<xsl:param name="nodes" select="/.." />
|
||||
<xsl:choose>
|
||||
<xsl:when test="not($nodes)">NaN</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:for-each select="$nodes">
|
||||
<xsl:sort data-type="number" />
|
||||
<xsl:if test="position() = 1">
|
||||
<xsl:value-of select="number(.)" />
|
||||
</xsl:if>
|
||||
</xsl:for-each>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="max">
|
||||
<xsl:param name="nodes" select="/.." />
|
||||
<xsl:choose>
|
||||
<xsl:when test="not($nodes)">NaN</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:for-each select="$nodes">
|
||||
<xsl:sort data-type="number" order="descending" />
|
||||
<xsl:if test="position() = 1">
|
||||
<xsl:value-of select="number(.)" />
|
||||
</xsl:if>
|
||||
</xsl:for-each>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="display-percent">
|
||||
<xsl:param name="value" />
|
||||
<xsl:value-of select="format-number($value,'0.00%')" />
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="display-time">
|
||||
<xsl:param name="value" />
|
||||
<xsl:value-of select="format-number($value,'0 ms')" />
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
|
@ -1,299 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
|
||||
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
|
||||
<!--
|
||||
Stylesheet for processing 2.1 output format test result files
|
||||
To uses this directly in a browser, add the following to the JTL file as line 2:
|
||||
<? xml-stylesheet type="text/xsl" href="../extras/jmeter-results-report_21.xsl" ?>
|
||||
and you can then view the JTL in a browser
|
||||
-->
|
||||
|
||||
<xsl:output method="html" indent="yes" encoding="US-ASCII" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" />
|
||||
|
||||
<xsl:template match="testResults">
|
||||
<html>
|
||||
<head>
|
||||
<title>Load Test Results</title>
|
||||
<style type="text/css">
|
||||
body {
|
||||
font:normal 68% verdana,arial,helvetica;
|
||||
color:#000000;
|
||||
}
|
||||
table tr td, table tr th {
|
||||
font-size: 68%;
|
||||
}
|
||||
table.details tr th{
|
||||
font-weight: bold;
|
||||
text-align:left;
|
||||
background:#a6caf0;
|
||||
white-space: nowrap;
|
||||
}
|
||||
table.details tr td{
|
||||
background:#eeeee0;
|
||||
white-space: nowrap;
|
||||
}
|
||||
h1 {
|
||||
margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
|
||||
}
|
||||
h2 {
|
||||
margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
|
||||
}
|
||||
h3 {
|
||||
margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
|
||||
}
|
||||
.Failure {
|
||||
font-weight:bold; color:red;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<xsl:call-template name="pageHeader" />
|
||||
|
||||
<xsl:call-template name="summary" />
|
||||
<hr size="1" width="95%" align="left" />
|
||||
|
||||
<xsl:call-template name="pagelist" />
|
||||
<hr size="1" width="95%" align="left" />
|
||||
|
||||
<xsl:call-template name="detail" />
|
||||
|
||||
</body>
|
||||
</html>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="pageHeader">
|
||||
<h1>Load Test Results</h1>
|
||||
<table width="100%">
|
||||
<tr>
|
||||
<td align="left"></td>
|
||||
<td align="right">Designed for use with <a href="http://jakarta.apache.org/jmeter">JMeter</a> and <a href="http://ant.apache.org">Ant</a>.</td>
|
||||
</tr>
|
||||
</table>
|
||||
<hr size="1" />
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="summary">
|
||||
<h2>Summary</h2>
|
||||
<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
|
||||
<tr valign="top">
|
||||
<th>Tests</th>
|
||||
<th>Failures</th>
|
||||
<th>Success Rate</th>
|
||||
<th>Average Time</th>
|
||||
<th>Min Time</th>
|
||||
<th>Max Time</th>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<xsl:variable name="allCount" select="count(/testResults/*)" />
|
||||
<xsl:variable name="allFailureCount" select="count(/testResults/*[attribute::s='false'])" />
|
||||
<xsl:variable name="allSuccessCount" select="count(/testResults/*[attribute::s='true'])" />
|
||||
<xsl:variable name="allSuccessPercent" select="$allSuccessCount div $allCount" />
|
||||
<xsl:variable name="allTotalTime" select="sum(/testResults/*/@t)" />
|
||||
<xsl:variable name="allAverageTime" select="$allTotalTime div $allCount" />
|
||||
<xsl:variable name="allMinTime">
|
||||
<xsl:call-template name="min">
|
||||
<xsl:with-param name="nodes" select="/testResults/*/@t" />
|
||||
</xsl:call-template>
|
||||
</xsl:variable>
|
||||
<xsl:variable name="allMaxTime">
|
||||
<xsl:call-template name="max">
|
||||
<xsl:with-param name="nodes" select="/testResults/*/@t" />
|
||||
</xsl:call-template>
|
||||
</xsl:variable>
|
||||
<xsl:attribute name="class">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$allFailureCount > 0">Failure</xsl:when>
|
||||
</xsl:choose>
|
||||
</xsl:attribute>
|
||||
<td>
|
||||
<xsl:value-of select="$allCount" />
|
||||
</td>
|
||||
<td>
|
||||
<xsl:value-of select="$allFailureCount" />
|
||||
</td>
|
||||
<td>
|
||||
<xsl:call-template name="display-percent">
|
||||
<xsl:with-param name="value" select="$allSuccessPercent" />
|
||||
</xsl:call-template>
|
||||
</td>
|
||||
<td>
|
||||
<xsl:call-template name="display-time">
|
||||
<xsl:with-param name="value" select="$allAverageTime" />
|
||||
</xsl:call-template>
|
||||
</td>
|
||||
<td>
|
||||
<xsl:call-template name="display-time">
|
||||
<xsl:with-param name="value" select="$allMinTime" />
|
||||
</xsl:call-template>
|
||||
</td>
|
||||
<td>
|
||||
<xsl:call-template name="display-time">
|
||||
<xsl:with-param name="value" select="$allMaxTime" />
|
||||
</xsl:call-template>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="pagelist">
|
||||
<h2>Pages</h2>
|
||||
<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
|
||||
<tr valign="top">
|
||||
<th>URL</th>
|
||||
<th>Tests</th>
|
||||
<th>Failures</th>
|
||||
<th>Success Rate</th>
|
||||
<th>Average Time</th>
|
||||
<th>Min Time</th>
|
||||
<th>Max Time</th>
|
||||
</tr>
|
||||
<xsl:for-each select="/testResults/*[not(@lb = preceding::*/@lb)]">
|
||||
<xsl:variable name="label" select="@lb" />
|
||||
<xsl:variable name="count" select="count(../*[@lb = current()/@lb])" />
|
||||
<xsl:variable name="failureCount" select="count(../*[@lb = current()/@lb][attribute::s='false'])" />
|
||||
<xsl:variable name="successCount" select="count(../*[@lb = current()/@lb][attribute::s='true'])" />
|
||||
<xsl:variable name="successPercent" select="$successCount div $count" />
|
||||
<xsl:variable name="totalTime" select="sum(../*[@lb = current()/@lb]/@t)" />
|
||||
<xsl:variable name="averageTime" select="$totalTime div $count" />
|
||||
<xsl:variable name="minTime">
|
||||
<xsl:call-template name="min">
|
||||
<xsl:with-param name="nodes" select="../*[@lb = current()/@lb]/@t" />
|
||||
</xsl:call-template>
|
||||
</xsl:variable>
|
||||
<xsl:variable name="maxTime">
|
||||
<xsl:call-template name="max">
|
||||
<xsl:with-param name="nodes" select="../*[@lb = current()/@lb]/@t" />
|
||||
</xsl:call-template>
|
||||
</xsl:variable>
|
||||
<tr valign="top">
|
||||
<xsl:attribute name="class">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$failureCount > 0">Failure</xsl:when>
|
||||
</xsl:choose>
|
||||
</xsl:attribute>
|
||||
<td>
|
||||
<xsl:value-of select="$label" />
|
||||
</td>
|
||||
<td>
|
||||
<xsl:value-of select="$count" />
|
||||
</td>
|
||||
<td>
|
||||
<xsl:value-of select="$failureCount" />
|
||||
</td>
|
||||
<td>
|
||||
<xsl:call-template name="display-percent">
|
||||
<xsl:with-param name="value" select="$successPercent" />
|
||||
</xsl:call-template>
|
||||
</td>
|
||||
<td>
|
||||
<xsl:call-template name="display-time">
|
||||
<xsl:with-param name="value" select="$averageTime" />
|
||||
</xsl:call-template>
|
||||
</td>
|
||||
<td>
|
||||
<xsl:call-template name="display-time">
|
||||
<xsl:with-param name="value" select="$minTime" />
|
||||
</xsl:call-template>
|
||||
</td>
|
||||
<td>
|
||||
<xsl:call-template name="display-time">
|
||||
<xsl:with-param name="value" select="$maxTime" />
|
||||
</xsl:call-template>
|
||||
</td>
|
||||
</tr>
|
||||
</xsl:for-each>
|
||||
</table>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="detail">
|
||||
<xsl:variable name="allFailureCount" select="count(/testResults/*[attribute::s='false'])" />
|
||||
|
||||
<xsl:if test="$allFailureCount > 0">
|
||||
<h2>Failure Detail</h2>
|
||||
|
||||
<xsl:for-each select="/testResults/*[not(@lb = preceding::*/@lb)]">
|
||||
|
||||
<xsl:variable name="failureCount" select="count(../*[@lb = current()/@lb][attribute::s='false'])" />
|
||||
|
||||
<xsl:if test="$failureCount > 0">
|
||||
<h3><xsl:value-of select="@lb" /></h3>
|
||||
|
||||
<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
|
||||
<tr valign="top">
|
||||
<th>Response</th>
|
||||
<th>Failure Message</th>
|
||||
</tr>
|
||||
|
||||
<xsl:for-each select="/testResults/*[@lb = current()/@lb][attribute::s='false']">
|
||||
<tr>
|
||||
<td><xsl:value-of select="@rc | @rs" /> - <xsl:value-of select="@rm" /></td>
|
||||
<td><xsl:value-of select="assertionResult/failureMessage" /></td>
|
||||
</tr>
|
||||
</xsl:for-each>
|
||||
|
||||
</table>
|
||||
</xsl:if>
|
||||
|
||||
</xsl:for-each>
|
||||
</xsl:if>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="min">
|
||||
<xsl:param name="nodes" select="/.." />
|
||||
<xsl:choose>
|
||||
<xsl:when test="not($nodes)">NaN</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:for-each select="$nodes">
|
||||
<xsl:sort data-type="number" />
|
||||
<xsl:if test="position() = 1">
|
||||
<xsl:value-of select="number(.)" />
|
||||
</xsl:if>
|
||||
</xsl:for-each>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="max">
|
||||
<xsl:param name="nodes" select="/.." />
|
||||
<xsl:choose>
|
||||
<xsl:when test="not($nodes)">NaN</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:for-each select="$nodes">
|
||||
<xsl:sort data-type="number" order="descending" />
|
||||
<xsl:if test="position() = 1">
|
||||
<xsl:value-of select="number(.)" />
|
||||
</xsl:if>
|
||||
</xsl:for-each>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="display-percent">
|
||||
<xsl:param name="value" />
|
||||
<xsl:value-of select="format-number($value,'0.00%')" />
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="display-time">
|
||||
<xsl:param name="value" />
|
||||
<xsl:value-of select="format-number($value,'0 ms')" />
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
Binary file not shown.
|
@ -1,40 +0,0 @@
|
|||
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||
|
||||
table.testData {
|
||||
}
|
||||
|
||||
table.testData td,th {
|
||||
border: thin solid black;
|
||||
font-family: sans-serif;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
table.testData td.left {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
table.testData td.open {
|
||||
border-right: none;
|
||||
}
|
||||
|
||||
table.testData td.middle {
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
}
|
||||
|
||||
table.testData td.close {
|
||||
border-left: none;
|
||||
}
|
||||
|
||||
table.oneResult td {
|
||||
border: none;
|
||||
}
|
||||
|
||||
table.oneResult {
|
||||
border: thin solid black;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
table.oneResult td.minmax {
|
||||
font-size: smaller;
|
||||
}
|
|
@ -1,143 +0,0 @@
|
|||
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||
|
||||
package edu.cornell.mannlib.vitro.utilities.loadtesting.reportmerger;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
|
||||
|
||||
/**
|
||||
* Write the merged data to an HTML page.
|
||||
*/
|
||||
public class OutputMarshaller {
|
||||
private final List<TestResultsFileData> reportData;
|
||||
private final PrintWriter w;
|
||||
private final List<String> testNames;
|
||||
|
||||
public OutputMarshaller(List<TestResultsFileData> reportData, PrintWriter w) {
|
||||
this.reportData = reportData;
|
||||
this.w = w;
|
||||
this.testNames = assembleListOfTestNames();
|
||||
}
|
||||
|
||||
public void marshall() {
|
||||
writePageHeader();
|
||||
writeTestDataTable();
|
||||
writePageFooter();
|
||||
}
|
||||
|
||||
private List<String> assembleListOfTestNames() {
|
||||
Set<String> names = new TreeSet<String>();
|
||||
for (TestResultsFileData filedata : reportData) {
|
||||
names.addAll(filedata.getTestMap().keySet());
|
||||
}
|
||||
return new ArrayList<String>(names);
|
||||
}
|
||||
|
||||
private void writePageHeader() {
|
||||
w.println("<html>");
|
||||
w.println("<head>");
|
||||
w.println(" <link REL='STYLESHEET' TYPE='text/css' HREF='./mergedResults.css'>");
|
||||
w.println("</head>");
|
||||
w.println("<body>");
|
||||
}
|
||||
|
||||
private void writeTestDataTable() {
|
||||
w.println("<table class='testData' cellspacing='0'>");
|
||||
writeTestDataHeader();
|
||||
for (String testName : testNames) {
|
||||
writeTestDataRow(testName);
|
||||
}
|
||||
w.println("</table>");
|
||||
}
|
||||
|
||||
private void writeTestDataHeader() {
|
||||
w.println(" <tr>");
|
||||
w.println(" <th> </th>");
|
||||
for (TestResultsFileData fileData : reportData) {
|
||||
w.println(" <th colspan='3'>" + fileData.getVivoVersion()
|
||||
+ "<br/>" + fileData.getResultsFilename() + "<br/>"
|
||||
+ formatDate(fileData.getCreated()) + "</th>");
|
||||
}
|
||||
w.println(" </tr>");
|
||||
|
||||
w.println(" <tr>");
|
||||
w.println(" <th>Test Name</th>");
|
||||
for (TestResultsFileData fileData : reportData) {
|
||||
w.println(" <th>iterations</th>");
|
||||
w.println(" <th>time (min/max)</th>");
|
||||
w.println(" <th>ratio</th>");
|
||||
}
|
||||
w.println(" </tr>");
|
||||
}
|
||||
|
||||
private void writeTestDataRow(String testName) {
|
||||
w.println(" <tr>");
|
||||
w.println(" <td class='left'>" + testName + "</td>");
|
||||
for (TestResultsFileData fileData : reportData) {
|
||||
writeTestDataCellForFile(fileData, testName);
|
||||
}
|
||||
w.println(" </tr>");
|
||||
}
|
||||
|
||||
private void writeTestDataCellForFile(TestResultsFileData fileData,
|
||||
String testName) {
|
||||
TestResultInfo testData = fileData.getTestMap().get(testName);
|
||||
TestResultInfo baselineTestData = reportData.get(0).getTestMap()
|
||||
.get(testName);
|
||||
|
||||
String count = (testData == null) ? " " : ("" + testData
|
||||
.getCount());
|
||||
String averageTime = (testData == null) ? " "
|
||||
: ("" + formatTime(testData.getAverageTime()));
|
||||
String minTime = (testData == null) ? " "
|
||||
: ("" + formatTime(testData.getMinTime()));
|
||||
String maxTime = (testData == null) ? " "
|
||||
: ("" + formatTime(testData.getMaxTime()));
|
||||
|
||||
String ratioWithBaseline = " ";
|
||||
if ((testData != null) && (baselineTestData != null)) {
|
||||
ratioWithBaseline = percentage(testData.getAverageTime(),
|
||||
baselineTestData.getAverageTime());
|
||||
}
|
||||
|
||||
w.println(" <td class='open'>" + count + "</td>");
|
||||
w.println(" <td>");
|
||||
w.println(" <table class='oneResult middle' cellspacing=0>");
|
||||
w.println(" <tr>");
|
||||
w.println(" <td rowspan='2'>" + averageTime + "</td>");
|
||||
w.println(" <td class='minmax'>" + minTime + "</td>");
|
||||
w.println(" </tr>");
|
||||
w.println(" <tr>");
|
||||
w.println(" <td class='minmax'>" + maxTime + "</td>");
|
||||
w.println(" </tr>");
|
||||
w.println(" </table>");
|
||||
w.println(" <td class='close'>" + ratioWithBaseline + "</td>");
|
||||
w.println(" </td>");
|
||||
}
|
||||
|
||||
private String percentage(float value, float baseline) {
|
||||
float ratio = value / baseline;
|
||||
return String.format("%1$8.2f%%", ratio * 100.0);
|
||||
}
|
||||
|
||||
public String formatTime(float time) {
|
||||
return String.format("%1$8.3f", time);
|
||||
}
|
||||
|
||||
public String formatDate(long date) {
|
||||
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
|
||||
.format(new Date(date));
|
||||
}
|
||||
|
||||
private void writePageFooter() {
|
||||
w.println("</body>");
|
||||
w.println("</html>");
|
||||
}
|
||||
|
||||
}
|
|
@ -1,175 +0,0 @@
|
|||
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||
|
||||
package edu.cornell.mannlib.vitro.utilities.loadtesting.reportmerger;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
|
||||
|
||||
/**
|
||||
* Write the merged data to an HTML page.
|
||||
*
|
||||
* This version assumes that there are three files, and that they are 1.1.1, RDB
|
||||
* and SDB, in that order. It compares the SDB results to the others.
|
||||
*/
|
||||
public class OutputMarshaller2 {
|
||||
private final List<TestResultsFileData> reportData;
|
||||
private final List<TestResultsFileData> columnsToCompare;
|
||||
private final TestResultsFileData columnToCompareAgainst;
|
||||
private final int howManyToCompare;
|
||||
private final PrintWriter w;
|
||||
private final List<String> testNames;
|
||||
|
||||
public OutputMarshaller2(List<TestResultsFileData> reportData, PrintWriter w) {
|
||||
this.reportData = reportData;
|
||||
this.howManyToCompare = reportData.size() - 1;
|
||||
this.columnsToCompare = reportData.subList(0, howManyToCompare);
|
||||
this.columnToCompareAgainst = reportData.get(howManyToCompare);
|
||||
|
||||
this.w = w;
|
||||
this.testNames = assembleListOfTestNames();
|
||||
}
|
||||
|
||||
public void marshall() {
|
||||
writePageHeader();
|
||||
writeTestDataTable();
|
||||
writePageFooter();
|
||||
}
|
||||
|
||||
private List<String> assembleListOfTestNames() {
|
||||
Set<String> names = new TreeSet<String>();
|
||||
for (TestResultsFileData filedata : reportData) {
|
||||
names.addAll(filedata.getTestMap().keySet());
|
||||
}
|
||||
return new ArrayList<String>(names);
|
||||
}
|
||||
|
||||
private void writePageHeader() {
|
||||
w.println("<html>");
|
||||
w.println("<head>");
|
||||
w.println(" <link REL='STYLESHEET' TYPE='text/css' HREF='./mergedResults.css'>");
|
||||
w.println("</head>");
|
||||
w.println("<body>");
|
||||
}
|
||||
|
||||
private void writeTestDataTable() {
|
||||
w.println("<table class='testData' cellspacing='0'>");
|
||||
writeTestDataHeader();
|
||||
for (String testName : testNames) {
|
||||
writeTestDataRow(testName);
|
||||
}
|
||||
w.println("</table>");
|
||||
}
|
||||
|
||||
private void writeTestDataHeader() {
|
||||
// header first row
|
||||
w.println(" <tr>");
|
||||
w.println(" <th> </th>");
|
||||
for (TestResultsFileData fileData : reportData) {
|
||||
w.println(" <th colspan='2'>" + fileData.getVivoVersion()
|
||||
+ "<br/>" + fileData.getResultsFilename() + "<br/>"
|
||||
+ formatDate(fileData.getCreated()) + "</th>");
|
||||
}
|
||||
w.println(" <th colspan='" + howManyToCompare
|
||||
+ "'>performance ratios</th>");
|
||||
w.println(" </tr>");
|
||||
|
||||
// header second row
|
||||
w.println(" <tr>");
|
||||
w.println(" <th>Test Name</th>");
|
||||
for (int i = 0; i < reportData.size(); i++) {
|
||||
w.println(" <th>iterations</th>");
|
||||
w.println(" <th>time (min/max)</th>");
|
||||
}
|
||||
for (int i = 0; i < howManyToCompare; i++) {
|
||||
switch (i) {
|
||||
case 0:
|
||||
w.println(" <th>vs 1.2</th>");
|
||||
break;
|
||||
default:
|
||||
w.println(" <th> </th>");
|
||||
break;
|
||||
}
|
||||
}
|
||||
w.println(" </tr>");
|
||||
}
|
||||
|
||||
private void writeTestDataRow(String testName) {
|
||||
w.println(" <tr>");
|
||||
w.println(" <td class='left'>" + testName + "</td>");
|
||||
for (TestResultsFileData fileData : reportData) {
|
||||
writeTestDataCellForFile(fileData, testName);
|
||||
}
|
||||
for (TestResultsFileData fileData : columnsToCompare) {
|
||||
writeComparisonDataCell(fileData, testName);
|
||||
}
|
||||
w.println(" </tr>");
|
||||
}
|
||||
|
||||
private void writeTestDataCellForFile(TestResultsFileData fileData,
|
||||
String testName) {
|
||||
TestResultInfo testData = fileData.getTestMap().get(testName);
|
||||
|
||||
String count = (testData == null) ? " " : ("" + testData
|
||||
.getCount());
|
||||
String averageTime = (testData == null) ? " "
|
||||
: ("" + formatTime(testData.getAverageTime()));
|
||||
String minTime = (testData == null) ? " "
|
||||
: ("" + formatTime(testData.getMinTime()));
|
||||
String maxTime = (testData == null) ? " "
|
||||
: ("" + formatTime(testData.getMaxTime()));
|
||||
|
||||
w.println(" <td class='open'>" + count + "</td>");
|
||||
w.println(" <td>");
|
||||
w.println(" <table class='oneResult close' cellspacing=0>");
|
||||
w.println(" <tr>");
|
||||
w.println(" <td rowspan='2'>" + averageTime + "</td>");
|
||||
w.println(" <td class='minmax'>" + minTime + "</td>");
|
||||
w.println(" </tr>");
|
||||
w.println(" <tr>");
|
||||
w.println(" <td class='minmax'>" + maxTime + "</td>");
|
||||
w.println(" </tr>");
|
||||
w.println(" </table>");
|
||||
w.println(" </td>");
|
||||
}
|
||||
|
||||
private void writeComparisonDataCell(TestResultsFileData fileData,
|
||||
String testName) {
|
||||
TestResultInfo testData = fileData.getTestMap().get(testName);
|
||||
TestResultInfo baselineTestData = columnToCompareAgainst.getTestMap()
|
||||
.get(testName);
|
||||
|
||||
String ratioWithBaseline = " ";
|
||||
if ((testData != null) && (baselineTestData != null)) {
|
||||
ratioWithBaseline = percentage(baselineTestData.getAverageTime(),
|
||||
testData.getAverageTime());
|
||||
}
|
||||
|
||||
w.println(" <td>" + ratioWithBaseline + "</td>");
|
||||
}
|
||||
|
||||
private String percentage(float value, float baseline) {
|
||||
float ratio = value / baseline;
|
||||
return String.format("%1$8.2f%%", ratio * 100.0);
|
||||
}
|
||||
|
||||
public String formatTime(float time) {
|
||||
return String.format("%1$8.3f", time);
|
||||
}
|
||||
|
||||
public String formatDate(long date) {
|
||||
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
|
||||
.format(new Date(date));
|
||||
}
|
||||
|
||||
private void writePageFooter() {
|
||||
w.println("</body>");
|
||||
w.println("</html>");
|
||||
}
|
||||
|
||||
}
|
|
@ -1,71 +0,0 @@
|
|||
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||
|
||||
package edu.cornell.mannlib.vitro.utilities.loadtesting.reportmerger;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.PrintWriter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* Take two or more reports from JMeter's test results, and merge them into a
|
||||
* unified HTML report.
|
||||
*/
|
||||
public class ReportsMerger {
|
||||
|
||||
/**
|
||||
* Start with list of filenames in command line For each contributing file,
|
||||
* heading is from parsing the filename. Get the one after LoadTesting, and
|
||||
* the last one, minus the extension.
|
||||
*
|
||||
* For each file, build a structure with header info and a LinkedMap of the
|
||||
* desired info, testname -> info structure Build a list of these. Build a
|
||||
* unified list of testnames.
|
||||
*
|
||||
* List<TestResultsFile>
|
||||
*
|
||||
* TestResultsFile: String version; String filename; Date timestamp;
|
||||
* LinkedMap<String, TestResultInfo> testMap;
|
||||
*
|
||||
* TestResultInfo: boolean success; int count; float averageTime; float
|
||||
* maxTime; float minTime;
|
||||
*/
|
||||
|
||||
private final ReportsMergerParameters parms;
|
||||
private List<TestResultsFileData> reportData;
|
||||
|
||||
public ReportsMerger(ReportsMergerParameters parms) {
|
||||
this.parms = parms;
|
||||
}
|
||||
|
||||
private void parseReports() {
|
||||
List<TestResultsFileData> reportData = new ArrayList<TestResultsFileData>();
|
||||
for (File reportFile : parms.getReportFiles()) {
|
||||
TestResultsFileData fileData = new TestResultsParser(reportFile)
|
||||
.parse();
|
||||
System.out.println("File data: " + fileData);
|
||||
reportData.add(fileData);
|
||||
}
|
||||
this.reportData = reportData;
|
||||
}
|
||||
|
||||
private void produceOutput() {
|
||||
PrintWriter writer = parms.getOutputWriter();
|
||||
new OutputMarshaller2(reportData, writer).marshall();
|
||||
writer.flush();
|
||||
writer.close();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param args
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
ReportsMergerParameters parms = ReportsMergerParameters
|
||||
.getInstance(args);
|
||||
ReportsMerger rm = new ReportsMerger(parms);
|
||||
rm.parseReports();
|
||||
rm.produceOutput();
|
||||
}
|
||||
|
||||
}
|
|
@ -1,22 +0,0 @@
|
|||
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||
|
||||
package edu.cornell.mannlib.vitro.utilities.loadtesting.reportmerger;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.PrintWriter;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* Parse the command-line parameters for the ReportManager
|
||||
*/
|
||||
public abstract class ReportsMergerParameters {
|
||||
|
||||
public static ReportsMergerParameters getInstance(String[] args) {
|
||||
return new ReportsMergerParametersImpl(args);
|
||||
}
|
||||
|
||||
public abstract List<File> getReportFiles();
|
||||
|
||||
public abstract PrintWriter getOutputWriter();
|
||||
}
|
|
@ -1,59 +0,0 @@
|
|||
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||
|
||||
package edu.cornell.mannlib.vitro.utilities.loadtesting.reportmerger;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* A base implementation of ReportsMergerParameters
|
||||
*/
|
||||
public class ReportsMergerParametersImpl extends ReportsMergerParameters {
|
||||
|
||||
private final String outputDirectoryPath;
|
||||
private final String inputDirectoryPath;
|
||||
private final List<String> inputFilenames;
|
||||
|
||||
/**
|
||||
* The first arg is the output directory. The second arg is an input
|
||||
* directory. The third arg is a comma-separated list of input filenames.
|
||||
*/
|
||||
public ReportsMergerParametersImpl(String[] args) {
|
||||
this.outputDirectoryPath = args[0];
|
||||
this.inputDirectoryPath = args[1];
|
||||
this.inputFilenames = Arrays.asList(args[2].split("[, ]+"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<File> getReportFiles() {
|
||||
List<File> files = new ArrayList<File>();
|
||||
for (String filename : inputFilenames) {
|
||||
files.add(new File(inputDirectoryPath, filename));
|
||||
}
|
||||
// files.add(new File(
|
||||
// "/Development/JIRA issues/NIHVIVO-1129_Load_testing/mergerFiles/LoadTesting/release1.1.1/SecondTests-rel-1-1-1.html"));
|
||||
// files.add(new File(
|
||||
// "/Development/JIRA issues/NIHVIVO-1129_Load_testing/mergerFiles/LoadTesting/trunkNoSdb/SecondTests-rel-1-2.html"));
|
||||
// files.add(new File(
|
||||
// "/Development/JIRA issues/NIHVIVO-1129_Load_testing/mergerFiles/LoadTesting/trunkSdb/SecondTests-rel-1-2.html"));
|
||||
return files;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PrintWriter getOutputWriter() {
|
||||
try {
|
||||
File outputFile = new File(outputDirectoryPath,
|
||||
"mergedResults.html");
|
||||
return new PrintWriter(new FileWriter(outputFile));
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException("Can't open the output writer.", e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,56 +0,0 @@
|
|||
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||
|
||||
package edu.cornell.mannlib.vitro.utilities.loadtesting.reportmerger;
|
||||
|
||||
/**
|
||||
* Info about the executions of a single test in a single file.
|
||||
*/
|
||||
public class TestResultInfo {
|
||||
private final String testName;
|
||||
private final boolean success;
|
||||
private final int count;
|
||||
private final float averageTime;
|
||||
private final float maxTime;
|
||||
private final float minTime;
|
||||
|
||||
public TestResultInfo(String testName, boolean success, int count,
|
||||
float averageTime, float maxTime, float minTime) {
|
||||
this.testName = testName;
|
||||
this.success = success;
|
||||
this.count = count;
|
||||
this.averageTime = averageTime;
|
||||
this.maxTime = maxTime;
|
||||
this.minTime = minTime;
|
||||
}
|
||||
|
||||
public String getTestName() {
|
||||
return testName;
|
||||
}
|
||||
|
||||
public boolean isSuccess() {
|
||||
return success;
|
||||
}
|
||||
|
||||
public int getCount() {
|
||||
return count;
|
||||
}
|
||||
|
||||
public float getAverageTime() {
|
||||
return averageTime;
|
||||
}
|
||||
|
||||
public float getMaxTime() {
|
||||
return maxTime;
|
||||
}
|
||||
|
||||
public float getMinTime() {
|
||||
return minTime;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "TestResultInfo[testName=" + testName + ", success=" + success
|
||||
+ ", count=" + count + ", averageTime=" + averageTime
|
||||
+ ", maxTime=" + maxTime + ", minTime=" + minTime + "]";
|
||||
}
|
||||
}
|
|
@ -1,56 +0,0 @@
|
|||
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||
|
||||
package edu.cornell.mannlib.vitro.utilities.loadtesting.reportmerger;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
/**
|
||||
* Holds the data that was parsed from a single results file.
|
||||
*/
|
||||
public class TestResultsFileData {
|
||||
private final String vivoVersion;
|
||||
private final String resultsFilename;
|
||||
private final long created;
|
||||
private final LinkedHashMap<String, TestResultInfo> testMap;
|
||||
|
||||
public TestResultsFileData(String vivoVersion, String resultsFilename,
|
||||
long created, Map<String, TestResultInfo> testMap) {
|
||||
this.vivoVersion = vivoVersion;
|
||||
this.resultsFilename = resultsFilename;
|
||||
this.created = created;
|
||||
this.testMap = new LinkedHashMap<String, TestResultInfo>(testMap);
|
||||
}
|
||||
|
||||
public String getTimeStamp() {
|
||||
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(
|
||||
created));
|
||||
}
|
||||
|
||||
public String getVivoVersion() {
|
||||
return vivoVersion;
|
||||
}
|
||||
|
||||
public String getResultsFilename() {
|
||||
return resultsFilename;
|
||||
}
|
||||
|
||||
public long getCreated() {
|
||||
return created;
|
||||
}
|
||||
|
||||
public LinkedHashMap<String, TestResultInfo> getTestMap() {
|
||||
return testMap;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "TestResultsFileData[vivoVersion=" + vivoVersion
|
||||
+ ", resultsFilename=" + resultsFilename + ", created="
|
||||
+ getTimeStamp() + ", testMap=" + testMap + "]";
|
||||
}
|
||||
|
||||
}
|
|
@ -1,169 +0,0 @@
|
|||
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||
|
||||
package edu.cornell.mannlib.vitro.utilities.loadtesting.reportmerger;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
|
||||
/**
|
||||
* Parse a single test results file.
|
||||
*/
|
||||
public class TestResultsParser {
|
||||
/** Find the "Pages" table in the file. */
|
||||
private static final String PATTERN_PAGES_TABLE = "<h2>Pages</h2><table[^>]*>(.*?)</table>";
|
||||
|
||||
/** Find a row in the table. */
|
||||
private static final String PATTERN_TABLE_ROW = "<tr[^>]*>(.*?)</tr>";
|
||||
|
||||
private final File reportFile;
|
||||
private final String filePath;
|
||||
|
||||
public TestResultsParser(File reportFile) {
|
||||
this.reportFile = reportFile;
|
||||
this.filePath = reportFile.getAbsolutePath();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get info from the file path, the create date, and the contents of the
|
||||
* file.
|
||||
*/
|
||||
public TestResultsFileData parse() {
|
||||
String[] pathInfo = parseInfoFromFilePath();
|
||||
Map<String, TestResultInfo> testMap = extractTestMap();
|
||||
return new TestResultsFileData(pathInfo[0], pathInfo[1],
|
||||
reportFile.lastModified(), testMap);
|
||||
}
|
||||
|
||||
private String[] parseInfoFromFilePath() {
|
||||
String vivoVersion = "--";
|
||||
String[] pathParts = filePath.split(Pattern.quote(File.separator));
|
||||
for (int i = 0; i < pathParts.length; i++) {
|
||||
if (pathParts[i].startsWith("ver_")) {
|
||||
vivoVersion = pathParts[i].substring(4);
|
||||
}
|
||||
}
|
||||
|
||||
String trimmedFilename = reportFile.getName().substring(0,
|
||||
reportFile.getName().lastIndexOf('.'));
|
||||
|
||||
return new String[] { vivoVersion, trimmedFilename };
|
||||
}
|
||||
|
||||
/**
|
||||
* Scan through the contents of the file for info
|
||||
*/
|
||||
private Map<String, TestResultInfo> extractTestMap() {
|
||||
String contents = readEntireFileWithoutLineFeeds();
|
||||
|
||||
String pagesTable = findPagesTableInFile(contents);
|
||||
// System.out.println("PagesTable: " + pagesTable);
|
||||
|
||||
return parsePagesTable(pagesTable);
|
||||
}
|
||||
|
||||
private String readEntireFileWithoutLineFeeds() {
|
||||
StringBuilder result = new StringBuilder();
|
||||
BufferedReader reader = null;
|
||||
|
||||
try {
|
||||
reader = new BufferedReader(new FileReader(reportFile));
|
||||
|
||||
String line;
|
||||
while (null != (line = reader.readLine())) {
|
||||
result.append(line);
|
||||
}
|
||||
return result.toString();
|
||||
} catch (FileNotFoundException e) {
|
||||
throw new RuntimeException(
|
||||
"File doesn't exist: '" + filePath + "'", e);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException("Failed to read the file: '" + filePath
|
||||
+ "'", e);
|
||||
} finally {
|
||||
if (reader != null) {
|
||||
try {
|
||||
reader.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String findPagesTableInFile(String contents) {
|
||||
Pattern p = Pattern.compile(PATTERN_PAGES_TABLE);
|
||||
Matcher m = p.matcher(contents);
|
||||
if (m.find()) {
|
||||
return m.group(1);
|
||||
}
|
||||
throw new RuntimeException("Failed to find the 'Pages' "
|
||||
+ "table in file: '" + filePath + "'");
|
||||
}
|
||||
|
||||
private Map<String, TestResultInfo> parsePagesTable(String pagesTable) {
|
||||
Map<String, TestResultInfo> map = new LinkedHashMap<String, TestResultInfo>();
|
||||
|
||||
Pattern p = Pattern.compile(PATTERN_TABLE_ROW);
|
||||
Matcher m = p.matcher(pagesTable);
|
||||
|
||||
discardHeaderRowFromPagesTable(m);
|
||||
|
||||
while (m.find()) {
|
||||
TestResultInfo info = parseTestRowFromPagesTable(m.group(1));
|
||||
map.put(info.getTestName(), info);
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
private void discardHeaderRowFromPagesTable(Matcher m) {
|
||||
if (!m.find()) {
|
||||
throw new RuntimeException("Failed to find a header row "
|
||||
+ "in the 'Pages' table, in file: '" + filePath + "'");
|
||||
}
|
||||
}
|
||||
|
||||
private TestResultInfo parseTestRowFromPagesTable(String tableRow) {
|
||||
// System.out.println("Table Row: " + tableRow);
|
||||
|
||||
List<String> cells = new ArrayList<String>();
|
||||
|
||||
Pattern p = Pattern.compile("<td.*?>(.*?)</td>");
|
||||
Matcher m = p.matcher(tableRow);
|
||||
while (m.find()) {
|
||||
cells.add(m.group(1));
|
||||
}
|
||||
// System.out.println("Cells: " + cells);
|
||||
|
||||
if (cells.size() < 7) {
|
||||
throw new RuntimeException("Only " + cells.size()
|
||||
+ " cells in this table row: '" + tableRow
|
||||
+ "', in file: '" + filePath + "'");
|
||||
}
|
||||
|
||||
String testName = cells.get(0);
|
||||
int count = Integer.parseInt(cells.get(1));
|
||||
boolean success = cells.get(2).equals("0");
|
||||
float averageTime = parseTimeFromCell(cells.get(4));
|
||||
float minTime = parseTimeFromCell(cells.get(5));
|
||||
float maxTime = parseTimeFromCell(cells.get(6));
|
||||
|
||||
return new TestResultInfo(testName, success, count, averageTime,
|
||||
maxTime, minTime);
|
||||
}
|
||||
|
||||
private float parseTimeFromCell(String cell) {
|
||||
String[] parts = cell.split(" ");
|
||||
return Integer.parseInt(parts[0]) / 1000.0F;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,31 +0,0 @@
|
|||
#! /usr/bin/ruby
|
||||
|
||||
require "#{File.dirname(__FILE__)}/subscripts/loadParms"
|
||||
require "#{File.dirname(__FILE__)}/subscripts/test_result_merger"
|
||||
|
||||
properties = {}
|
||||
|
||||
source_dir = "/home/jeb228/LoadTesting/tests/results/#{@version_name}"
|
||||
properties["source_directory"] = source_dir
|
||||
properties["target_directory"] = "/var/www/html/loadTesting/"
|
||||
properties["version_name"] = ""#{@version_name}"
|
||||
|
||||
suggestions = []
|
||||
if File.directory?(source_dir)
|
||||
Dir.chdir(source_dir) do |dir|
|
||||
if File.file?("fileOrderSuggestions.txt")
|
||||
File.open("fileOrderSuggestions.txt") do |f|
|
||||
f.each_line() do |line|
|
||||
suggestions.push(line.strip())
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
properties["file_order_suggestions"] = suggestions
|
||||
|
||||
trm = TestResultMerger.new(properties)
|
||||
trm.merge
|
||||
|
||||
puts "TestResultMerger was successful."
|
||||
|
|
@ -1,101 +0,0 @@
|
|||
#! /usr/bin/ruby
|
||||
|
||||
=begin
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Parse a file of JMeter test results (*./jtl), summarize the times for each test,
|
||||
and make the summaries easily available.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
=end
|
||||
|
||||
require "rexml/document"
|
||||
|
||||
include REXML
|
||||
|
||||
# ------------------------------------------------------------------------------------
|
||||
# TestResultSummary class
|
||||
# ------------------------------------------------------------------------------------
|
||||
|
||||
class TestResultSummary
|
||||
attr_reader :label
|
||||
attr_reader :how_many
|
||||
attr_reader :failures
|
||||
attr_reader :min_time
|
||||
attr_reader :max_time
|
||||
attr_reader :avg_time
|
||||
def addResult(result_element)
|
||||
@how_many += 1
|
||||
@failures += 1 unless result_element.attributes["s"] == "true"
|
||||
|
||||
time = result_element.attributes["t"].to_i
|
||||
@total_time += time
|
||||
@min_time = [@min_time, time].min
|
||||
@max_time = [@max_time, time].max
|
||||
|
||||
@avg_time = @total_time / how_many
|
||||
end
|
||||
|
||||
def initialize(result_element)
|
||||
@label = result_element.attributes["lb"]
|
||||
@how_many = 0
|
||||
@failures = 0
|
||||
@min_time = 100000000
|
||||
@max_time = 0
|
||||
@total_time = 0
|
||||
|
||||
addResult(result_element)
|
||||
end
|
||||
end
|
||||
|
||||
# ------------------------------------------------------------------------------------
|
||||
# TestResultFile class
|
||||
# ------------------------------------------------------------------------------------
|
||||
|
||||
class TestResultFile
|
||||
attr_reader :filename
|
||||
attr_reader :timestamp
|
||||
attr_reader :summaries
|
||||
attr_reader :version
|
||||
def parse_result_file()
|
||||
@summaries = {}
|
||||
@version = "_"
|
||||
|
||||
file = File.new( @file_path )
|
||||
doc = Document.new file
|
||||
XPath.each(doc, "/testResults/httpSample") do | result |
|
||||
test_label = result.attributes["lb"]
|
||||
if @summaries[test_label] == nil
|
||||
@summaries[test_label] = TestResultSummary.new(result)
|
||||
else
|
||||
@summaries[test_label].addResult(result)
|
||||
end
|
||||
end
|
||||
|
||||
XPath.each(doc, "version") do | version |
|
||||
@version = version.attributes["name"]
|
||||
end
|
||||
end
|
||||
|
||||
def initialize(filename, source_directory)
|
||||
raise("filename must not be nil") if filename == nil
|
||||
raise("source_directory must not be nil") if source_directory == nil
|
||||
|
||||
@filename = filename
|
||||
@source_directory = source_directory
|
||||
|
||||
if !File.directory?(@source_directory)
|
||||
raise "Directory does not exist: '#{@source_directory}'."
|
||||
end
|
||||
|
||||
@file_path = File.expand_path(filename + ".jtl", @source_directory)
|
||||
|
||||
if !File.file?(@file_path)
|
||||
raise "File doesn't exist: '#{@file_path}'."
|
||||
end
|
||||
|
||||
@timestamp = File.mtime(@file_path)
|
||||
|
||||
parse_result_file()
|
||||
end
|
||||
end
|
|
@ -1,160 +0,0 @@
|
|||
#! /usr/bin/ruby
|
||||
|
||||
=begin
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Parse a file of JMeter test results (*./jtl), summarize the times for each test,
|
||||
and make the summaries easily available.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
=end
|
||||
|
||||
# ------------------------------------------------------------------------------------
|
||||
# TestResultMarshaller class
|
||||
# ------------------------------------------------------------------------------------
|
||||
|
||||
class TestResultMarshaller
|
||||
def marshall()
|
||||
File.open(@output_filename, 'w') do | out |
|
||||
write_html_header(out)
|
||||
write_table_header(out)
|
||||
write_table_lines(out)
|
||||
write_table_footer(out)
|
||||
write_html_footer(out)
|
||||
end
|
||||
end
|
||||
|
||||
def write_html_header(out)
|
||||
out.puts <<"EOF"
|
||||
<html>
|
||||
<head>
|
||||
<link REL='STYLESHEET' TYPE='text/css' HREF='./mergedResults.css'>
|
||||
<title>Performance tests for #{@site_name}</title>
|
||||
</head>
|
||||
<body>
|
||||
EOF
|
||||
end
|
||||
|
||||
def write_table_header(out)
|
||||
top_cells = ['<th> </th>']
|
||||
@test_results.each do | test |
|
||||
top_cells.push("<th colspan='3'>#{test.version}<br/>#{test.filename}<br/>#{test.timestamp.strftime('%Y-%m-%d %H:%M:%S')}</th>")
|
||||
end
|
||||
|
||||
bottom_cells = ['<th>Test Name</th>']
|
||||
@test_results.each do | test |
|
||||
bottom_cells.push('<th>Iterations</th>')
|
||||
bottom_cells.push('<th>time<br/>(min/max)</th>')
|
||||
bottom_cells.push("<th>compare</th>")
|
||||
end
|
||||
|
||||
out.puts <<"EOF"
|
||||
<table class='testData' cellspacing='0'>
|
||||
<tr>
|
||||
#{top_cells.join("\n ")}
|
||||
</tr>
|
||||
<tr>
|
||||
#{bottom_cells.join("\n ")}
|
||||
</tr>
|
||||
EOF
|
||||
end
|
||||
|
||||
def write_table_lines(out)
|
||||
all_test_names().each do | test_name |
|
||||
out.puts <<"EOF"
|
||||
<tr>
|
||||
<td class='left'>#{test_name}</td>
|
||||
#{format_test_results(test_name)}
|
||||
</tr>
|
||||
EOF
|
||||
end
|
||||
end
|
||||
|
||||
def all_test_names
|
||||
names = []
|
||||
@test_results.each do | test |
|
||||
names.concat(test.summaries.keys)
|
||||
end
|
||||
names.uniq.sort
|
||||
end
|
||||
|
||||
def format_test_results(test_name)
|
||||
results = []
|
||||
@test_results.each do | test |
|
||||
results.push(format_test_result(test_name, test))
|
||||
end
|
||||
results.join("\n ")
|
||||
end
|
||||
|
||||
def format_test_result(test_name, test)
|
||||
s = test.summaries[test_name]
|
||||
if s
|
||||
<<"EOF"
|
||||
<td class='open'>#{s.how_many}</td>
|
||||
<td>
|
||||
<table class='oneResult close' cellspacing='0'>
|
||||
<tr>
|
||||
<td rowspan='2'>#{format_millis(s.avg_time)}</td>
|
||||
<td class='minmax'>#{format_millis(s.min_time)}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='minmax'>#{format_millis(s.max_time)}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td>#{performance_ratio(test_name, s.avg_time)}</td>
|
||||
EOF
|
||||
else
|
||||
<<"EOF"
|
||||
<td class='open'> </td>
|
||||
<td>
|
||||
<table class='oneResult close' cellspacing='0'>
|
||||
<tr>
|
||||
<td rowspan='2'> </td>
|
||||
<td class='minmax'> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='minmax'> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td> </td>
|
||||
EOF
|
||||
end
|
||||
end
|
||||
|
||||
def format_millis(millis)
|
||||
"%.3f" % [millis.to_f / 1000]
|
||||
end
|
||||
|
||||
def performance_ratio(test_name, time)
|
||||
return " " if @test_results.empty?
|
||||
return " " unless @test_results[0].summaries.key?(test_name)
|
||||
|
||||
s = @test_results[0].summaries[test_name]
|
||||
reference = s.avg_time
|
||||
return " " if reference == 0
|
||||
|
||||
return "#{"%.0f" % [time * 100 / reference]}%"
|
||||
end
|
||||
|
||||
def write_table_footer(out)
|
||||
out.puts "</table>"
|
||||
end
|
||||
|
||||
def write_html_footer(out)
|
||||
out.puts <<"EOF"
|
||||
</body>
|
||||
</html>
|
||||
EOF
|
||||
end
|
||||
|
||||
def initialize(target_directory, site_name, test_results)
|
||||
@target_directory = target_directory
|
||||
@site_name = site_name
|
||||
@test_results = test_results
|
||||
|
||||
filename = "#{site_name}-merged_#{Time.now.strftime('%Y-%m-%d_%H-%M-%S')}"
|
||||
@output_filename = File.expand_path(filename, @target_directory)
|
||||
end
|
||||
end
|
|
@ -1,95 +0,0 @@
|
|||
#! /usr/bin/ruby
|
||||
|
||||
=begin
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Look through a directory of test results files (*.jtl), and produce an HTML file
|
||||
that summarizes, merges, and compares the information.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------
|
||||
=end
|
||||
$: << File.dirname(File.expand_path(__FILE__))
|
||||
require 'test_result_file'
|
||||
require 'test_result_marshaller'
|
||||
|
||||
# ------------------------------------------------------------------------------------
|
||||
# TestResultMerger class
|
||||
# ------------------------------------------------------------------------------------
|
||||
|
||||
class TestResultMerger
|
||||
#
|
||||
# Do we have any chance of succeeding with these properties?
|
||||
#
|
||||
def sanity_checks_on_properties()
|
||||
raise("Properties must contain a value for 'source_directory'") if @source_directory == nil
|
||||
raise("Properties must contain a value for 'target_directory'") if @target_directory == nil
|
||||
raise("Properties must contain a value for 'site_name'") if @site_name == nil
|
||||
|
||||
if !File.directory?(@source_directory)
|
||||
raise "Not a directory: '#{@source_directory}'."
|
||||
end
|
||||
if !File.directory?(@target_directory)
|
||||
raise "Not a directory: '#{@target_directory}'."
|
||||
end
|
||||
end
|
||||
|
||||
def parse_files()
|
||||
test_result_files = build_file_list()
|
||||
|
||||
@test_results = []
|
||||
test_result_files.each() do | test_result_file |
|
||||
puts "Parsing #{test_result_file}"
|
||||
@test_results.push(TestResultFile.new(test_result_file, @source_directory))
|
||||
end
|
||||
end
|
||||
|
||||
def build_file_list
|
||||
existing_files = []
|
||||
Dir.foreach(@source_directory) do | filename |
|
||||
next unless File.extname(filename) == ".jtl"
|
||||
existing_files.push(File.basename(filename, ".jtl"))
|
||||
end
|
||||
puts "BOGUS existing files = [#{existing_files.join(', ')}]"
|
||||
|
||||
file_list = []
|
||||
@file_order_suggestions.each() do | suggestion|
|
||||
if existing_files.include?(suggestion)
|
||||
file_list.push(suggestion)
|
||||
existing_files.delete(suggestion)
|
||||
end
|
||||
end
|
||||
file_list.concat(existing_files)
|
||||
puts "BOGUS file list = [#{file_list.join(', ')}]"
|
||||
|
||||
return file_list
|
||||
end
|
||||
|
||||
def marshall()
|
||||
marshaller = TestResultMarshaller.new(@target_directory, @site_name, @test_results)
|
||||
marshaller.marshall()
|
||||
end
|
||||
|
||||
def initialize(properties)
|
||||
@source_directory = properties['source_directory']
|
||||
@target_directory = properties['target_directory']
|
||||
@site_name = properties['site_name']
|
||||
@file_order_suggestions = properties['file_order_suggestions']
|
||||
|
||||
puts "source_directory = #{@source_directory}"
|
||||
puts "target_directory = #{@target_directory}"
|
||||
puts "site_name = #{@site_name}"
|
||||
if (@file_order_suggestions == nil)
|
||||
puts "file_order_suggestions = nil"
|
||||
else
|
||||
puts "file_order_suggestions = [#{@file_order_suggestions.join(', ')}]"
|
||||
end
|
||||
|
||||
sanity_checks_on_properties
|
||||
end
|
||||
|
||||
def merge()
|
||||
parse_files()
|
||||
marshall()
|
||||
end
|
||||
end
|
|
@ -1,515 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<jmeterTestPlan version="1.2" properties="2.1">
|
||||
<hashTree>
|
||||
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test Plan" enabled="true">
|
||||
<stringProp name="TestPlan.comments"></stringProp>
|
||||
<boolProp name="TestPlan.functional_mode">false</boolProp>
|
||||
<boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
|
||||
<elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments">
|
||||
<elementProp name="WEBAPP_HOST" elementType="Argument">
|
||||
<stringProp name="Argument.name">WEBAPP_HOST</stringProp>
|
||||
<stringProp name="Argument.value">${__property(webapp.host, , localhost)}</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="WEBAPP_PORT" elementType="Argument">
|
||||
<stringProp name="Argument.name">WEBAPP_PORT</stringProp>
|
||||
<stringProp name="Argument.value">${__property(webapp.port, , 8080)}</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="WEBAPP_NAME" elementType="Argument">
|
||||
<stringProp name="Argument.name">WEBAPP_NAME</stringProp>
|
||||
<stringProp name="Argument.value">${__property(webapp.name, , vivo)}</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="PERSON_URI_FILE" elementType="Argument">
|
||||
<stringProp name="Argument.name">PERSON_URI_FILE</stringProp>
|
||||
<stringProp name="Argument.value">${__property(file.person.uris, , PersonUris.csv)}</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="INFO_RESOURCE_URI_FILE" elementType="Argument">
|
||||
<stringProp name="Argument.name">INFO_RESOURCE_URI_FILE</stringProp>
|
||||
<stringProp name="Argument.value">${__property(file.infoResource.uris, , InfoResourceUris.csv)}</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="ITERATIONS" elementType="Argument">
|
||||
<stringProp name="Argument.name">ITERATIONS</stringProp>
|
||||
<stringProp name="Argument.value">${__property(iterations, , 10)}</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="THREADS" elementType="Argument">
|
||||
<stringProp name="Argument.name">THREADS</stringProp>
|
||||
<stringProp name="Argument.value">${__property(threads, , 1)}</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
</elementProp>
|
||||
</collectionProp>
|
||||
</elementProp>
|
||||
<stringProp name="TestPlan.user_define_classpath"></stringProp>
|
||||
</TestPlan>
|
||||
<hashTree>
|
||||
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Main Thread Group" enabled="true">
|
||||
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
|
||||
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
|
||||
<boolProp name="LoopController.continue_forever">false</boolProp>
|
||||
<stringProp name="LoopController.loops">${ITERATIONS}</stringProp>
|
||||
</elementProp>
|
||||
<stringProp name="ThreadGroup.num_threads">${THREADS}</stringProp>
|
||||
<stringProp name="ThreadGroup.ramp_time">1</stringProp>
|
||||
<longProp name="ThreadGroup.start_time">1294759350000</longProp>
|
||||
<longProp name="ThreadGroup.end_time">1294759350000</longProp>
|
||||
<boolProp name="ThreadGroup.scheduler">false</boolProp>
|
||||
<stringProp name="ThreadGroup.duration"></stringProp>
|
||||
<stringProp name="ThreadGroup.delay"></stringProp>
|
||||
</ThreadGroup>
|
||||
<hashTree>
|
||||
<CookieManager guiclass="CookiePanel" testclass="CookieManager" testname="HTTP Cookie Manager" enabled="true">
|
||||
<collectionProp name="CookieManager.cookies"/>
|
||||
<boolProp name="CookieManager.clearEachIteration">false</boolProp>
|
||||
<stringProp name="CookieManager.policy">rfc2109</stringProp>
|
||||
</CookieManager>
|
||||
<hashTree/>
|
||||
<ConfigTestElement guiclass="HttpDefaultsGui" testclass="ConfigTestElement" testname="HTTP Request Defaults" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain">${WEBAPP_HOST}</stringProp>
|
||||
<stringProp name="HTTPSampler.port">${WEBAPP_PORT}</stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path"></stringProp>
|
||||
<boolProp name="HTTPSampler.image_parser">true</boolProp>
|
||||
</ConfigTestElement>
|
||||
<hashTree/>
|
||||
<GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="Not logged in" enabled="true">
|
||||
<stringProp name="TestPlan.comments">These pages are run while the user is not logged in.</stringProp>
|
||||
</GenericController>
|
||||
<hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="Nobody: Home page" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="Nobody: About page" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/about</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="Nobody: Person profile page" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/display/${PERSON_URI}</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree>
|
||||
<CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="Person URIs from CSV" enabled="true">
|
||||
<stringProp name="delimiter">,</stringProp>
|
||||
<stringProp name="fileEncoding">utf8</stringProp>
|
||||
<stringProp name="filename">${PERSON_URI_FILE}</stringProp>
|
||||
<boolProp name="quotedData">false</boolProp>
|
||||
<boolProp name="recycle">true</boolProp>
|
||||
<stringProp name="shareMode">All threads</stringProp>
|
||||
<boolProp name="stopThread">false</boolProp>
|
||||
<stringProp name="variableNames">PERSON_URI</stringProp>
|
||||
</CSVDataSet>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="Nobody: InfoResource Profile Page" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/display/${INFO_RESOURCE_URI}</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree>
|
||||
<CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="InfoResource URIs from CSV" enabled="true">
|
||||
<stringProp name="filename">${INFO_RESOURCE_URI_FILE}</stringProp>
|
||||
<stringProp name="fileEncoding">utf8</stringProp>
|
||||
<stringProp name="variableNames">INFO_RESOURCE_URI</stringProp>
|
||||
<stringProp name="delimiter"></stringProp>
|
||||
<boolProp name="quotedData">false</boolProp>
|
||||
<boolProp name="recycle">true</boolProp>
|
||||
<boolProp name="stopThread">false</boolProp>
|
||||
<stringProp name="shareMode">All threads</stringProp>
|
||||
</CSVDataSet>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
</hashTree>
|
||||
<GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="Logged in as DBA" enabled="true"/>
|
||||
<hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="DBA: rediculous pre-login step" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/authenticate?login=block</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="DBA: Login, release 1.1" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments">
|
||||
<elementProp name="loginName" elementType="HTTPArgument">
|
||||
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
||||
<stringProp name="Argument.value">testAdmin</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
<boolProp name="HTTPArgument.use_equals">true</boolProp>
|
||||
<stringProp name="Argument.name">loginName</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="loginPassword" elementType="HTTPArgument">
|
||||
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
||||
<stringProp name="Argument.value">Password</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
<boolProp name="HTTPArgument.use_equals">true</boolProp>
|
||||
<stringProp name="Argument.name">loginPassword</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="login" elementType="HTTPArgument">
|
||||
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
||||
<stringProp name="Argument.value">block</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
<boolProp name="HTTPArgument.use_equals">true</boolProp>
|
||||
<stringProp name="Argument.name">login</stringProp>
|
||||
</elementProp>
|
||||
</collectionProp>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/authenticate</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree>
|
||||
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="DBA: Went to Site Admin" enabled="true">
|
||||
<collectionProp name="Asserion.test_strings">
|
||||
<stringProp name="606414423">Site Administration</stringProp>
|
||||
</collectionProp>
|
||||
<stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
|
||||
<boolProp name="Assertion.assume_success">false</boolProp>
|
||||
<intProp name="Assertion.test_type">2</intProp>
|
||||
</ResponseAssertion>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="DBA: Person profile page" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/display/${PERSON_URI}</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree>
|
||||
<CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="Person URIs from CSV" enabled="true">
|
||||
<stringProp name="delimiter">,</stringProp>
|
||||
<stringProp name="fileEncoding">utf8</stringProp>
|
||||
<stringProp name="filename">${PERSON_URI_FILE}</stringProp>
|
||||
<boolProp name="quotedData">false</boolProp>
|
||||
<boolProp name="recycle">true</boolProp>
|
||||
<stringProp name="shareMode">All threads</stringProp>
|
||||
<boolProp name="stopThread">false</boolProp>
|
||||
<stringProp name="variableNames">PERSON_URI</stringProp>
|
||||
</CSVDataSet>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="DBA: InfoResource Profile Page" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/display/${INFO_RESOURCE_URI}</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree>
|
||||
<CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="InfoResource URIs from CSV" enabled="true">
|
||||
<stringProp name="filename">${INFO_RESOURCE_URI_FILE}</stringProp>
|
||||
<stringProp name="fileEncoding">utf8</stringProp>
|
||||
<stringProp name="variableNames">INFO_RESOURCE_URI</stringProp>
|
||||
<stringProp name="delimiter"></stringProp>
|
||||
<boolProp name="quotedData">false</boolProp>
|
||||
<boolProp name="recycle">true</boolProp>
|
||||
<boolProp name="stopThread">false</boolProp>
|
||||
<stringProp name="shareMode">All threads</stringProp>
|
||||
</CSVDataSet>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="DBA: logout" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/logout</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
<GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="Logged in as SelfEditor" enabled="true"/>
|
||||
<hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="SelfEditor: rediculous pre-login step" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/authenticate?login=block</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="SelfEditor: Login, release 1.2" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments">
|
||||
<elementProp name="loginName" elementType="HTTPArgument">
|
||||
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
||||
<stringProp name="Argument.value">dk15</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
<boolProp name="HTTPArgument.use_equals">true</boolProp>
|
||||
<stringProp name="Argument.name">loginName</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="loginPassword" elementType="HTTPArgument">
|
||||
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
||||
<stringProp name="Argument.value">Password</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
<boolProp name="HTTPArgument.use_equals">true</boolProp>
|
||||
<stringProp name="Argument.name">loginPassword</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="login" elementType="HTTPArgument">
|
||||
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
||||
<stringProp name="Argument.value">block</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
<boolProp name="HTTPArgument.use_equals">true</boolProp>
|
||||
<stringProp name="Argument.name">login</stringProp>
|
||||
</elementProp>
|
||||
</collectionProp>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/authenticate</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree>
|
||||
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="SelfEditor: Went to Site Admin" enabled="true">
|
||||
<collectionProp name="Asserion.test_strings">
|
||||
<stringProp name="606414423">Site Administration</stringProp>
|
||||
</collectionProp>
|
||||
<stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
|
||||
<boolProp name="Assertion.assume_success">false</boolProp>
|
||||
<intProp name="Assertion.test_type">2</intProp>
|
||||
</ResponseAssertion>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="SelfEditor: Person profile page" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/display/${PERSON_URI}</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree>
|
||||
<CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="Person URIs from CSV" enabled="true">
|
||||
<stringProp name="delimiter">,</stringProp>
|
||||
<stringProp name="fileEncoding">utf8</stringProp>
|
||||
<stringProp name="filename">${PERSON_URI_FILE}</stringProp>
|
||||
<boolProp name="quotedData">false</boolProp>
|
||||
<boolProp name="recycle">true</boolProp>
|
||||
<stringProp name="shareMode">All threads</stringProp>
|
||||
<boolProp name="stopThread">false</boolProp>
|
||||
<stringProp name="variableNames">PERSON_URI</stringProp>
|
||||
</CSVDataSet>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="SelfEditor: InfoResource Profile Page" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/display/${INFO_RESOURCE_URI}</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree>
|
||||
<CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="InfoResource URIs from CSV" enabled="true">
|
||||
<stringProp name="filename">${INFO_RESOURCE_URI_FILE}</stringProp>
|
||||
<stringProp name="fileEncoding">utf8</stringProp>
|
||||
<stringProp name="variableNames">INFO_RESOURCE_URI</stringProp>
|
||||
<stringProp name="delimiter"></stringProp>
|
||||
<boolProp name="quotedData">false</boolProp>
|
||||
<boolProp name="recycle">true</boolProp>
|
||||
<boolProp name="stopThread">false</boolProp>
|
||||
<stringProp name="shareMode">All threads</stringProp>
|
||||
</CSVDataSet>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="SelfEditor: logout" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/logout</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
</hashTree>
|
||||
</hashTree>
|
||||
</hashTree>
|
||||
</jmeterTestPlan>
|
|
@ -1,564 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<jmeterTestPlan version="1.2" properties="2.1">
|
||||
<hashTree>
|
||||
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test Plan" enabled="true">
|
||||
<stringProp name="TestPlan.comments"></stringProp>
|
||||
<boolProp name="TestPlan.functional_mode">false</boolProp>
|
||||
<boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
|
||||
<elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments">
|
||||
<elementProp name="WEBAPP_HOST" elementType="Argument">
|
||||
<stringProp name="Argument.name">WEBAPP_HOST</stringProp>
|
||||
<stringProp name="Argument.value">${__property(webapp.host, , localhost)}</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="WEBAPP_PORT" elementType="Argument">
|
||||
<stringProp name="Argument.name">WEBAPP_PORT</stringProp>
|
||||
<stringProp name="Argument.value">${__property(webapp.port, , 8080)}</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="WEBAPP_NAME" elementType="Argument">
|
||||
<stringProp name="Argument.name">WEBAPP_NAME</stringProp>
|
||||
<stringProp name="Argument.value">${__property(webapp.name, , vivo)}</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="PERSON_URI_FILE" elementType="Argument">
|
||||
<stringProp name="Argument.name">PERSON_URI_FILE</stringProp>
|
||||
<stringProp name="Argument.value">${__property(file.person.uris, , PersonUris.csv)}</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="INFO_RESOURCE_URI_FILE" elementType="Argument">
|
||||
<stringProp name="Argument.name">INFO_RESOURCE_URI_FILE</stringProp>
|
||||
<stringProp name="Argument.value">${__property(file.infoResource.uris, , InfoResourceUris.csv)}</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="ITERATIONS" elementType="Argument">
|
||||
<stringProp name="Argument.name">ITERATIONS</stringProp>
|
||||
<stringProp name="Argument.value">${__property(iterations, , 10)}</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="DEFAULT_NAMESPACE" elementType="Argument">
|
||||
<stringProp name="Argument.name">DEFAULT_NAMESPACE</stringProp>
|
||||
<stringProp name="Argument.value">${__property(default.namespace, , http://vivo.mydomain.edu/individual/)}</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="THREADS" elementType="Argument">
|
||||
<stringProp name="Argument.name">THREADS</stringProp>
|
||||
<stringProp name="Argument.value">${__property(threads, , 1)}</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
</elementProp>
|
||||
</collectionProp>
|
||||
</elementProp>
|
||||
<stringProp name="TestPlan.user_define_classpath"></stringProp>
|
||||
</TestPlan>
|
||||
<hashTree>
|
||||
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Main Thread Group" enabled="true">
|
||||
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
|
||||
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
|
||||
<boolProp name="LoopController.continue_forever">false</boolProp>
|
||||
<stringProp name="LoopController.loops">${ITERATIONS}</stringProp>
|
||||
</elementProp>
|
||||
<stringProp name="ThreadGroup.num_threads">${THREADS}</stringProp>
|
||||
<stringProp name="ThreadGroup.ramp_time">${THREADS}</stringProp>
|
||||
<longProp name="ThreadGroup.start_time">1294759350000</longProp>
|
||||
<longProp name="ThreadGroup.end_time">1294759350000</longProp>
|
||||
<boolProp name="ThreadGroup.scheduler">false</boolProp>
|
||||
<stringProp name="ThreadGroup.duration"></stringProp>
|
||||
<stringProp name="ThreadGroup.delay"></stringProp>
|
||||
</ThreadGroup>
|
||||
<hashTree>
|
||||
<CookieManager guiclass="CookiePanel" testclass="CookieManager" testname="HTTP Cookie Manager" enabled="true">
|
||||
<collectionProp name="CookieManager.cookies"/>
|
||||
<boolProp name="CookieManager.clearEachIteration">false</boolProp>
|
||||
<stringProp name="CookieManager.policy">rfc2109</stringProp>
|
||||
</CookieManager>
|
||||
<hashTree/>
|
||||
<ConfigTestElement guiclass="HttpDefaultsGui" testclass="ConfigTestElement" testname="HTTP Request Defaults" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain">${WEBAPP_HOST}</stringProp>
|
||||
<stringProp name="HTTPSampler.port">${WEBAPP_PORT}</stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path"></stringProp>
|
||||
<boolProp name="HTTPSampler.image_parser">true</boolProp>
|
||||
</ConfigTestElement>
|
||||
<hashTree/>
|
||||
<GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="Not logged in" enabled="true">
|
||||
<stringProp name="TestPlan.comments">These pages are run while the user is not logged in.</stringProp>
|
||||
</GenericController>
|
||||
<hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="Nobody: Home page" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="Nobody: About page" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/about</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="Nobody: Person profile page" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/display/${PERSON_URI}</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree>
|
||||
<CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="Person URIs from CSV" enabled="true">
|
||||
<stringProp name="delimiter">,</stringProp>
|
||||
<stringProp name="fileEncoding">utf8</stringProp>
|
||||
<stringProp name="filename">${PERSON_URI_FILE}</stringProp>
|
||||
<boolProp name="quotedData">false</boolProp>
|
||||
<boolProp name="recycle">true</boolProp>
|
||||
<stringProp name="shareMode">All threads</stringProp>
|
||||
<boolProp name="stopThread">false</boolProp>
|
||||
<stringProp name="variableNames">PERSON_URI</stringProp>
|
||||
</CSVDataSet>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="Nobody: InfoResource Profile Page" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/display/${INFO_RESOURCE_URI}</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree>
|
||||
<CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="InfoResource URIs from CSV" enabled="true">
|
||||
<stringProp name="filename">${INFO_RESOURCE_URI_FILE}</stringProp>
|
||||
<stringProp name="fileEncoding">utf8</stringProp>
|
||||
<stringProp name="variableNames">INFO_RESOURCE_URI</stringProp>
|
||||
<stringProp name="delimiter"></stringProp>
|
||||
<boolProp name="quotedData">false</boolProp>
|
||||
<boolProp name="recycle">true</boolProp>
|
||||
<boolProp name="stopThread">false</boolProp>
|
||||
<stringProp name="shareMode">All threads</stringProp>
|
||||
</CSVDataSet>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
</hashTree>
|
||||
<GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="Logged in as DBA" enabled="true"/>
|
||||
<hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="DBA: Login, release 1.2" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments">
|
||||
<elementProp name="username" elementType="HTTPArgument">
|
||||
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
||||
<stringProp name="Argument.value">testAdmin</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
<boolProp name="HTTPArgument.use_equals">true</boolProp>
|
||||
<stringProp name="Argument.name">username</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="password" elementType="HTTPArgument">
|
||||
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
||||
<stringProp name="Argument.value">Password</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
<boolProp name="HTTPArgument.use_equals">true</boolProp>
|
||||
<stringProp name="Argument.name">password</stringProp>
|
||||
</elementProp>
|
||||
</collectionProp>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/programLogin</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="DBA: Site Admin" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/siteAdmin</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="DBA: Person profile page" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/display/${PERSON_URI}</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree>
|
||||
<CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="Person URIs from CSV" enabled="true">
|
||||
<stringProp name="delimiter">,</stringProp>
|
||||
<stringProp name="fileEncoding">utf8</stringProp>
|
||||
<stringProp name="filename">${PERSON_URI_FILE}</stringProp>
|
||||
<boolProp name="quotedData">false</boolProp>
|
||||
<boolProp name="recycle">true</boolProp>
|
||||
<stringProp name="shareMode">All threads</stringProp>
|
||||
<boolProp name="stopThread">false</boolProp>
|
||||
<stringProp name="variableNames">PERSON_URI</stringProp>
|
||||
</CSVDataSet>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="DBA: InfoResource Profile Page" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/display/${INFO_RESOURCE_URI}</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree>
|
||||
<CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="InfoResource URIs from CSV" enabled="true">
|
||||
<stringProp name="filename">${INFO_RESOURCE_URI_FILE}</stringProp>
|
||||
<stringProp name="fileEncoding">utf8</stringProp>
|
||||
<stringProp name="variableNames">INFO_RESOURCE_URI</stringProp>
|
||||
<stringProp name="delimiter"></stringProp>
|
||||
<boolProp name="quotedData">false</boolProp>
|
||||
<boolProp name="recycle">true</boolProp>
|
||||
<boolProp name="stopThread">false</boolProp>
|
||||
<stringProp name="shareMode">All threads</stringProp>
|
||||
</CSVDataSet>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="DBA: Auto-complete authorship" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments">
|
||||
<elementProp name="query" elementType="HTTPArgument">
|
||||
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
||||
<stringProp name="Argument.value">PREFIX core: <http://vivoweb.org/ontology/core#> SELECT ?pubUri WHERE {<${DEFAULT_NAMESPACE}${PERSON_URI}> core:authorInAuthorship ?authorshipUri . ?authorshipUri core:linkedInformationResource ?pubUri .}</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
<boolProp name="HTTPArgument.use_equals">true</boolProp>
|
||||
<stringProp name="Argument.name">query</stringProp>
|
||||
</elementProp>
|
||||
</collectionProp>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/ajax/sparqlQuery</stringProp>
|
||||
<stringProp name="HTTPSampler.method">POST</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree>
|
||||
<CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="Person URIs from CSV" enabled="true">
|
||||
<stringProp name="delimiter">,</stringProp>
|
||||
<stringProp name="fileEncoding">utf8</stringProp>
|
||||
<stringProp name="filename">${PERSON_URI_FILE}</stringProp>
|
||||
<boolProp name="quotedData">false</boolProp>
|
||||
<boolProp name="recycle">true</boolProp>
|
||||
<stringProp name="shareMode">All threads</stringProp>
|
||||
<boolProp name="stopThread">false</boolProp>
|
||||
<stringProp name="variableNames">PERSON_URI</stringProp>
|
||||
</CSVDataSet>
|
||||
<hashTree/>
|
||||
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
|
||||
<collectionProp name="Asserion.test_strings">
|
||||
<stringProp name="-977445585">pubUri</stringProp>
|
||||
</collectionProp>
|
||||
<stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
|
||||
<boolProp name="Assertion.assume_success">false</boolProp>
|
||||
<intProp name="Assertion.test_type">2</intProp>
|
||||
</ResponseAssertion>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="DBA: Auto-complete grant role" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments">
|
||||
<elementProp name="query" elementType="HTTPArgument">
|
||||
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
||||
<stringProp name="Argument.value">PREFIX core: <http://vivoweb.org/ontology/core#> SELECT ?grantUri WHERE {<${DEFAULT_NAMESPACE}${PERSON_URI}> <http://vivoweb.org/ontology/core#hasPrincipalInvestigatorRole> ?grantRole . ?grantRole core:roleIn ?grantUri .} </stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
<boolProp name="HTTPArgument.use_equals">true</boolProp>
|
||||
<stringProp name="Argument.name">query</stringProp>
|
||||
</elementProp>
|
||||
</collectionProp>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/ajax/sparqlQuery</stringProp>
|
||||
<stringProp name="HTTPSampler.method">POST</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree>
|
||||
<CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="Person URIs from CSV" enabled="true">
|
||||
<stringProp name="delimiter">,</stringProp>
|
||||
<stringProp name="fileEncoding">utf8</stringProp>
|
||||
<stringProp name="filename">${PERSON_URI_FILE}</stringProp>
|
||||
<boolProp name="quotedData">false</boolProp>
|
||||
<boolProp name="recycle">true</boolProp>
|
||||
<stringProp name="shareMode">All threads</stringProp>
|
||||
<boolProp name="stopThread">false</boolProp>
|
||||
<stringProp name="variableNames">PERSON_URI</stringProp>
|
||||
</CSVDataSet>
|
||||
<hashTree/>
|
||||
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
|
||||
<collectionProp name="Asserion.test_strings">
|
||||
<stringProp name="99198640">grantUri</stringProp>
|
||||
</collectionProp>
|
||||
<stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
|
||||
<boolProp name="Assertion.assume_success">false</boolProp>
|
||||
<intProp name="Assertion.test_type">2</intProp>
|
||||
</ResponseAssertion>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="DBA: logout" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/logout</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
<GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="Logged in as SelfEditor" enabled="true"/>
|
||||
<hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="SelfEditor: Login, release 1.2" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments">
|
||||
<elementProp name="username" elementType="HTTPArgument">
|
||||
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
||||
<stringProp name="Argument.value">dk15</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
<boolProp name="HTTPArgument.use_equals">true</boolProp>
|
||||
<stringProp name="Argument.name">username</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="password" elementType="HTTPArgument">
|
||||
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
||||
<stringProp name="Argument.value">Password</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
<boolProp name="HTTPArgument.use_equals">true</boolProp>
|
||||
<stringProp name="Argument.name">password</stringProp>
|
||||
</elementProp>
|
||||
</collectionProp>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/programLogin</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="SelfEditor: Person profile page" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/display/${PERSON_URI}</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree>
|
||||
<CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="Person URIs from CSV" enabled="true">
|
||||
<stringProp name="delimiter">,</stringProp>
|
||||
<stringProp name="fileEncoding">utf8</stringProp>
|
||||
<stringProp name="filename">${PERSON_URI_FILE}</stringProp>
|
||||
<boolProp name="quotedData">false</boolProp>
|
||||
<boolProp name="recycle">true</boolProp>
|
||||
<stringProp name="shareMode">All threads</stringProp>
|
||||
<boolProp name="stopThread">false</boolProp>
|
||||
<stringProp name="variableNames">PERSON_URI</stringProp>
|
||||
</CSVDataSet>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="SelfEditor: InfoResource Profile Page" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/display/${INFO_RESOURCE_URI}</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree>
|
||||
<CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="InfoResource URIs from CSV" enabled="true">
|
||||
<stringProp name="filename">${INFO_RESOURCE_URI_FILE}</stringProp>
|
||||
<stringProp name="fileEncoding">utf8</stringProp>
|
||||
<stringProp name="variableNames">INFO_RESOURCE_URI</stringProp>
|
||||
<stringProp name="delimiter"></stringProp>
|
||||
<boolProp name="quotedData">false</boolProp>
|
||||
<boolProp name="recycle">true</boolProp>
|
||||
<boolProp name="stopThread">false</boolProp>
|
||||
<stringProp name="shareMode">All threads</stringProp>
|
||||
</CSVDataSet>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="SelfEditor: logout" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/logout</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
</hashTree>
|
||||
</hashTree>
|
||||
</hashTree>
|
||||
</jmeterTestPlan>
|
|
@ -1,700 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<jmeterTestPlan version="1.2" properties="2.1">
|
||||
<hashTree>
|
||||
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test Plan" enabled="true">
|
||||
<stringProp name="TestPlan.comments"></stringProp>
|
||||
<boolProp name="TestPlan.functional_mode">false</boolProp>
|
||||
<boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
|
||||
<elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments">
|
||||
<elementProp name="WEBAPP_HOST" elementType="Argument">
|
||||
<stringProp name="Argument.name">WEBAPP_HOST</stringProp>
|
||||
<stringProp name="Argument.value">${__property(webapp.host, , localhost)}</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="WEBAPP_PORT" elementType="Argument">
|
||||
<stringProp name="Argument.name">WEBAPP_PORT</stringProp>
|
||||
<stringProp name="Argument.value">${__property(webapp.port, , 8080)}</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="WEBAPP_NAME" elementType="Argument">
|
||||
<stringProp name="Argument.name">WEBAPP_NAME</stringProp>
|
||||
<stringProp name="Argument.value">${__property(webapp.name, , vivo)}</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="PERSON_URI_FILE" elementType="Argument">
|
||||
<stringProp name="Argument.name">PERSON_URI_FILE</stringProp>
|
||||
<stringProp name="Argument.value">${__property(file.person.uris, , PersonUris.csv)}</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="INFO_RESOURCE_URI_FILE" elementType="Argument">
|
||||
<stringProp name="Argument.name">INFO_RESOURCE_URI_FILE</stringProp>
|
||||
<stringProp name="Argument.value">${__property(file.infoResource.uris, , InfoResourceUris.csv)}</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="ITERATIONS" elementType="Argument">
|
||||
<stringProp name="Argument.name">ITERATIONS</stringProp>
|
||||
<stringProp name="Argument.value">${__property(iterations, , 10)}</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="THREADS" elementType="Argument">
|
||||
<stringProp name="Argument.name">THREADS</stringProp>
|
||||
<stringProp name="Argument.value">${__property(threads, , 1)}</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="SELF_EDITOR_NAME" elementType="Argument">
|
||||
<stringProp name="Argument.name">SELF_EDITOR_NAME</stringProp>
|
||||
<stringProp name="Argument.value">${__property(self.editor.name)}</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
</elementProp>
|
||||
</collectionProp>
|
||||
</elementProp>
|
||||
<stringProp name="TestPlan.user_define_classpath"></stringProp>
|
||||
</TestPlan>
|
||||
<hashTree>
|
||||
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Main Thread Group" enabled="true">
|
||||
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
|
||||
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
|
||||
<boolProp name="LoopController.continue_forever">false</boolProp>
|
||||
<stringProp name="LoopController.loops">${ITERATIONS}</stringProp>
|
||||
</elementProp>
|
||||
<stringProp name="ThreadGroup.num_threads">${THREADS}</stringProp>
|
||||
<stringProp name="ThreadGroup.ramp_time">1</stringProp>
|
||||
<longProp name="ThreadGroup.start_time">1294759350000</longProp>
|
||||
<longProp name="ThreadGroup.end_time">1294759350000</longProp>
|
||||
<boolProp name="ThreadGroup.scheduler">false</boolProp>
|
||||
<stringProp name="ThreadGroup.duration"></stringProp>
|
||||
<stringProp name="ThreadGroup.delay"></stringProp>
|
||||
</ThreadGroup>
|
||||
<hashTree>
|
||||
<CookieManager guiclass="CookiePanel" testclass="CookieManager" testname="HTTP Cookie Manager" enabled="true">
|
||||
<collectionProp name="CookieManager.cookies"/>
|
||||
<boolProp name="CookieManager.clearEachIteration">false</boolProp>
|
||||
<stringProp name="CookieManager.policy">rfc2109</stringProp>
|
||||
</CookieManager>
|
||||
<hashTree/>
|
||||
<ConfigTestElement guiclass="HttpDefaultsGui" testclass="ConfigTestElement" testname="HTTP Request Defaults" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain">${WEBAPP_HOST}</stringProp>
|
||||
<stringProp name="HTTPSampler.port">${WEBAPP_PORT}</stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path"></stringProp>
|
||||
<boolProp name="HTTPSampler.image_parser">true</boolProp>
|
||||
</ConfigTestElement>
|
||||
<hashTree/>
|
||||
<GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="Not logged in" enabled="true">
|
||||
<stringProp name="TestPlan.comments">These pages are run while the user is not logged in.</stringProp>
|
||||
</GenericController>
|
||||
<hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="Nobody: Home page" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="Nobody: About page" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/about</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="Nobody: Index page" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/browse</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="Nobody: Index Person page" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/entitylist?vclassId=http%3A%2F%2Fxmlns.com%2Ffoaf%2F0.1%2FPerson</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="Nobody: Search for faculty" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/search?flag1=1&querytext=faculty</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="Nobody: Person profile page" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/display/${PERSON_URI}</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree>
|
||||
<CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="Person URIs from CSV" enabled="true">
|
||||
<stringProp name="delimiter">,</stringProp>
|
||||
<stringProp name="fileEncoding">utf8</stringProp>
|
||||
<stringProp name="filename">${PERSON_URI_FILE}</stringProp>
|
||||
<boolProp name="quotedData">false</boolProp>
|
||||
<boolProp name="recycle">true</boolProp>
|
||||
<stringProp name="shareMode">All threads</stringProp>
|
||||
<boolProp name="stopThread">false</boolProp>
|
||||
<stringProp name="variableNames">PERSON_URI</stringProp>
|
||||
</CSVDataSet>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="Nobody: InfoResource Profile Page" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/display/${INFO_RESOURCE_URI}</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree>
|
||||
<CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="InfoResource URIs from CSV" enabled="true">
|
||||
<stringProp name="filename">${INFO_RESOURCE_URI_FILE}</stringProp>
|
||||
<stringProp name="fileEncoding">utf8</stringProp>
|
||||
<stringProp name="variableNames">INFO_RESOURCE_URI</stringProp>
|
||||
<stringProp name="delimiter"></stringProp>
|
||||
<boolProp name="quotedData">false</boolProp>
|
||||
<boolProp name="recycle">true</boolProp>
|
||||
<boolProp name="stopThread">false</boolProp>
|
||||
<stringProp name="shareMode">All threads</stringProp>
|
||||
</CSVDataSet>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
</hashTree>
|
||||
<GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="Logged in as DBA" enabled="true"/>
|
||||
<hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="DBA: rediculous pre-login step" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/authenticate?login=block</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="DBA: Login, release 1.1" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments">
|
||||
<elementProp name="loginName" elementType="HTTPArgument">
|
||||
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
||||
<stringProp name="Argument.value">testAdmin</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
<boolProp name="HTTPArgument.use_equals">true</boolProp>
|
||||
<stringProp name="Argument.name">loginName</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="loginPassword" elementType="HTTPArgument">
|
||||
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
||||
<stringProp name="Argument.value">Password</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
<boolProp name="HTTPArgument.use_equals">true</boolProp>
|
||||
<stringProp name="Argument.name">loginPassword</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="login" elementType="HTTPArgument">
|
||||
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
||||
<stringProp name="Argument.value">block</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
<boolProp name="HTTPArgument.use_equals">true</boolProp>
|
||||
<stringProp name="Argument.name">login</stringProp>
|
||||
</elementProp>
|
||||
</collectionProp>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/authenticate</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree>
|
||||
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="DBA: Went to Site Admin" enabled="true">
|
||||
<collectionProp name="Asserion.test_strings">
|
||||
<stringProp name="606414423">Site Administration</stringProp>
|
||||
</collectionProp>
|
||||
<stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
|
||||
<boolProp name="Assertion.assume_success">false</boolProp>
|
||||
<intProp name="Assertion.test_type">2</intProp>
|
||||
</ResponseAssertion>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="DBA: Index page" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/browse</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="DBA: Index Person page" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/entitylist?vclassId=http%3A%2F%2Fxmlns.com%2Ffoaf%2F0.1%2FPerson</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="DBA: Search for faculty" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/search?flag1=1&querytext=faculty</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="DBA: Person profile page" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/display/${PERSON_URI}</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree>
|
||||
<CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="Person URIs from CSV" enabled="true">
|
||||
<stringProp name="delimiter">,</stringProp>
|
||||
<stringProp name="fileEncoding">utf8</stringProp>
|
||||
<stringProp name="filename">${PERSON_URI_FILE}</stringProp>
|
||||
<boolProp name="quotedData">false</boolProp>
|
||||
<boolProp name="recycle">true</boolProp>
|
||||
<stringProp name="shareMode">All threads</stringProp>
|
||||
<boolProp name="stopThread">false</boolProp>
|
||||
<stringProp name="variableNames">PERSON_URI</stringProp>
|
||||
</CSVDataSet>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="DBA: InfoResource Profile Page" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/display/${INFO_RESOURCE_URI}</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree>
|
||||
<CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="InfoResource URIs from CSV" enabled="true">
|
||||
<stringProp name="filename">${INFO_RESOURCE_URI_FILE}</stringProp>
|
||||
<stringProp name="fileEncoding">utf8</stringProp>
|
||||
<stringProp name="variableNames">INFO_RESOURCE_URI</stringProp>
|
||||
<stringProp name="delimiter"></stringProp>
|
||||
<boolProp name="quotedData">false</boolProp>
|
||||
<boolProp name="recycle">true</boolProp>
|
||||
<boolProp name="stopThread">false</boolProp>
|
||||
<stringProp name="shareMode">All threads</stringProp>
|
||||
</CSVDataSet>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="DBA: logout" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/logout</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
<GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="Logged in as SelfEditor" enabled="true"/>
|
||||
<hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="SelfEditor: rediculous pre-login step" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/authenticate?login=block</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="SelfEditor: Login, release 1.2" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments">
|
||||
<elementProp name="loginName" elementType="HTTPArgument">
|
||||
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
||||
<stringProp name="Argument.value">${SELF_EDITOR_NAME}</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
<boolProp name="HTTPArgument.use_equals">true</boolProp>
|
||||
<stringProp name="Argument.name">loginName</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="loginPassword" elementType="HTTPArgument">
|
||||
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
||||
<stringProp name="Argument.value">Password</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
<boolProp name="HTTPArgument.use_equals">true</boolProp>
|
||||
<stringProp name="Argument.name">loginPassword</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="login" elementType="HTTPArgument">
|
||||
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
||||
<stringProp name="Argument.value">block</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
<boolProp name="HTTPArgument.use_equals">true</boolProp>
|
||||
<stringProp name="Argument.name">login</stringProp>
|
||||
</elementProp>
|
||||
</collectionProp>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/authenticate</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree>
|
||||
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="SelfEditor: Went to Site Admin" enabled="true">
|
||||
<collectionProp name="Asserion.test_strings">
|
||||
<stringProp name="606414423">Site Administration</stringProp>
|
||||
</collectionProp>
|
||||
<stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
|
||||
<boolProp name="Assertion.assume_success">false</boolProp>
|
||||
<intProp name="Assertion.test_type">2</intProp>
|
||||
</ResponseAssertion>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="SelfEditor: Index page" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/browse</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="SelfEditor: Index Person page" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/entitylist?vclassId=http%3A%2F%2Fxmlns.com%2Ffoaf%2F0.1%2FPerson</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="SelfEditor: Search for faculty" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/search?flag1=1&querytext=faculty</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="SelfEditor: Person profile page" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/display/${PERSON_URI}</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree>
|
||||
<CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="Person URIs from CSV" enabled="true">
|
||||
<stringProp name="delimiter">,</stringProp>
|
||||
<stringProp name="fileEncoding">utf8</stringProp>
|
||||
<stringProp name="filename">${PERSON_URI_FILE}</stringProp>
|
||||
<boolProp name="quotedData">false</boolProp>
|
||||
<boolProp name="recycle">true</boolProp>
|
||||
<stringProp name="shareMode">All threads</stringProp>
|
||||
<boolProp name="stopThread">false</boolProp>
|
||||
<stringProp name="variableNames">PERSON_URI</stringProp>
|
||||
</CSVDataSet>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="SelfEditor: InfoResource Profile Page" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/display/${INFO_RESOURCE_URI}</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree>
|
||||
<CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="InfoResource URIs from CSV" enabled="true">
|
||||
<stringProp name="filename">${INFO_RESOURCE_URI_FILE}</stringProp>
|
||||
<stringProp name="fileEncoding">utf8</stringProp>
|
||||
<stringProp name="variableNames">INFO_RESOURCE_URI</stringProp>
|
||||
<stringProp name="delimiter"></stringProp>
|
||||
<boolProp name="quotedData">false</boolProp>
|
||||
<boolProp name="recycle">true</boolProp>
|
||||
<boolProp name="stopThread">false</boolProp>
|
||||
<stringProp name="shareMode">All threads</stringProp>
|
||||
</CSVDataSet>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="SelfEditor: logout" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/logout</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
</hashTree>
|
||||
</hashTree>
|
||||
</hashTree>
|
||||
</jmeterTestPlan>
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1,483 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<jmeterTestPlan version="1.2" properties="2.1">
|
||||
<hashTree>
|
||||
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Basic tests" enabled="true">
|
||||
<stringProp name="TestPlan.comments">$This file is distributed under the terms of the license in /doc/license.txt$</stringProp>
|
||||
<boolProp name="TestPlan.functional_mode">false</boolProp>
|
||||
<boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
|
||||
<elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments">
|
||||
<elementProp name="WEBAPP_HOST" elementType="Argument">
|
||||
<stringProp name="Argument.name">WEBAPP_HOST</stringProp>
|
||||
<stringProp name="Argument.value">${__property(webapp.host, localhost)}</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="WEBAPP_PORT" elementType="Argument">
|
||||
<stringProp name="Argument.name">WEBAPP_PORT</stringProp>
|
||||
<stringProp name="Argument.value">${__property(webapp.port, 8080)}</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="WEBAPP_NAME" elementType="Argument">
|
||||
<stringProp name="Argument.name">WEBAPP_NAME</stringProp>
|
||||
<stringProp name="Argument.value">${__property(webapp.name, vivo)}</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="PERSON_URI_FILE" elementType="Argument">
|
||||
<stringProp name="Argument.name">PERSON_URI_FILE</stringProp>
|
||||
<stringProp name="Argument.value">${__property(file.person.uris, PersonUris.csv)}</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="INFO_RESOURCE_URI_FILE" elementType="Argument">
|
||||
<stringProp name="Argument.name">INFO_RESOURCE_URI_FILE</stringProp>
|
||||
<stringProp name="Argument.value">${__property(file.infoResource.uris, InfoResourceUris.csv)}</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="ITERATIONS" elementType="Argument">
|
||||
<stringProp name="Argument.name">ITERATIONS</stringProp>
|
||||
<stringProp name="Argument.value">${__property(iterations, 10)}</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
</elementProp>
|
||||
</collectionProp>
|
||||
</elementProp>
|
||||
<stringProp name="TestPlan.user_define_classpath"></stringProp>
|
||||
</TestPlan>
|
||||
<hashTree>
|
||||
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Main thread group" enabled="true">
|
||||
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
|
||||
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
|
||||
<boolProp name="LoopController.continue_forever">false</boolProp>
|
||||
<stringProp name="LoopController.loops">1</stringProp>
|
||||
</elementProp>
|
||||
<stringProp name="ThreadGroup.num_threads">1</stringProp>
|
||||
<stringProp name="ThreadGroup.ramp_time">1</stringProp>
|
||||
<longProp name="ThreadGroup.start_time">1293123271000</longProp>
|
||||
<longProp name="ThreadGroup.end_time">1293123271000</longProp>
|
||||
<boolProp name="ThreadGroup.scheduler">false</boolProp>
|
||||
<stringProp name="ThreadGroup.duration"></stringProp>
|
||||
<stringProp name="ThreadGroup.delay"></stringProp>
|
||||
</ThreadGroup>
|
||||
<hashTree>
|
||||
<CookieManager guiclass="CookiePanel" testclass="CookieManager" testname="HTTP Cookie Manager" enabled="true">
|
||||
<collectionProp name="CookieManager.cookies"/>
|
||||
<boolProp name="CookieManager.clearEachIteration">false</boolProp>
|
||||
<stringProp name="CookieManager.policy">rfc2109</stringProp>
|
||||
</CookieManager>
|
||||
<hashTree/>
|
||||
<ConfigTestElement guiclass="HttpDefaultsGui" testclass="ConfigTestElement" testname="HTTP Request Defaults" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain">${WEBAPP_HOST}</stringProp>
|
||||
<stringProp name="HTTPSampler.port">${WEBAPP_PORT}</stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path"></stringProp>
|
||||
<boolProp name="HTTPSampler.image_parser">true</boolProp>
|
||||
</ConfigTestElement>
|
||||
<hashTree/>
|
||||
<LoopController guiclass="LoopControlPanel" testclass="LoopController" testname="Not logged in" enabled="true">
|
||||
<boolProp name="LoopController.continue_forever">true</boolProp>
|
||||
<stringProp name="LoopController.loops">${ITERATIONS}</stringProp>
|
||||
</LoopController>
|
||||
<hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="Home page" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="About page" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/about</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="Person Profile page" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/display/${PERSON_URI}</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree>
|
||||
<CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="Person URIs from CSV" enabled="true">
|
||||
<stringProp name="delimiter">,</stringProp>
|
||||
<stringProp name="fileEncoding">utf8</stringProp>
|
||||
<stringProp name="filename">${PERSON_URI_FILE}</stringProp>
|
||||
<boolProp name="quotedData">false</boolProp>
|
||||
<boolProp name="recycle">true</boolProp>
|
||||
<stringProp name="shareMode">Current thread group</stringProp>
|
||||
<boolProp name="stopThread">false</boolProp>
|
||||
<stringProp name="variableNames">PERSON_URI</stringProp>
|
||||
</CSVDataSet>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="InfoResource Profile Page" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/display/${INFO_RESOURCE_URI}</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree>
|
||||
<CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="CSV Data Set Config" enabled="true">
|
||||
<stringProp name="filename">${INFO_RESOURCE_URI_FILE}</stringProp>
|
||||
<stringProp name="fileEncoding">utf8</stringProp>
|
||||
<stringProp name="variableNames">INFO_RESOURCE_URI</stringProp>
|
||||
<stringProp name="delimiter">,</stringProp>
|
||||
<boolProp name="quotedData">false</boolProp>
|
||||
<boolProp name="recycle">true</boolProp>
|
||||
<boolProp name="stopThread">false</boolProp>
|
||||
<stringProp name="shareMode">All threads</stringProp>
|
||||
</CSVDataSet>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
</hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="Log in as DBA" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments">
|
||||
<elementProp name="username" elementType="HTTPArgument">
|
||||
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
||||
<stringProp name="Argument.value">testAdmin</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
<boolProp name="HTTPArgument.use_equals">true</boolProp>
|
||||
<stringProp name="Argument.name">username</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="password" elementType="HTTPArgument">
|
||||
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
||||
<stringProp name="Argument.value">Password</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
<boolProp name="HTTPArgument.use_equals">true</boolProp>
|
||||
<stringProp name="Argument.name">password</stringProp>
|
||||
</elementProp>
|
||||
</collectionProp>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/programLogin</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
<LoopController guiclass="LoopControlPanel" testclass="LoopController" testname="Logged in as DBA" enabled="true">
|
||||
<boolProp name="LoopController.continue_forever">true</boolProp>
|
||||
<stringProp name="LoopController.loops">${ITERATIONS}</stringProp>
|
||||
</LoopController>
|
||||
<hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="Site Admin" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/siteAdmin</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="Person Profile page - DBA" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/display/${PERSON_URI}</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree>
|
||||
<CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="Person URIs from CSV" enabled="true">
|
||||
<stringProp name="delimiter">,</stringProp>
|
||||
<stringProp name="fileEncoding">utf8</stringProp>
|
||||
<stringProp name="filename">${PERSON_URI_FILE}</stringProp>
|
||||
<boolProp name="quotedData">false</boolProp>
|
||||
<boolProp name="recycle">true</boolProp>
|
||||
<stringProp name="shareMode">Current thread group</stringProp>
|
||||
<boolProp name="stopThread">false</boolProp>
|
||||
<stringProp name="variableNames">PERSON_URI</stringProp>
|
||||
</CSVDataSet>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="InfoResource Profile Page - DBA" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/display/${INFO_RESOURCE_URI}</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree>
|
||||
<CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="CSV Data Set Config" enabled="true">
|
||||
<stringProp name="filename">${INFO_RESOURCE_URI_FILE}</stringProp>
|
||||
<stringProp name="fileEncoding">utf8</stringProp>
|
||||
<stringProp name="variableNames">INFO_RESOURCE_URI</stringProp>
|
||||
<stringProp name="delimiter">,</stringProp>
|
||||
<boolProp name="quotedData">false</boolProp>
|
||||
<boolProp name="recycle">true</boolProp>
|
||||
<boolProp name="stopThread">false</boolProp>
|
||||
<stringProp name="shareMode">All threads</stringProp>
|
||||
</CSVDataSet>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
</hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="Logout - DBA" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/logout</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="Log in as SE" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments">
|
||||
<elementProp name="username" elementType="HTTPArgument">
|
||||
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
||||
<stringProp name="Argument.value">dk15</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
<boolProp name="HTTPArgument.use_equals">true</boolProp>
|
||||
<stringProp name="Argument.name">username</stringProp>
|
||||
</elementProp>
|
||||
<elementProp name="password" elementType="HTTPArgument">
|
||||
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
||||
<stringProp name="Argument.value">Password</stringProp>
|
||||
<stringProp name="Argument.metadata">=</stringProp>
|
||||
<boolProp name="HTTPArgument.use_equals">true</boolProp>
|
||||
<stringProp name="Argument.name">password</stringProp>
|
||||
</elementProp>
|
||||
</collectionProp>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/programLogin</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
<LoopController guiclass="LoopControlPanel" testclass="LoopController" testname="Logged in as SelfEditor" enabled="true">
|
||||
<boolProp name="LoopController.continue_forever">true</boolProp>
|
||||
<stringProp name="LoopController.loops">${ITERATIONS}</stringProp>
|
||||
</LoopController>
|
||||
<hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="Site Admin" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/siteAdmin</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="Person Profile page - SE" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/display/${PERSON_URI}</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree>
|
||||
<CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="Person URIs from CSV" enabled="true">
|
||||
<stringProp name="delimiter">,</stringProp>
|
||||
<stringProp name="fileEncoding">utf8</stringProp>
|
||||
<stringProp name="filename">${PERSON_URI_FILE}</stringProp>
|
||||
<boolProp name="quotedData">false</boolProp>
|
||||
<boolProp name="recycle">true</boolProp>
|
||||
<stringProp name="shareMode">Current thread group</stringProp>
|
||||
<boolProp name="stopThread">false</boolProp>
|
||||
<stringProp name="variableNames">PERSON_URI</stringProp>
|
||||
</CSVDataSet>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="InfoResource Profile Page - SE" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/display/${INFO_RESOURCE_URI}</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree>
|
||||
<CSVDataSet guiclass="TestBeanGUI" testclass="CSVDataSet" testname="CSV Data Set Config" enabled="true">
|
||||
<stringProp name="filename">${INFO_RESOURCE_URI_FILE}</stringProp>
|
||||
<stringProp name="fileEncoding">utf8</stringProp>
|
||||
<stringProp name="variableNames">INFO_RESOURCE_URI</stringProp>
|
||||
<stringProp name="delimiter">,</stringProp>
|
||||
<boolProp name="quotedData">false</boolProp>
|
||||
<boolProp name="recycle">true</boolProp>
|
||||
<boolProp name="stopThread">false</boolProp>
|
||||
<stringProp name="shareMode">All threads</stringProp>
|
||||
</CSVDataSet>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
</hashTree>
|
||||
<HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="Logout - SE" enabled="true">
|
||||
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
||||
<collectionProp name="Arguments.arguments"/>
|
||||
</elementProp>
|
||||
<stringProp name="HTTPSampler.domain"></stringProp>
|
||||
<stringProp name="HTTPSampler.port"></stringProp>
|
||||
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
||||
<stringProp name="HTTPSampler.protocol"></stringProp>
|
||||
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
||||
<stringProp name="HTTPSampler.path">${WEBAPP_NAME}/logout</stringProp>
|
||||
<stringProp name="HTTPSampler.method">GET</stringProp>
|
||||
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
||||
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
||||
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
||||
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
||||
<boolProp name="HTTPSampler.monitor">false</boolProp>
|
||||
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
||||
</HTTPSampler>
|
||||
<hashTree/>
|
||||
</hashTree>
|
||||
</hashTree>
|
||||
</hashTree>
|
||||
</jmeterTestPlan>
|
|
@ -1,3 +0,0 @@
|
|||
n432
|
||||
n4585
|
||||
n7159
|
|
|
@ -1,9 +0,0 @@
|
|||
n3148
|
||||
n1613
|
||||
n1451
|
||||
n1748
|
||||
n2936
|
||||
n3084
|
||||
n2731
|
||||
n432
|
||||
n1048
|
|
|
@ -1,245 +0,0 @@
|
|||
#! /usr/bin/ruby
|
||||
|
||||
=begin
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Take a file that MySQL produced listing the URIs and filenames of all expected
|
||||
upload files. Scan through the uploads directory, creating such files wherever
|
||||
they are needed.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------
|
||||
=end
|
||||
$: << File.dirname(File.expand_path(__FILE__))
|
||||
require 'date'
|
||||
require 'fileutils'
|
||||
require 'property_file_reader'
|
||||
|
||||
|
||||
# ------------------------------------------------------------------------------------
|
||||
# FileInfoFile class
|
||||
# ------------------------------------------------------------------------------------
|
||||
|
||||
class FileInfoFile
|
||||
attr_reader :default_namespace
|
||||
attr_reader :data
|
||||
|
||||
def parse_info_line(line)
|
||||
# Lines are in this form: "URI","filename"
|
||||
match = line.match(/^"([^"]*)","([^"]*)"$/)
|
||||
raise "Can't parse this line: '#{line}'" if !match
|
||||
return match.captures[0], match.captures[1]
|
||||
end
|
||||
|
||||
def parse_default_namespace(uri)
|
||||
match = /^(.*)individual/.match(uri)
|
||||
raise "Can't find default namespace: '#{uri}'" if match == nil
|
||||
"#{match.captures[0]}individual/"
|
||||
end
|
||||
|
||||
public
|
||||
|
||||
def initialize(filepath)
|
||||
@data = []
|
||||
File.open(filepath) do |f|
|
||||
f.each() do |line|
|
||||
@data.push(parse_info_line(line))
|
||||
end
|
||||
end
|
||||
puts "parsed #{@data.length} lines."
|
||||
|
||||
@default_namespace = parse_default_namespace(@data[0][0])
|
||||
puts "default namespace is '#{@default_namespace}'"
|
||||
end
|
||||
end
|
||||
|
||||
# ------------------------------------------------------------------------------------
|
||||
# NamespacesFile class
|
||||
#
|
||||
# Read, query, modify and write the namespace-prefixes file.
|
||||
# ------------------------------------------------------------------------------------
|
||||
|
||||
class NamespacesFile
|
||||
NAMESPACES_FILENAME = 'file_storage_namespaces.properties'
|
||||
|
||||
public
|
||||
|
||||
def initialize(uploads_directory, scan_only)
|
||||
@uploads_directory = uploads_directory
|
||||
@scan_only = scan_only
|
||||
|
||||
Dir.chdir(@uploads_directory) do |dir|
|
||||
@namespaces = {}
|
||||
if File.file?(NAMESPACES_FILENAME)
|
||||
@namespaces = PropertyFileReader.read(NAMESPACES_FILENAME)
|
||||
@namespaces.delete("properties_file_path")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def add_namespace(namespace)
|
||||
if @namespaces.has_value?(namespace)
|
||||
puts "found prefix for #{namespace}"
|
||||
return
|
||||
end
|
||||
|
||||
'abcdefghijklmnopqrstuvwxyz'.split("").each do |this_char|
|
||||
if (!@namespaces.has_key?(this_char))
|
||||
@namespaces[this_char] = namespace
|
||||
puts "assigned prefix = '#{this_char}'"
|
||||
return
|
||||
end
|
||||
end
|
||||
raise "all prefixes are used!"
|
||||
end
|
||||
|
||||
def prefix(namespace)
|
||||
@namespaces.each() do | key, value |
|
||||
return key if value == namespace
|
||||
end
|
||||
raise "no prefix for '#{namespace}'"
|
||||
end
|
||||
|
||||
def write()
|
||||
if @scan_only
|
||||
puts "Scan-only: not writing namespaces file"
|
||||
else
|
||||
Dir.chdir(@uploads_directory) do |dir|
|
||||
File.open(NAMESPACES_FILENAME, "w") do |f|
|
||||
@namespaces.each do |prefix, namespace|
|
||||
f.puts "#{prefix} = #{namespace}"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# ------------------------------------------------------------------------------------
|
||||
# Main class - UploadFileFaker
|
||||
# ------------------------------------------------------------------------------------
|
||||
|
||||
class UploadFileFaker
|
||||
#
|
||||
# Do we have any chance of succeeding with these properties?
|
||||
#
|
||||
def sanity_checks_on_properties()
|
||||
raise("Properties file must contain a value for 'uploads_directory'") if @uploads_directory == nil
|
||||
raise("Properties file must contain a value for 'file_info_file'") if @file_info_file == nil
|
||||
raise("Properties file must contain a value for 'template_file'") if @template_file == nil
|
||||
|
||||
if !File.directory?(@uploads_directory)
|
||||
raise "Not a directory: '#{@uploads_directory}'."
|
||||
end
|
||||
if !File.file?(@file_info_file)
|
||||
raise "File does not exist: '#{@file_info_file}'."
|
||||
end
|
||||
if !File.file?(@template_file)
|
||||
raise "File does not exist: '#{@template_file}'."
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
# Check each location that should contain an image, and if we're not just
|
||||
# scanning, put one there.
|
||||
#
|
||||
def create_image_files_where_needed()
|
||||
@file_info.data.each do |line|
|
||||
uri, filename = line
|
||||
process_file_info(uri, filename)
|
||||
end
|
||||
end
|
||||
|
||||
def process_file_info(uri, filename)
|
||||
full_path = figure_full_path(uri, filename)
|
||||
|
||||
if File.file?(full_path)
|
||||
puts "File already exists at: '#{full_path}'"
|
||||
elsif @scan_only
|
||||
puts "Scan only - no file at: '#{full_path}'"
|
||||
else
|
||||
puts "Creating file at: '#{full_path}'"
|
||||
FileUtils.mkpath(File.dirname(full_path))
|
||||
FileUtils.cp(@template_file, full_path)
|
||||
end
|
||||
end
|
||||
|
||||
def figure_full_path(uri, filename)
|
||||
prefixed_uri = substitute_prefix_for_namespace(uri)
|
||||
construct_full_path(prefixed_uri, filename)
|
||||
end
|
||||
|
||||
def substitute_prefix_for_namespace(uri)
|
||||
if uri[0, @namespace.length] == @namespace
|
||||
uri.sub(@namespace, "#{@prefix}~")
|
||||
else
|
||||
raise "Doesn't start with default namespace: '#{uri}'"
|
||||
end
|
||||
end
|
||||
|
||||
def construct_full_path(prefixed_uri, filename)
|
||||
path = ""
|
||||
0.step(prefixed_uri.size - 1, 3) do |i|
|
||||
path = "#{path}/#{prefixed_uri[i, 3]}"
|
||||
end
|
||||
"#{@uploads_directory}/file_storage_root#{path}/#{filename}"
|
||||
end
|
||||
|
||||
public
|
||||
|
||||
#
|
||||
# Setup and get ready to process.
|
||||
#
|
||||
# properties is a map of keys to values, probably parsed from a properties file.
|
||||
#
|
||||
def initialize(properties)
|
||||
scan_only_string = properties['scan_only']
|
||||
@scan_only = 'false' != scan_only_string
|
||||
|
||||
@uploads_directory = properties['uploads_directory']
|
||||
@file_info_file = properties['file_info_file']
|
||||
@template_file = properties['template_file']
|
||||
|
||||
sanity_checks_on_properties()
|
||||
end
|
||||
|
||||
#
|
||||
# Start the scanning (and copying).
|
||||
#
|
||||
def process()
|
||||
@file_info = FileInfoFile.new(@file_info_file)
|
||||
@namespace = @file_info.default_namespace
|
||||
|
||||
namespaces_file = NamespacesFile.new(@uploads_directory, @scan_only)
|
||||
namespaces_file.add_namespace(@namespace)
|
||||
namespaces_file.write()
|
||||
@prefix = namespaces_file.prefix(@namespace)
|
||||
|
||||
create_image_files_where_needed()
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
# ------------------------------------------------------------------------------------
|
||||
# Standalone calling.
|
||||
#
|
||||
# Do this if this program was called from the command line. That is, if the command
|
||||
# expands to the path of this file.
|
||||
# ------------------------------------------------------------------------------------
|
||||
#
|
||||
|
||||
if File.expand_path($0) == File.expand_path(__FILE__)
|
||||
if ARGV.length == 0
|
||||
raise("No arguments - usage is: UploadFileFaker.rb <property_file>")
|
||||
end
|
||||
if !File.file?(ARGV[0])
|
||||
raise "File does not exist: '#{ARGV[0]}'."
|
||||
end
|
||||
|
||||
properties = PropertyFileReader.read(ARGV[0])
|
||||
|
||||
uff = UploadFileFaker.new(properties)
|
||||
uff.process
|
||||
|
||||
puts "UploadFileFaker was successful."
|
||||
end
|
|
@ -1,39 +0,0 @@
|
|||
=begin
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
A utility class that reads a properties file and returns a hash containing the
|
||||
properties.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
=end
|
||||
|
||||
class PropertyFileReader
|
||||
# Read a properties file and return a hash.
|
||||
#
|
||||
# Parameters: the path to the properties file
|
||||
#
|
||||
# The hash includes the special property "properties_file_path", which holds
|
||||
# the path to the properties file.
|
||||
#
|
||||
def self.read(file_path)
|
||||
properties = {}
|
||||
properties["properties_file_path"] = File.expand_path(file_path)
|
||||
|
||||
File.open(file_path) do |file|
|
||||
file.each_line do |line|
|
||||
line.strip!
|
||||
if line.length == 0 || line[0] == ?# || line[0] == ?!
|
||||
# ignore blank lines, and lines starting with '#' or '!'.
|
||||
elsif line =~ /(.*?)\s*[=:]\s*(.*)/
|
||||
# key and value are separated by '=' or ':' and optional whitespace.
|
||||
properties[$1.strip] = $2
|
||||
else
|
||||
# No '=' or ':' means that the value is empty.
|
||||
properties[line] = ''
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return properties
|
||||
end
|
||||
end
|
Loading…
Add table
Reference in a new issue