Want to generate graph using perfmon plugin in Jmeter? - ant

As per project requirement i am using JMeter as Loadtesting tool. JMeterPlugin available on http://jmeter-plugins.org really leverages your overall load testing results. I am using perfmon plugin and capture CPU,Memory, Disk IO and Network IO (this internally uses SIGAR framwrok). That works fine in UI Mode, but while i launched Jmeter using ANT in non gui mode, it's able to generate graphs specific to Jmeter (Response time,TPS, etc) but not able to generate System matrices which i included in test plan. did any one has tried this Plugin in Non GUI mode?
Please find below snippet of build.xml
<target name="create-graphs" depends="create-reports">
<ac:for param="reportType" list="AggregateReport,HitsPerSecond,ResponseTimesPercentiles,ThroughputOverTime,ThroughputVsThreads,TimesVsThreads,ResponseTimesOverTime,ThreadsStateOverTime,TransactionsPerSecond">
<sequential>
<java jar="${jmeter.home}/lib/ext/CMDRunner.jar" fork="true">
<arg value="--tool"/>
<arg value="Reporter"/>
<arg value="--generate-png"/>
<arg value="${result.path}/#{reportType}.png"/>
<arg value="--input-jtl"/>
<arg value="${result.path}/JMeterResults.xml"/>
<arg value="--plugin-type"/>
<arg value="#{reportType}"/>
<arg value="--width"/>
<arg value="800"/>
<arg value="--height"/>
<arg value="600"/>
</java>
</sequential>
</ac:for>
</target>
Thanks,
Priyank Shah

As far as I know, Servers Performance Monitoring listener saves results in its own separate result file, not the common result file. So you should use this separate file for reporting.

Related

JSCover - Excluding coverage files

Currently trying to get JSCover to exclude js files that are used as libraries. I have a set of ant scripts below which will
start the JSCover server
Run & Generate Json report
Stop the server
Finally, i have a shell command to convert the Json file to LCov so that i can use it with sonarqube. I also get coverage in jscoverage.html but it includes every file under web/ which is something i do not want. Image below
Ant scripts below:
<target name="jstest-start">
<java jar=".../JSCover.jar" fork="true" spawn="true">
<arg value="-ws"/>
<arg value="--report-dir=coverage"/>
<arg value="--document-root=web"/>
<arg value="--port=8082"/>
<!-- Aim is to exclude folder js under web/ as it contains libraries, not source code. Currently does not work -->
<arg value="--no-instrument=web/js/"/>
<arg value="--no-instrument=js/"/>
</java>
<waitfor maxwait="5" maxwaitunit="second" checkevery="250" checkeveryunit="millisecond" timeoutproperty="failed">
<http url="http://localhost:8082/jscoverage.html"/>
</waitfor>
<fail if="failed"/>
</target>
<target name="jstest-run">
<exec dir="/usr/local/CI/phantomjs/bin/" executable="phantomjs" failonerror="true">
<arg line=".../run-jscover-qunit.js http://localhost:8082/index.html"/>
</exec>
</target>
<target name="jstest-stop">
<get src="http://localhost:8082/stop" dest="stop.txt" />
</target>
<target name="jstest" description="Run javascript tests">
<antcall target="jstest-start"/>
<antcall target="jstest-run"/>
<antcall target="jstest-stop"/>
</target>
My folder structure is:
And finally, my sonar standalone analysis settings:
So, what seems to be happening is that JSCover is recursively reading for all js files and i cannot prevent that from sonar or ant.
Can anyone shed some light?
<arg value="--no-instrument=/js/"/>
should work, and to remove the test itself,
<arg value="--no-instrument=/test/"/>
The paths are as seen by the web-server, so the 'web' prefix in:
<arg value="--no-instrument=web/js/"/>
has no effect.
i have resolved my own issue by correcting the shell command which generates an LCOV report.
java -cp JSCover.jar jscover.report.Main --format=LCOV /usr/local/CI/jenkins/workspace/PhantomJS/coverage/phantom/ /usr/local/CI/jenkins/workspace/PhantomJS/web/
Prior to this, the SRC-DIR and REPORT-DIR were the same which was an error on my part. As far as i can understand, SRC-DIR should point to the source folder and REPORT-DIR should point to where the lcov file exists.
I hope this helps someone

