I am fairly new to Linux, Jenkins and automated testing. I wonder how I can generate a coverage.xml from the Linux command line or the Jenkins environment after running my code (see below)?
In Jenkins I want to show my code coverage by using Cobertura or Jacoco. I use shell scripts (bash) to clean (removing the .class files), compile and run the tests from Jenkins (or the command line).
I have a very simple program in java that uses a set of very simple unit tests and one performance test ( testNG ).
I would like to find a way to generate this coverage.xml without the use of Maven or Ant if possible. As I do not know how to generate it even in my IDE I am gratefull for any explanatory answer in how to get a coverage.xml .
If it is not possible, how could I write my pom.xml for Maven to get this to work?
The program is an automated, simple version of the FizzBuzz math game, where each player takes turns to count up, replacing each number that is evenly denomainated by a said denominator by another word (ex. "Fizz" but in this example "Cowabunga").
public class main {
public static void main(String[] args){
StartGame game = new StartGame();
game.start();
}
}
public class StartGame {
public static void start() {
GameRules gr = new GameRules(3,5);
gr.startGame();
}
}
public class GameRules {
private int currentNumber;
private int currentPlayer;
private int playUntilThisNumber;
private int dividerToSkip;
private List<Player> playerlist;
public GameRules(int numberOfPlayers, int divider){
playerlist = new ArrayList<Player>();
currentNumber=1;
currentPlayer=3;
playUntilThisNumber = 100;
dividerToSkip = divider;
fillPlayerList(numberOfPlayers);
}
public int getCurrentNumber() {
return currentNumber;
}
public void increaseCurrentNumber() {
this.currentNumber++;
}
private void fillPlayerList(int numberOfPlayers){
for(int i = 0 ; i < numberOfPlayers ; i++){
Player p = new Player(this, i+1,dividerToSkip);
playerlist.add(p);
}
}
public void startGame(){
while(currentNumber<=playUntilThisNumber){
System.out.println(playerlist.get(currentPlayer++%playerlist.size()).play());
}
}
}
public class Player {
private GameRules rules;
private int dividerToSkip;
private int playerNumber;
public Player(GameRules r, int playerNr, int divider){
rules = r;
dividerToSkip = divider;
playerNumber = playerNr;
}
public String play() {
String s;
if(rules.getCurrentNumber()%dividerToSkip==0){
s = "Player " + playerNumber + ": Cowabunga";
}
else {
s = "Player " + playerNumber + ": " +rules.getCurrentNumber();
}
rules.increaseCurrentNumber();
return s;
}
}
public class GameRulesTest {
private int nrOfPLayers;
private int divider;
private GameRules gr;
@BeforeMethod
public void setUp(){
nrOfPLayers = 35;
divider = 13;
gr = new GameRules(nrOfPLayers,divider);
}
@Test
public void testCurrentNumber(){
assert (gr.getCurrentNumber()>0);
}
@Test
public void testIncreaseCurrentNumber() {
int cn = gr.getCurrentNumber();
gr.increaseCurrentNumber();
assert(gr.getCurrentNumber()==cn+1);
}
}
public class PlayerTest {
private int nrOfPLayers;
private int divider;
private GameRules gr;
private Player player;
@BeforeMethod
public void setUp(){
nrOfPLayers = 35;
divider = 13;
gr = new GameRules(nrOfPLayers,divider);
player = new Player(gr,100,divider);
}
@Test
public void testReturnString() {
String res = player.play();
assert "Player 100: 1".equals(res) : "Expected correct return string, got " + res;
assertEquals("Player 100: 1", res);
}
}
public class PerformanceTest {
private StartGame game;
@BeforeMethod
public void setUp(){
game = new StartGame();
}
@Test
public void testExecutionTime(){
long startTime = ManagementFactory.getThreadMXBean().getCurrentThreadCpuTime();
game.start();
long finnishTime = ManagementFactory.getThreadMXBean().getCurrentThreadCpuTime();
System.out.println(startTime);
System.out.println(finnishTime);
assert (finnishTime-startTime<0.0000005);
}
}
#!/bin/bash
find . -name '*.class' | xargs rm
#!/bin/bash
javac src/MindRoad/*.java
javac -cp src/:testng-6.8/testng-6.8.jar test/*.java
#!/bin/bash
java -cp testng-6.8/testng-6.8.jar:test:src org.testng.TestNG -verbose 2 test/test.xml
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="MindGameSuite" verbose="1" >
<test name="MindGame" >
<classes>
<class name="PlayerTest" />
<class name="GameRulesTest" />
<class name="PerformanceTest" />
</classes>
</test>
</suite>
Thank you in advance for all your help! Sincerely, RKrogh!
If you are talking about the Cobertura coverage report, you are at luck - Cobertura allows you to run the tool from command line.
#Create the meta file (after javac)
cobertura-instrument.bat [--basedir dir] [--datafile file] [--auxClasspath classPath] [--destination dir] [--ignore regex] classes [...]
#Execution should include this extra jar in cp:
#Example
java -cp C:\cobertura\lib\cobertura.jar;C:\MyProject\build\instrumented;C:\MyProject\build\classes;C:\MyProject\build\test-classes -Dnet.sourceforge.cobertura.datafile=C:\MyProject\build\cobertura.ser ASimpleTestCase
#Publish the report
cobertura-report.bat --format xml --datafile C:\MyProject\build\cobertura.ser --destination C:\MyProject\reports\coverage C:\MyProject\src
This site would help you.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.