扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
使用 emma 2.1 (emma-stable-2.1.5320-lib) 1. 新建 /home/q/java/emmalib 目录, 将emma.jar 与 emma_ant.jar 放入 2. 复制 /server/bin/mobileserver/runServer.sh 到 runServer_emma.sh 修改启动语句。
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名注册、网站空间、营销软件、网站建设、塔城网站维护、网站推广。
使用 emma 2.1 (emma-stable-2.1.5320-lib)
1. 新建 /home/q/java/emmalib 目录, 将emma.jar 与 emma_ant.jar 放入
2. 复制 /server/bin/mobileserver/runServer.sh 到 runServer_emma.sh
修改启动语句
nohup java -Xmx1800M -Xms800m -Xbootclasspath/p:/home/q/java/emmalib/emma.jar -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider -XX:+AggressiveOpts -XX:+UseParallelGC -server -classpath "$jarFile" com.qunar.common.mobileArc.MobileServer conf/TaLog.property conf/TripServer.property $LOG_HOME/error.log 21
复制 /server/bin/mobileserver/stopServer.sh 到 stopServer_emma.sh
添加覆盖率导出命令
插入 emma 统计代码
使用root账号
1. 备份mobileserver.jar
cp /server/TripAssistant/mobile-server.jar $MOB_JAR_BAK/mobile-server.jar.{$timestamp}
2. 执行插入命令
java -cp /home/q/java/emmalib/emma.jar emma instr -m overwrite -cp mobile-server.jar -out coverage.em
输出如下:
EMMA: processing instrumentation path ...
EMMA: instrumentation path processed in 3117 ms
EMMA: [1000 class(es) instrumented, 126 resource(s) copied]
EMMA: metadata merged into [/server/TripAssistant/coverage.em]
3. 运行mobileserver runServer_emma.sh
sudo sh /server/bin/mobileserver/stopServer.sh sudo sh /server/bin/mobileserver/runServer_emma.sh
在 /server/mobileserverlog/error.log中可见:
EMMA: collecting runtime coverage data ...
EMMA: runtime controller started on port [47653]
emma control 进程已启动
[root@l-wap4.beta.cn1.qunar.com /server/mobileserverlog]# netstat -na | grep 47653
tcp 0 0 0.0.0.0:47653 0.0.0.0:* LISTEN 20926/java
4. 执行 覆盖率文件导出命令
java -cp /home/q/java/emmalib/emma.jar emma ctl -connect localhost:47653 -command coverage.get,coverage.ec
可见输出:
EMMA: processing control command sequence ...
EMMA: executing [coverage.get (coverage.ec,true,true)] ...
EMMA: coverage.get: local copy of coverage data merged into [/server/TripAssistant/coverage.ec]
EMMA: coverage.get: command completed in 79 ms
EMMA: control command sequence complete
并且当前目录生成文件 coverage.ec
5. 生成报告
java -cp /home/q/java/emmalib/emma.jar emma report -r html -in coverage.em,coverage.ec
指定源代码生产覆盖率报告(需先上传源码)
java -cp /home/q/java/emmalib/emma.jar emma report -r html -in /server/TripAssistant/coverage.em,/server/TripAssistant/coverage.ec -Dreport.html.out.file=mycoverage/coverage.html -sp /home/liang.zhou/mob_code_dir/mobs_trunk/src/main/java
emma 方式启动 mobserver
==================================
1. 判断mobserver.jar size, 大于5M 为已插入过, 小于5M为未插入(需要执行插入)
2. 执行插入
3. 启动
4. 检查启动状态
47653 端口打开
mobileserver 进程打开
emma 方式停止 mobserver
==================================
1. 检查47653端口打开状态, 检查coverage.em是否存在
2. 导出覆盖率文件 coverage.ec, 备份coverage.em (加上时间戳)
3. 导出覆盖率HTML report (加上对应时间戳)
4. kill mobserver 进程
ls -lt mobile-server.jar
判断 $? == 0
判断mobile-server.jar size是否大于 5M
#!/bin/bash
function stop_mob_server(){
#!/bin/bash
function stop_mob_server(){
pid=`ps aux | grep MobileServer | grep -v grep | awk '
Unknown macro: {print $2}
'`
` kill -9 $
Unknown macro: {pid}
`
sleep 1
echo "Stop mobileserver success."
}
#判断 emma ctl 是否启动
port_check_result=`netstat -na | grep 47653 | awk '
Unknown macro: {print $1}
'`
if [ -z $
Unknown macro: {port_check_result}
]; then
echo "Emma ctl port 47653 is not LISTEN. Coverage.ec export operation aborted."
else
#emma ctl 为启动状态,导出 coverage.ec, 并备份至 /home/q/mobsrv_cov
if []
fi
解决方案
你的意思就是不覆盖之前的内容,追加写到文件里面 那就FileWriter a=new FileWriter("d:/as.txt");改成 FileWriter a=new FileWriter("d:/as.txt",true)
补充:Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
程序员在进行代码完整度检测的时候,通常会通过代码覆盖等方面来实现。
今天我们就一起来了解一下,代码覆盖对于JavaScript编程开发的作用。
代码覆盖提供有关是否以及可选地应用程序的某些部分被执行的频率的信息。
它通常用于判定一个测试套件执行特定代码库的全面程度。
它为什么是有用的?作为一名JavaScript开发者,你可能经常发现自己处于代码覆盖可能有用的情景。
例如:对测试套件的质量感兴趣?重构一个大型的遗留项目?代码覆盖可以准确显示代码库中已覆盖了哪些部分。
想快速了解是否覆盖了代码库的特定部分?代码覆盖可以显示有关应用程序的哪些部分已被执行的实时信息,而不是使用console.log进行printf-风格的调试或手动执行代码。
或者你可能正在优化速度,并想知道要关注哪些点?执行次数可以指出关键函数和循环。
给嵌入式嵌入式及框架作者可以通过直接hook到InspectorAPI上获得更大的灵活性。
V8提供两种不同的覆盖模式:尽力覆盖模式下收集覆盖信息,确保在运行时对性能的影响小,但可能会丢失已被垃圾回收(GC)函数的数据。
精确覆盖确保不会因为GC而丢失任何数据,湖南电脑培训认为用户可以选择接收执行计数而不是二进制覆盖信息;但性能可能会受此额外开销的影响(有关详细信息,请参阅下一节)。
精准覆盖可以按函数或块粒度收集信息。
FileOutputStream(File file,boolean append)
使用该构造,指定第二个参数为true,表示用追加模式写入内容,所有新写入的内容会被添加到文件尾
从入口程序main开始看,第一句话是
Subclass Subc=new Subclass();
其作用是实例化Subclass类的一个实例出来,使用的构造函数是无参构造函数。
现在转向看Subclass类,在这个类的无参数构造函数中代码如下:
Subclass(){
super();//A
x=5;//B
System.out.println("in Subclass:x="+x);//②
}
可以看得见第一句使用的是super()方法,起作用是继承父类Superclass的构造方法:
Superclass(){
x=3;
System.out.println("in Superclass:x="+x);//①
}
也就是说Subclass()方法代码内容是如下的内容:
Subclass(){
x=3;
System.out.println("in Superclass:x="+x);//①
x=5;//B
System.out.println("in Subclass:x="+x);//②
}
所以现在这里有两个输出语句,结果如下:
in Superclass:x=3
in Subclass:x=5
现在返回入口程序main()方法,开始执行该方法中的第二句话:
Subc.dosomething();
这句话的作用是执行Subclass类中的dosomething方法,所以我们查看Subclass类的方法void dosomething()内容如下:
super.dosomething();
System.out.println("in Subclass.dosomething()");
System.out.println("super.x="+super.x+"\tsub.x="+x);
可以看到,第一句话super.dosomething();是继承父类的dosomething()方法,用父类的这个方法内容替换掉这句话,void dosomething()内容如下:
System.out.println("in Superclass.dosomething()");//③
System.out.println("in Subclass.dosomething()");//④
System.out.println("super.x="+super.x+"\tsub.x="+x);//⑤
所以这里就是连续输出三句话:
in Superclass.dosomething()
in Subclass.dosomething()
super.x=3 sub.x=5
一定要知道super的作用,super()就是使用父类的构造函数,super.属性/s uper.方法,就是使用父类属性/方法。
你好,我用的是sqlserver2005数据库代码如下:import java.sql.*;
public class Demo {
public static void main(String agrs[]) {
Connection con = null;
PreparedStatement pstmt = null;
String sql = "delete from user where username=?";
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); //设置数据库连接的驱动
con = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=数据库"); //设置数据库连接的 URL,用户名,密码
pstmt = con.prepareStatement(sql);
pstmt.setString(1, "aaa"); // 设置SQL语句中username的值
int count = pstmt.executeUpdate();
if (count 0) {
System.out.println("操作成功");
} else {
System.out.println("操作失败");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流