[英]How can I generate a coverage.xml for Jenkins without using Maven/Ant from the Linux command line?
I am fairly new to Linux, Jenkins and automated testing. 我对Linux,Jenkins和自动化测试还很陌生。 I wonder how I can generate a coverage.xml from the Linux command line or the Jenkins environment after running my code (see below)? 我想知道如何在运行代码后如何从Linux命令行或Jenkins环境生成coverage.xml ?
In Jenkins I want to show my code coverage by using Cobertura or Jacoco. 在Jenkins中,我想使用Cobertura或Jacoco展示我的代码覆盖率。 I use shell scripts (bash) to clean (removing the .class files), compile and run the tests from Jenkins (or the command line). 我使用shell脚本(bash)进行清理(删除.class文件),从Jenkins(或命令行)编译并运行测试。
I have a very simple program in java that uses a set of very simple unit tests and one performance test ( testNG ). 我在Java中有一个非常简单的程序,该程序使用一组非常简单的单元测试和一个性能测试( testNG )。
I would like to find a way to generate this coverage.xml without the use of Maven or Ant if possible. 我想找到一种在不使用Maven或Ant的情况下生成此coverage.xml的方法。 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 . 因为即使在我的IDE中也不知道如何生成它,所以对于如何获取coverage.xml的任何解释性的答案我都很感激。
If it is not possible, how could I write my pom.xml for Maven to get this to work? 如果不可能,如何为Maven编写pom.xml以使其正常工作?
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"). 该程序是FizzBuzz数学游戏的自动化简单版本,每个玩家轮流进行计数,将用一个分母均匀表示的每个数字替换为另一个单词(例如“ Fizz”,但在此示例中为“ 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! 真诚的,RKrogh!
If you are talking about the Cobertura coverage report, you are at luck - Cobertura allows you to run the tool from command line. 如果您在谈论Cobertura覆盖率报告,那么您很幸运-Cobertura允许您从命令行运行该工具。
#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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.