Ant task to compile stylus file to normal css file?

I am trying to use stylus in a project, that is using ANT build.
I need to compile the stylus file to normal css before packaging the war.
is there a way to do it?
Note : I am not using node.js, it is a simple java web application
Here is a full example how to use it:
<property name="css.stylus" value="../folder/to/stylus/files"/>
<property name="cmd.node" value="C:\Program Files\nodejs\nodevars.bat"/>
<property name="cmd.stylus" value="C:\Program Files\nodejs\stylus.cmd"/>
<target name="css_compile" description="compile l'ensemble des CSS avec stylus">
<exec executable="${cmd.node}" />
<exec dir="${css.stylus}" executable="${cmd.stylus}" >
<arg value="myCSS.styl"/>
<arg value="-c"/>
<arg value="-o"/>
<arg value="..\cssFolder"/>
</exec>
</target>
This example (I used) transform myCSS.styl in a obfuscate CSS to /cssFolder
nodevars.bat is necessary for launching stylus.
stylus.cmd is stylus itself, because the path not working in ant. To know where is it, (it's in nodejs), you can type "path" in terminal, on Windows.
That's all!

How can I run Selenium 2 Grid from an Ant build?

I'm working on modifying our existing Selenium Grid setup so that it will work with Selenium 2. The process of setting up the hub and nodes seems to be much simpler, but I'm having a problem getting it running in an Ant build the way I did before.
I've read through the wiki on Selenium 2 Grid and tried to set up the Ant build accordingly. My problem is that the first target runs, starting the hub. Then, the other targets do not run, but the build completes. I'm attempting to run these on my own machine, with Selenium 1 (RC) Junit tests, and TestNG as a test runner.
The targets I have are as follows:
<taskdef resource="testngtasks" classpath="testng-${testng.version}.jar" />
<target name="start-hub" description="Start the Selenium Grid hub">
<java classpathref="runtime.classpath"
jar="${basedir}/selenium-server-standalone-${server.version}.jar"
fork="true"
spawn="true">
<arg value="-v" />
<arg value="-role" />
<arg value="hub" />
</java>
</target>
<target name="start-node"
description="Start the Selenium Grid node"
depends="start-hub">
<java classpathref="runtime.classpath"
jar="${basedir}/selenium-server-standalone-${server.version}.jar"
fork="true"
spawn="true">
<arg value="-role" />
<arg value="rc" />
<arg value="-hub" />
<arg value="http://localhost:4444/grid/register" />
<arg value="-port" />
<arg value="5555" />
<arg value="-browser" />
<arg value="browserName=firefox,version=3.6,maxInstances=5,platform=WINDOWS"/>
</java>
</target>
<target name="run-tests" description="Run the tests" depends="start-node">
<testng classpathref="runtime.classpath"
haltonfailure="true">
<sysproperty key="java.security.policy"
file="${grid.location}/lib/testng.policy" />
<arg value="testng.xml"/>
</testng>
</target>
It seems like the Ant thread is finished after the first target runs. I looked at a way to start them in a new window, like the previous grid, but I didn't see a way to do that except for the exec task. I also tried running the hub in an exec task and the node as a java task. That resulted in the ant build stopping execution after the start-hub target as opposed to finishing.
Is there a way I can get this running, or is there a better way to accomplish it?
Take a look at the way the Mozilla team does it here:
https://github.com/mozilla/moz-grid-config
Note that they're still using the Grid 1 node launchers, since Grid 2 is backwards-compatible in that respect. But it should give you an idea of how to handle this in ant.

How to quickly deploy assets to Amazon S3 with an Ant target?

What is the quickest way to deploy content to a CDN with an Ant target? My Ant target is running on a continuous integration server (Hudson). My current solution uses curl and is a bit slow. Should I use wput or something else and how would I do that in ant?
<target name="Deploy">
<for param="file">
<path>
<fileset dir="${basedir}/output" includes="**/*"/>
</path>
<sequential>
<echo> Deploy #{file} </echo>
<exec executable="curl">
<arg value="-F name=value"/> <!-- params for secure access -->
<arg value= "-F file=#{file}"/>
<arg value="http://cdn.com/project"/>
</exec>
</sequential>
</for>
</target>
Several ideas have come up to speed up the transfer of content to the cdn
1) max out the pipe bandwidth by using the parallel ant task to simultaneously transfer several mutually exclusive filesets. For example, if there are three sub-folders in the output folder, each can be given to a different parallel task, and each would iterate through the files, calling curl on each file to transfer it to the cdn. http://ant.apache.org/manual/Tasks/parallel.html
2) write a custom ant task (bash script?) that would have local knowledge about the build so that any files that were changed by the last build get marked and only those files would be transfered. This would prevent sending a file that is already on the cdn.
3) read the remote directory from the cdn and use timestamps to determine which files to send. This may not be possible depending on the cdn and whether it allows such queries. I was hoping wput could do this but I don't see an option for that. http://wput.sourceforge.net/wput.1.html
RESOLVED
I found a blog titled "Deploying assets to Amazon S3 with Ant" which was extremely helpful. It uses a python script 's3cmd sync' which only transfers files that don’t exist at the destination.
I ended up with this ant target:
<target name="s3Upload">
<property name="http.expires" value="Fri, 31 Dec 2011 12:00:00 GMT" />
<exec executable="${PYTHON_DIR}\python.exe" failonerror="true">
<arg value="${PYTHON_DIR}\Scripts\s3cmd" />
<arg value="--guess-mime-type" />
<arg value="--add-header=Cache-Control:public, max-age=630657344" />
<arg value="--add-header=Expires:${http.expires}" />
<arg value="--encoding=UTF-8" />
<arg value="--skip-existing" />
<arg value="--recursive" />
<arg value="--exclude=*.log" />
<arg value="--acl-public" />
<arg value="sync" />
<arg value="${CDN_DIR}/" />
<arg value="s3://my-project-cdn/" />
</exec>
</target>

