文档章节

Shell 执行Junit

Java_Coder
 Java_Coder
发布于 2015/12/25 12:39
字数 1325
阅读 623
收藏 3
点赞 0
评论 0

1、什么是Shell

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

2、怎么用Shell

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

#/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测试框架了。如下:

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> 下面这几行代码就可以实现了。

#!/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==================


5、Shell:

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

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

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

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

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


© 著作权归作者所有

共有 人打赏支持
Java_Coder
粉丝 58
博文 159
码字总数 102864
作品 0
杭州
JUnit 5.2.0 发布,Java 单元测试框架

JUnit 5.2.0 发布,JUnit 5.2.0 = Platform 1.2.0 + Jupiter 5.2.0 + Vintage 5.2.0,此次更新包括构建工具的增强、参数化测试的改进等。 更新信息如下: 构建工具功能增强以支持新的模块化体...

雨田桑
05/04
0
0
Junit的新长征-Junit5

这几天做新课时,忽然发现Junit在Junit4这个版本上停留了十几年之后,原来已经出到5了(后知后觉),花了些时间研究了下,发现还真是不简单,我们一起来看看JUnit5上出现了哪些让人激动的新变...

城下秋草
07/17
0
0
Ant和Junit使用的一些问题

ant集成junit自动测试的build.xml标准模板 利用Ant集成Junit自动测试并生成测试报告,可以极大的提高测试的工作效率,其优势只要是测试用例的批量处理功能。前不久在网上看到很多关于Junit测...

墙头草
2012/01/06
0
0
JUnit框架功能详细——JUnit学习(一)

是著名的单元测试框架,在JUnit4中所有的测试用例采用@Annotation标注,这比JUnit3的通过类继承和特定方法名带来更大的灵活性。在花了一周多的时间学习JUnit4使用及原码后发现自己以往只用到...

gangzz
2013/07/13
0
8
JUnit源码与设计模式欣赏——JUnit学习(三)

先介绍下这篇博文的由来,之前已经对JUnit的使用经行了深入的介绍和演示(参考JUnit学习(一),JUnit学习(二)),其中的部分功能是通过分析JUnit源代码找到的。得益于这个过程有幸完整的拜读...

gangzz
2013/08/17
0
4
Junit使用GroboUtils进行多线程测试

写过Junit单元测试的同学应该会有感觉,Junit本身是不支持普通的多线程测试的,这是因为Junit的底层实现上,是用System.exit退出用例执行的。JVM都终止了,在测试线程启动的其他线程自然也无...

凯文加内特
2015/04/13
0
1
Junit Test With Selenium Driver

Junits 和 Selenium Junits 处理的是unit level 的测试;Selenium 处理的是 functional leve 的测试。虽然它们是完全不同,但仍然可以用Junit 来写 Selenium 测试。 一个完整的例子 关于Bef...

平江夜弹
2015/06/02
0
0
在 NetBeans IDE 中编写 JUnit 测试

测试应用程序是开发周期中不可缺少的一部分,并且编写和维护测试单元有利于确保源代码中的方法能正常运行。IDE 集成了对 JUnit 单元测试框架的支持,它允许您快速和轻松地创建 JUnit 测试和测...

刘学炜
2011/12/26
0
0
Android、JUnit深入浅出(一)——JUnit初步解析

Android、JUnit深入浅出(一)——JUnit初步解析 Android SDK 1.5已经将JUnit包含进来了,但是一直没有去深入了解,以前在使用一些C++的开源库中学习过与CPPUnit,简要分析过其主要框架,如下...

庸人谷
2012/12/26
0
0
了解 JUnit 核心类、接口及生命周期

Junit 从问世至今已有 12 年的历史,期间功能不断完善,用户逐渐扩大,已经成为 Java 软件开发中应用最为广泛的测试框架。本文着重介绍 JUnit 的核心接口、核心类以及 TestCase 的生命周期,...

晨曦之光
2012/03/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

idea tomcat 远程调试

tomcat 配置 编辑文件${tomcat_home}/bin/catalina.sh,在文件开头添加如下代码。    CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7829" Idea端配......

qwfys
今天
1
0
遍历目录下的文件每250M打包一个文件

#!/usr/bin/env python # -*- utf-8 -*- # @Time : 2018/7/20 0020 下午 10:16 # @Author : 陈元 # @Email : abcmeabc@163.com # @file : tarFile.py import os import tarfile import thr......

寻爱的小草
今天
1
0
expect同步文件&expect指定host和要同步的文件&构建文件分发系统&批量远程执行命令

20.31 expect脚本同步文件 expect通过与rsync结合,可以在一台机器上把文件自动同步到多台机器上 编写脚本 [root@linux-5 ~]# cd /usr/local/sbin[root@linux-5 sbin]# vim 4.expect#!/...

影夜Linux
今天
0
0
SpringBoot | 第九章:Mybatis-plus的集成和使用

前言 本章节开始介绍数据访问方面的相关知识点。对于后端开发者而言,和数据库打交道是每天都在进行的,所以一个好用的ORM框架是很有必要的。目前,绝大部分公司都选择MyBatis框架作为底层数...

oKong
今天
12
0
win10 上安装解压版mysql

1.效果 2. 下载MySQL 压缩版 下载地址: https://downloads.mysql.com/archives/community/ 3. 配置 3.1 将下载的文件解压到合适的位置 我最终将myql文件 放在:D:\develop\mysql 最终放的位...

Lucky_Me
今天
1
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

问题终结者
今天
1
0
expect脚本同步文件expect脚本指定host和要同步的文件 构建文件分发系统批量远程执行命令

expect脚本同步文件 在一台机器上把文件同步到多台机器上 自动同步文件 vim 4.expect [root@yong-01 sbin]# vim 4.expect#!/usr/bin/expectset passwd "20655739"spawn rsync -av ro...

lyy549745
今天
1
0
36.rsync下 日志 screen

10.32/10.33 rsync通过服务同步 10.34 linux系统日志 10.35 screen工具 10.32/10.33 rsync通过服务同步: rsync还可以通过服务的方式同步。那需要开启一个服务,他的架构是cs架构,客户端服务...

王鑫linux
今天
0
0
matplotlib 保存图片时的参数

简单绘图 import matplotlib.pyplot as pltplt.plot(range(10)) 保存为csv格式,放大后依然很清晰 plt.savefig('t1.svg') 普通保存放大后会有点模糊文件大小20多k plt.savefig('t5.p...

阿豪boy
今天
2
0
java 8 复合Lambda 表达式

comparator 比较器复合 //排序Comparator.comparing(Apple::getWeight);List<Apple> list = Stream.of(new Apple(1, "a"), new Apple(2, "b"), new Apple(3, "c")) .collect(......

Canaan_
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部