Shell 執行Junit

一、什麼是Shelljava

      Unix操做系統下的shell既是用戶交互的界面,也是控制系統的腳本語言。固然在這點也有別於Windows下的命令行,雖然也提供了很簡單的控制語句。在Windows操做系統下,可能有些用戶歷來都不會直接的使用shell,然而在Unix系列操做系統下,shell仍然是控制系統啓動、X Window啓動和不少其餘實用工具的腳本解釋程序。linux

二、怎麼用Shellweb

  <1>以前據說過Shell,可是沒有仔細用過,因此怎麼寫,怎麼執行等一系列的問題都不知道。會google,就找了個簡單的demo!shell

#/bin/bash
echo "please enter two number"
read a
read b
if test $a -eq $b
then echo "NO.1 = NO.2"
elif test $a -gt $b
then echo "NO.1 > NO.2"
else echo "NO.1 < NO.2" 
fi

 <2>運行【找到腳本路徑,用source命令執行它】apache

 

三、Web單元測試編程

 <1>大部分條件下,咱們開發的時候,都會作一些簡單的單元測試,常見的就是java的JUnit測試框架了。以下:tomcat

public class TestBlog extends JFinalModelCase {

	public static Logger logger = Logger.getLogger(TestBlog.class);

	@Ignore
	@Test
	public void testJson() {

		String columns = BlogConst.CONTENT + Const.SYMBOLCOMMA
				+ BlogConst.TITLE;
		Blog blog = Blog.dao.findById(1, columns);

		ControllerCommon.errorMsg("執行");

		JFinalTestUtil.print(JsonKit.toJson(ControllerCommon.ctrCommon
				.returnJsonToClient(blog)));

	}

	@Test
	public void testFindFirst() {

		Blog blog = Blog.dao.getLastInsertBlog();
		logger.info(blog.getInt("id"));

	}

	@Ignore
	@Test
	public void testFind() {

		Blog blog = BlogService.blogService.findBlogById(1);
		logger.info(blog);
	}
}

<2> 當咱們把代碼部署到測試服務器上後(通常都是linux服務器),怎麼知足咱們的單元測試?有沒有一個通用的工具能夠直接經過命令來執行一些單元測試用例。OK,終於說到了正題上面,下面咱們就開始吧!bash

四、Shell工具服務器

<1> 下面這幾行代碼就能夠實現了。app

#!/bin/bash

#引入java環境變量,若是配置在用戶環境變量下就自行修改
. /etc/profile

#獲取執行shell給的參數
PRG="${1}"

echo $PRG
#輸入包名稱,類名稱
echo "please input packageName , ClassName"
read packageName
read className

#取得當前.sh文件所在的目錄
#DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" 

DIR="/home/tian/Downloads/tomcat/apache-tomcat-7.0.59/webapps/Jfinal/WEB-INF" 

#日誌文件的路徑
LOG_DIR="/home/tian/Desktop"

#引入class所在的文件夾
classes=$DIR/classes

#lib folder  
libs=$DIR/lib/*

#將classes和包jar加入classpath,注意用的是冒號":"分割的
classpath=$classes:$libs

# java -classpath $classpath 主函數類入口 #>>  "$PRG" com.demo.jfinal.JFinalModelCase.java 
java -classpath $classpath $packageName.$className  "$PRG">> "$LOG_DIR/javalog.txt"

echo "shell over.."

    解讀:腳本支持3個參數;參數1:要執行的單元測試的方法;參數2:要執行單元測試的包;參數3:要執行的單元測試的類


<2> 那麼如何使用它呢?請看!這也是這個腳本的功能點1


/**
 * Unit test for simple App.
 */

public class TestBlog extends JFinalModelCase {

	public static Logger logger = Logger.getLogger(TestBlog.class);

	@Ignore
	@Test
	public void testJson() {

		String columns = BlogConst.CONTENT + Const.SYMBOLCOMMA
				+ BlogConst.TITLE;
		Blog blog = Blog.dao.findById(1, columns);

		ControllerCommon.errorMsg("執行");

		JFinalTestUtil.print(JsonKit.toJson(ControllerCommon.ctrCommon
				.returnJsonToClient(blog)));

	}