How to execute the JAXB compiler from ANT

I am using JAXB on a project. the attraction of JAXB is that it is bundled with the JDK, I have been to use xjc.exe on the command line to generate the .java files from a schema. I can't seem to find the JAXB ant task, sure there is a download at http://jaxb.java.net however i want to use the JAXB that is bundled into the JDK is there some way to call JAXB from ant what class does the xjc.exe call on?
<target name="generate-jaxb-code">
<java classname="com.sun.tools.internal.xjc.XJCFacade">
<arg value="-p" />
<arg value="com.example"/>
<arg value="xsd/sample.xsd" />
</java>
</target>
Just went hunting in the tools.jar and found the XJCFacade.class in com.sun.tools.internal tested the above code it works it produces the output as xjc.exe It seems that XJC.exe calls this code com.sun.tools.internal.xjc.XJCFacade
One of my key requirements was that the ant file had work within eclipse without having to include a path name to the JDK that way the file would be portable across operating systems. I am assuming that tools.jar is included on the classpath via the installed JRE preferences options.
Here is a helpful link:
https://jaxb.java.net/nonav/2.0.2/docs/xjcTask.html
Java SE 6 does not ship the Ant task (see 7.1.3):
https://jaxb.java.net/guide/Migrating_JAXB_2_0_applications_to_JavaSE_6.html
Essentially they do the following:
<target name="xjc" description="....">
<exec executable="${jdk.dir}/bin/xjc.exe">
<arg value="-d"/>
<arg value="${src.dir}"/>
<arg value="-p"/>
<arg value="com.mydomain.jaxb"/>
<arg value="${etc.dir}/myschema.xsd"/>
</exec>
</target>

Resources