Created
June 24, 2015 08:31
-
-
Save rajeshtaneja/6790b403bdd0df2e296d to your computer and use it in GitHub Desktop.
Webdriver jmx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<jmeterTestPlan version="1.2" properties="2.8" jmeter="2.13 r1665067"> | |
<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="Site" elementType="Argument"> | |
<stringProp name="Argument.name">Site</stringProp> | |
<stringProp name="Argument.value">http://rajesh.per.in.moodle.com/im</stringProp> | |
<stringProp name="Argument.metadata">=</stringProp> | |
</elementProp> | |
</collectionProp> | |
</elementProp> | |
<stringProp name="TestPlan.user_define_classpath"></stringProp> | |
</TestPlan> | |
<hashTree> | |
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="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">4</stringProp> | |
</elementProp> | |
<stringProp name="ThreadGroup.num_threads">3</stringProp> | |
<stringProp name="ThreadGroup.ramp_time">1</stringProp> | |
<longProp name="ThreadGroup.start_time">1434948643000</longProp> | |
<longProp name="ThreadGroup.end_time">1434948643000</longProp> | |
<boolProp name="ThreadGroup.scheduler">false</boolProp> | |
<stringProp name="ThreadGroup.duration"></stringProp> | |
<stringProp name="ThreadGroup.delay"></stringProp> | |
</ThreadGroup> | |
<hashTree> | |
<com.googlecode.jmeter.plugins.webdriver.config.FirefoxDriverConfig guiclass="com.googlecode.jmeter.plugins.webdriver.config.gui.FirefoxDriverConfigGui" testclass="com.googlecode.jmeter.plugins.webdriver.config.FirefoxDriverConfig" testname="jp@gc - Firefox Driver Config" enabled="true"> | |
<stringProp name="WebDriverConfig.proxy_type">SYSTEM</stringProp> | |
<stringProp name="WebDriverConfig.proxy_pac_url"></stringProp> | |
<stringProp name="WebDriverConfig.http_host"></stringProp> | |
<intProp name="WebDriverConfig.http_port">8080</intProp> | |
<boolProp name="WebDriverConfig.use_http_for_all_protocols">true</boolProp> | |
<stringProp name="WebDriverConfig.https_host"></stringProp> | |
<intProp name="WebDriverConfig.https_port">8080</intProp> | |
<stringProp name="WebDriverConfig.ftp_host"></stringProp> | |
<intProp name="WebDriverConfig.ftp_port">8080</intProp> | |
<stringProp name="WebDriverConfig.socks_host"></stringProp> | |
<intProp name="WebDriverConfig.socks_port">8080</intProp> | |
<stringProp name="WebDriverConfig.no_proxy">localhost</stringProp> | |
<boolProp name="WebDriverConfig.maximize_browser">true</boolProp> | |
<boolProp name="WebDriverConfig.reset_per_iteration">false</boolProp> | |
<boolProp name="WebDriverConfig.dev_mode">false</boolProp> | |
<boolProp name="FirefoxDriverConfig.general.useragent.override.enabled">false</boolProp> | |
<boolProp name="FirefoxDriverConfig.network.negotiate-auth.allow-insecure-ntlm-v1">false</boolProp> | |
<collectionProp name="FirefoxDriverConfig.general.extensions"/> | |
<collectionProp name="FirefoxDriverConfig.general.preferences"/> | |
</com.googlecode.jmeter.plugins.webdriver.config.FirefoxDriverConfig> | |
<hashTree/> | |
<com.googlecode.jmeter.plugins.webdriver.sampler.WebDriverSampler guiclass="com.googlecode.jmeter.plugins.webdriver.sampler.gui.WebDriverSamplerGui" testclass="com.googlecode.jmeter.plugins.webdriver.sampler.WebDriverSampler" testname="Home page" enabled="true"> | |
<stringProp name="WebDriverSampler.script">var pkg = JavaImporter(org.openqa.selenium) | |
WDS.sampleResult.sampleStart() | |
// Go to login page | |
WDS.browser.get(WDS.Site) | |
// Click on login link. | |
WDS.browser.findElement(pkg.By.cssSelector('span.login a')).click(); | |
WDS.sampleResult.sampleEnd() | |
</stringProp> | |
<stringProp name="WebDriverSampler.parameters"></stringProp> | |
</com.googlecode.jmeter.plugins.webdriver.sampler.WebDriverSampler> | |
<hashTree/> | |
<com.googlecode.jmeter.plugins.webdriver.sampler.WebDriverSampler guiclass="com.googlecode.jmeter.plugins.webdriver.sampler.gui.WebDriverSamplerGui" testclass="com.googlecode.jmeter.plugins.webdriver.sampler.WebDriverSampler" testname="Login page" enabled="true"> | |
<stringProp name="WebDriverSampler.script">var pkg = JavaImporter(org.openqa.selenium) | |
//var wait = new pkg.WebDriverWait(WDS.browser, 10) | |
// Enter username/password | |
var username = WDS.browser.findElement(pkg.By.id('username')) | |
username.sendKeys(['admin']) | |
var password = WDS.browser.findElement(pkg.By.id('password')) | |
password.sendKeys(['test']) | |
WDS.sampleResult.sampleStart() | |
// Press login button. | |
var button = WDS.browser.findElement(pkg.By.id('loginbtn')) | |
button.click() | |
//wait.until(pkg.ExpectedConditions.presenceOfElementLocated(pkg.By.xpath('//a[.=\'Log out\']'))) | |
WDS.sampleResult.sampleEnd() | |
// Verif page | |
var results = WDS.browser.findElements(pkg.By.xpath('//a[.=\'Log out\']')) | |
if(results.empty) { | |
WDS.sampleResult.successful = false | |
WDS.sampleResult.responseMessage = 'Login failed.' | |
}</stringProp> | |
<stringProp name="WebDriverSampler.parameters"></stringProp> | |
</com.googlecode.jmeter.plugins.webdriver.sampler.WebDriverSampler> | |
<hashTree/> | |
<com.googlecode.jmeter.plugins.webdriver.sampler.WebDriverSampler guiclass="com.googlecode.jmeter.plugins.webdriver.sampler.gui.WebDriverSamplerGui" testclass="com.googlecode.jmeter.plugins.webdriver.sampler.WebDriverSampler" testname="Log out" enabled="true"> | |
<stringProp name="WebDriverSampler.script">// Go to login and enter user password | |
var pkg = JavaImporter(org.openqa.selenium) | |
WDS.sampleResult.sampleStart() | |
// Click on login link. | |
var logoutbutton = WDS.browser.findElement(pkg.By.xpath('/html//div[@class=\'logininfo\']//a[.=\'Log out\']')) | |
logoutbutton.click(); | |
WDS.sampleResult.sampleEnd()</stringProp> | |
<stringProp name="WebDriverSampler.parameters"></stringProp> | |
</com.googlecode.jmeter.plugins.webdriver.sampler.WebDriverSampler> | |
<hashTree/> | |
<JSR223Listener guiclass="TestBeanGUI" testclass="JSR223Listener" testname="JSR223 Listener" enabled="true"> | |
<stringProp name="scriptLanguage">bsh</stringProp> | |
<stringProp name="parameters"></stringProp> | |
<stringProp name="filename"></stringProp> | |
<stringProp name="cacheKey"></stringProp> | |
<stringProp name="script">import java.io.*; | |
import java.util.regex.*; | |
import org.apache.commons.lang3.StringUtils; | |
import org.apache.jmeter.util.JMeterUtils; // http://jakarta.apache.org/jmeter/api/org/apache/jmeter/util/JMeterUtils.html | |
import org.apache.jmeter.threads.JMeterContext; // http://jakarta.apache.org/jmeter/api/org/apache/jmeter/threads/JMeterContext.html | |
import org.apache.jmeter.samplers.SampleResult; // http://jakarta.apache.org/jmeter/api/org/apache/jmeter/samplers/SampleResult.html | |
MoodleResult(SampleResult result) { | |
Integer thread = ctx.getThreadNum(); | |
String html = result.getResponseDataAsString(); | |
String dbreads = "0"; | |
Pattern pdbreads = Pattern.compile(".*?DB reads/writes: (\\d+)/\\d+.*", Pattern.UNIX_LINES | Pattern.DOTALL); | |
Matcher mdbreads = pdbreads.matcher(html); | |
if (mdbreads.matches()) { | |
dbreads = mdbreads.group(1); | |
} | |
String dbwritesstr = "0"; | |
Pattern pdbwrites = Pattern.compile(".*?DB reads/writes: \\d+/(\\d+).*", Pattern.UNIX_LINES | Pattern.DOTALL); | |
Matcher mdbwrites = pdbwrites.matcher(html); | |
if (mdbwrites.matches()) { | |
dbwritesstr = mdbwrites.group(1); | |
} | |
Integer dbwrites = Integer.parseInt(dbwritesstr); | |
// Adding logs if required. | |
if (props.get("includelogs") != null) { | |
Pattern plogwrites = Pattern.compile(".*?Log DB writes (\\d+).*", Pattern.UNIX_LINES | Pattern.DOTALL); | |
Matcher mlogwrites = plogwrites.matcher(html); | |
if (mlogwrites.matches()) { | |
dbwrites = dbwrites + Integer.parseInt(mlogwrites.group(1)); | |
} | |
} | |
String dbquerytime = "0"; | |
Pattern pdbquerytime = Pattern.compile(".*?DB queries time: (\\d+(\\.\\d+)?) secs.*", Pattern.UNIX_LINES | Pattern.DOTALL); | |
Matcher mdbquerytime = pdbquerytime.matcher(html); | |
if (mdbquerytime.matches()) { | |
dbquerytime = mdbquerytime.group(1); | |
} | |
String memoryused = "0"; | |
Pattern pmemoryused = Pattern.compile(".*?RAM: (\\d+(\\.\\d+)?)MB.*", Pattern.UNIX_LINES | Pattern.DOTALL); | |
Matcher mmemoryused = pmemoryused.matcher(html); | |
if (mmemoryused.matches()) { | |
memoryused = mmemoryused.group(1); | |
} | |
String filesincluded = "0"; | |
Pattern pfilesincluded = Pattern.compile(".*?Included (\\d+) files.*", Pattern.UNIX_LINES | Pattern.DOTALL); | |
Matcher mfilesincluded = pfilesincluded.matcher(html); | |
if (mfilesincluded.matches()) { | |
filesincluded = mfilesincluded.group(1); | |
} | |
String serverload = "0"; | |
Pattern pserverload = Pattern.compile(".*?Load average: (\\d+(\\.\\d+)?).*", Pattern.UNIX_LINES | Pattern.DOTALL); | |
Matcher mserverload = pserverload.matcher(html); | |
if (mserverload.matches()) { | |
serverload = mserverload.group(1); | |
} | |
String sessionsize = "0"; | |
Pattern psessionsize = Pattern.compile(".*?Session[^:]*: (\\d+(\\.\\d+)?[A-Z]{2}).*", Pattern.UNIX_LINES | Pattern.DOTALL); | |
Matcher msessionsize = psessionsize.matcher(html); | |
if (msessionsize.matches()) { | |
sessionsize = msessionsize.group(1); | |
} | |
String timeused = "0"; | |
Pattern ptimeused = Pattern.compile(".*?\"timeused\">(\\d+(\\.\\d+)?) secs.*", Pattern.UNIX_LINES | Pattern.DOTALL); | |
Matcher mtimeused = ptimeused.matcher(html); | |
if (mtimeused.matches()) { | |
timeused = mtimeused.group(1); | |
} | |
// Actual information collected about the sample by jmeter | |
String username = vars.get("username"); | |
String name = StringUtils.rightPad(result.getSampleLabel(), 30); | |
String url = result.getUrlAsString(); | |
Integer bytes = result.getBytes(); | |
Long time = result.getTime(); | |
Long latency = result.getLatency(); | |
Long starttime = result.getStartTime(); | |
String status = result.getResponseCode(); | |
headerToString() { | |
String str = "status | thread | "; | |
str += StringUtils.rightPad("user", 10) + " | "; | |
str += StringUtils.rightPad("name", 30) + " | db-r | db-w | "; | |
str += StringUtils.rightPad("dbquerytime", 8) + " | "; | |
str += StringUtils.rightPad("memory", 8) + " | "; | |
str += StringUtils.rightPad("files", 6) + " | "; | |
str += StringUtils.rightPad("load", 6) + " |"; | |
return str; | |
} | |
toString() { | |
String str = StringUtils.rightPad(status, 6) + " | "; | |
str += StringUtils.rightPad(Integer.toString(thread), 6) + " | "; | |
str += StringUtils.rightPad(username, 10) + " | "; | |
str += StringUtils.rightPad(name, 30) + " | "; | |
str += StringUtils.rightPad(dbreads, 4) + " | "; | |
str += StringUtils.rightPad(Integer.toString(dbwrites), 4) + " | "; | |
str += StringUtils.rightPad(dbquerytime, 8) + " | "; | |
str += StringUtils.rightPad(memoryused, 8) + " | "; | |
str += StringUtils.rightPad(filesincluded, 6) + " | "; | |
str += StringUtils.rightPad(serverload, 6) + " | "; | |
str += url; | |
return str; | |
} | |
toPHP() { | |
String php = "$results["+thread+"][] = array(\n"; | |
php += " 'thread'=>"+thread+",\n"; // Int | |
php += " 'starttime'=>"+starttime+",\n"; // Long | |
php += " 'dbreads'=>"+Integer.parseInt(dbreads)+",\n"; // String => Int | |
php += " 'dbwrites'=>"+dbwrites+",\n"; | |
php += " 'dbquerytime'=>"+dbquerytime+",\n"; | |
php += " 'memoryused'=>'"+memoryused+"',\n"; | |
php += " 'filesincluded'=>'"+filesincluded+"',\n"; | |
php += " 'serverload'=>'"+serverload+"',\n"; | |
php += " 'sessionsize'=>'"+sessionsize+"',\n"; | |
php += " 'timeused'=>'"+timeused+"',\n"; | |
php += " 'name'=>'"+name+"',\n"; | |
php += " 'url'=>'"+url+"',\n"; | |
php += " 'bytes'=>'"+bytes+"',\n"; | |
php += " 'time'=>'"+time+"',\n"; | |
php += " 'latency'=>'"+latency+"',\n"; | |
php += ");\n"; | |
return php; | |
} | |
return this; | |
} | |
EscapeQuotes(String text) { | |
return text.replace("'", "\\'"); | |
} | |
Runnable mr = MoodleResult(sampleResult); | |
// Get the file (it is created in testStarted). | |
String filenamepath = "/home/rajesh/test.txt"; | |
// We add the run info when starting the first thread | |
if (JMeterUtils.getProperty("headerprinted") == null) { | |
// Output headers. | |
JMeterUtils.setProperty("headerprinted", "1"); | |
print(mr.headerToString()); | |
FileWriter fstream = new FileWriter(filenamepath, true); | |
BufferedWriter out = new BufferedWriter(fstream); | |
out.write("$host = '"+vars.get("host")+"';\n"); | |
out.write("$sitepath = '"+vars.get("sitepath")+"';\n"); | |
out.write("$group = '"+EscapeQuotes(props.get("group"))+"';\n"); | |
out.write("$rundesc = '"+EscapeQuotes(props.get("desc"))+"';\n"); | |
out.write("$users = '"+vars.get("users")+"';\n"); | |
out.write("$loopcount = '"+vars.get("loops")+"';\n"); | |
out.write("$rampup = '"+vars.get("rampup")+"';\n"); | |
out.write("$throughput = '"+vars.get("throughput")+"';\n"); | |
out.write("$size = '"+vars.get("size")+"';\n"); | |
out.write("$baseversion = '"+vars.get("moodleversion")+"';\n"); | |
out.write("$siteversion = '"+EscapeQuotes(props.get("siteversion"))+"';\n"); | |
out.write("$sitebranch = '"+EscapeQuotes(props.get("sitebranch"))+"';\n"); | |
out.write("$sitecommit = '"+EscapeQuotes(props.get("sitecommit"))+"';\n"); | |
out.close(); | |
// Send the run timestamp to set it as run filename. | |
props.put("filepath", "runs/" + vars.get("runtimestamp") + ".php"); | |
} | |
FileWriter fstream = new FileWriter(filenamepath, true); | |
BufferedWriter out = new BufferedWriter(fstream); | |
out.write(mr.toPHP()); | |
out.close(); | |
print(mr.toString());</stringProp> | |
</JSR223Listener> | |
<hashTree/> | |
</hashTree> | |
<ResultCollector guiclass="TableVisualizer" testclass="ResultCollector" testname="View Results in Table" enabled="true"> | |
<boolProp name="ResultCollector.error_logging">false</boolProp> | |
<objProp> | |
<name>saveConfig</name> | |
<value class="SampleSaveConfiguration"> | |
<time>true</time> | |
<latency>true</latency> | |
<timestamp>true</timestamp> | |
<success>true</success> | |
<label>true</label> | |
<code>true</code> | |
<message>true</message> | |
<threadName>true</threadName> | |
<dataType>true</dataType> | |
<encoding>false</encoding> | |
<assertions>true</assertions> | |
<subresults>true</subresults> | |
<responseData>false</responseData> | |
<samplerData>false</samplerData> | |
<xml>false</xml> | |
<fieldNames>false</fieldNames> | |
<responseHeaders>false</responseHeaders> | |
<requestHeaders>false</requestHeaders> | |
<responseDataOnError>false</responseDataOnError> | |
<saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage> | |
<assertionsResultsToSave>0</assertionsResultsToSave> | |
<bytes>true</bytes> | |
<threadCounts>true</threadCounts> | |
</value> | |
</objProp> | |
<stringProp name="filename"></stringProp> | |
</ResultCollector> | |
<hashTree/> | |
</hashTree> | |
</hashTree> | |
</jmeterTestPlan> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment