Shell 执行Junit

1、什么是Shell

      Unix操作系统下的shell既是用户交互的界面,也是控制系统的脚本语言。当然在这点也有别于Windows下的命令行,虽然也提供了很简单的控制语句。在Windows操作系统下,可能有些用户从来都不会直接的使用shell,然而在Unix系列操作系统下,shell仍然是控制系统启动、X Window启动和很多其他实用工具的脚本解释程序。

2、怎么用Shell

  <1>之前听说过Shell,但是没有仔细用过,所以怎么写,怎么执行等一系列的问题都不知道。会google,就找了个简单的demo!

?
1
2
3
4
5
6
7
8
9
10
#/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命令执行它】



3、Web单元测试

 <1>大部分条件下,我们开发的时候,都会做一些简单的单元测试,常见的就是java的JUnit测试框架了。如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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,终于说到了正题上面,下面我们就开始吧!

4、Shell工具

<1> 下面这几行代码就可以实现了。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/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


?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/**
  * 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】


?
1
2
3
4
5
6
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 ==================


<5>那么如何使用它呢?请看!这也是这个脚本的功能2, TestBlog.java类如上

TestJunit.java:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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> 再来看看我们的日志文件,多了一条测试记录

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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 ==================


5、Shell:

1、语法和结构通常比较简单。

2、学习和使用通常比较简单。

3、通常以容易修改程序的"解释"作为运行方式,而不需要"编译"。

4、程序的开发产能优于运行效能。

5、Shell脚本语言是Linux/UNIX 系统上应用广泛的实用程序设计语言,它是"易学难精"的,真正学会Shell 脚本编程,需要读者清晰地掌握Linux 重要命令的语法,理解Linux 命令重要选项的作业和区别,还需要掌握Shell 脚本语言的语法结构以及一些常用的小工具。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值