	@Test
	public void testFindFirst() {

		Blog blog = Blog.dao.getLastInsertBlog();
		logger.info(blog.getInt("id"));

	}

	@Ignore
	@Test
	public void testFind() {

		Blog blog = BlogService.blogService.findBlogById(1);
		logger.info(blog);
	}

	public static void main(String[] args) {

		String methodExecute = "";
		if (args.length == 0) {
			logger.info("無參數");
			return;
		} else {
			methodExecute = args[0];
			logger.info("args[0]:" + args[0]);
		}

		logger.info("==================Method Begin:" + "==================");

		Result result = new JUnitCore().run(Request.method(TestBlog.class,methodExecute));

		for (Failure failure : result.getFailures()) {
			System.out.println(failure.toString());
		}

		logger.info("===================Result: " + result.wasSuccessful() + "==================");

	}
}


<3> 找到當前腳本路徑,執行它



<4> OK,讓咱們看一下日誌文件【看腳本代碼知曉:javalog.txt】


2015-12-25 12:18:09:619[INFO]: args[0]:testFindFirst
2015-12-25 12:18:10:237[INFO]: ==================Method Begin:==================
2015-12-25 12:18:10:716[INFO]: {dataSource-1} inited
Sql: select * from blog order by id desc
2015-12-25 12:18:11:004[INFO]: 8
2015-12-25 12:18:11:039[INFO]: {dataSource-1} closed
2015-12-25 12:18:11:072[INFO]: ===================Result: true==================


<5>那麼如何使用它呢?請看!這也是這個腳本的功能2, TestBlog.java類如上

TestJunit.java:

public class TestJunit {

	public static Logger logger = Logger.getLogger(TestJunit.class);
	
	public static void main(String[] args) {

		logger.info("==================Method Begin" + "==================");

		Result result = JUnitCore.runClasses(TestBlog.class);

		for (Failure failure : result.getFailures()) {
			System.out.println(failure.toString());
		}

		logger.info("===================Result: "+ result.wasSuccessful() + "==================");
	}
}

<6> 找到當前腳本路徑,執行它

解讀:這裏只須要兩個參數就夠了,功能是執行TestBlog類的全部@Test方法,排除@Ignore

<7> 再來看看咱們的日誌文件,多了一條測試記錄

2015-12-25 12:18:09:619[INFO]: args[0]:testFindFirst
2015-12-25 12:18:10:237[INFO]: ==================Method Begin:==================
2015-12-25 12:18:10:716[INFO]: {dataSource-1} inited
Sql: select * from blog order by id desc
2015-12-25 12:18:11:004[INFO]: 8
2015-12-25 12:18:11:039[INFO]: {dataSource-1} closed
2015-12-25 12:18:11:072[INFO]: ===================Result: true==================
2015-12-25 12:28:56:377[INFO]: ==================Method Begin:tdd==================
2015-12-25 12:28:56:994[INFO]: {dataSource-1} inited
Sql: select * from blog order by id desc
2015-12-25 12:28:57:232[INFO]: 8
2015-12-25 12:28:57:266[INFO]: {dataSource-1} closed
2015-12-25 12:28:57:299[INFO]: ===================Result: true==================


五、Shell:

一、語法和結構一般比較簡單。

二、學習和使用一般比較簡單。

三、一般以容易修改程序的"解釋"做爲運行方式,而不須要"編譯"。

四、程序的開發產能優於運行效能。

五、Shell腳本語言是Linux/UNIX 系統上應用普遍的實用程序設計語言,它是"易學難精"的,真正學會Shell 腳本編程,須要讀者清晰地掌握Linux 重要命令的語法,理解Linux 命令重要選項的做業和區別,還須要掌握Shell 腳本語言的語法結構以及一些經常使用的小工具。

相關文章
相關標籤/搜索