eclipse设置jvm_ant junit_ant available

电脑杂谈  发布时间:2017-02-14 01:29:13  来源:网络整理

ant junit_eclipse设置jvm_ant available

ant junit

多线程执行用例能很大的节约时间,而JUnit4(org.junit.experimental.ParallelComputer)本身是支持多线程的(以后会专门写一篇介绍JUnit的多线程执行),但是experimental实验性质的,本文多线程执行用例是自己构造线程池,一个线程去执行一个用例,当然这要求你的用例间不能有交集。ant junit

只运行上一次失败的用例,JUnit4(org.junit.experimental.max.MaxCore)本身是支持失败用例优先,但是也会执行上次成功的用例; 比如有用例1,2,3;这次失败了2,下次执行2,1,3;我们想要的只执行2。

本文是以JUnit4---实践二:拓展之运行指定类的某些测试方法-自动生成该文件,JUnit4---实践一:运行指定类的某些测试方法的基础上做了修改,可以先阅读下,再看本文。

二.实现

ant available_ant junit_eclipse设置jvm

项目(实现了自定义注解@Concurrent,多线程执行用例)是通过ant执行JUnit和JUnit-report,生成报告,并生成错误日志;根据扫日志,找出失败用例。

1.FindFailTest:扫日志,生成执行失败用例的文件

package com.weibo.failmethods;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import junit.framework.Test;

import org.junit.runner.JUnitCore;
import org.junit.runner.Request;
import org.junit.runner.Result;

/**
 * @author hugang 根据日志 找出Failure 和 Error
 */
public class FindFailTest {

	public static void main(String[] args) throws IOException, InterruptedException {

		// 日志路径
		String PATH = System.getProperty("user.dir")
				+ "/src/com/weibo/failmethods/TEST-com.weibo.cases.suite.WangleiTestSuite.txt";

		
		

		// 文本每一行
		List<String> strList = new ArrayList();
		// 行号
		List<Integer> flags = new ArrayList();
		// 记录FAILED和ERROR
		Set<String> failSet = new TreeSet();
		// String regexStr =
		// "(Testcase:\\s\\w*([\\w]*.{3,}\\w*.):\\sFAILED)|(Testcase:\\s\\w*([\\w]*.{3,}\\w*.):\\sCaused\\san\\sERROR)";
		Pattern p = Pattern.compile("Testcase");
		Matcher m;
		int i = 0;

		try {
			Reader re = new FileReader(new File(PATH));
			BufferedReader bre = new BufferedReader(re);
			while (bre.ready()) {
				String str = bre.readLine();
				strList.add(str);
				m = p.matcher(str);
				// 匹配后,记录匹配的行号
				if (m.find()) {
					flags.add(i);
					System.out.println("find " + i);
				}
				i++;
			}
			for (int k = 0; k < flags.size(); k++) {
				// 去除SKIPPED, 只存 FAILED和ERROR
				if (!strList.get(flags.get(k)).contains("SKIPPED")) {
					// 从文本中取满足匹配的那行字符串
					failSet.add(strList.get(flags.get(k)));
				}

			}
			bre.close();
			re.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		

		Map<String, List<String>> myClassMethodMap = new LinkedHashMap();

		List<String> className = new ArrayList<String>();
		List<String> methodName = new ArrayList<String>();

		for (Iterator it = failSet.iterator(); it.hasNext();) {
			// System.out.println(it.next().toString());
			// Testcase:
			// testAPIRequest(com.weibo.cases.xuelian.FeedWithDarwinTagsForMovieStatusTest):
			// FAILED
			// 取出类和方法
			String str = it.next().toString();
			int classBegin = str.indexOf("(");
			int classEnd = str.indexOf(")");
			// 类名
			String classPart = str.substring(classBegin + 1, classEnd).concat(
					".class");
			// 方法名, 加上双引号,方便写文件时,注解中方法的添加
			String methodPart = "\"" + str.substring(10, classBegin) + "\"";

			// 聚合 class-method 一对多
			if (myClassMethodMap.containsKey(classPart)) {
				// 拿到之前的class 对应的list, 并在该list下新增 method
				List<String> methodList = myClassMethodMap.get(classPart);
				methodList.add(methodPart);
				myClassMethodMap.put(classPart, methodList);
			} else {
				// 第一次添加该class时
				List<String> firstMethod = new ArrayList<String>();
				firstMethod.add(methodPart);
				myClassMethodMap.put(classPart, firstMethod);
			}

		
			System.out.println(classPart + " " + methodPart);

		}

		System.out.println(className.size());

		System.out.println(methodName.size());

		System.out.println(myClassMethodMap);

		// 写执行错误的文件 ,myClassMethodMap要跑的数据, PATH为元文件(实时更新为错误日志)
		new WriteFailTest().writeJavaClass(myClassMethodMap, PATH);

	}
}


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-32285-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 张国华
      张国华

      中国应该直接将闯入领海的美国军舰扣压

      • 傅俊杰
        傅俊杰

        关键在于作战哪能力

    • 杨绘
      杨绘

      rio其实很好喝年初开始接触喝了一个多月之后就开始断货之后再买到的就不是rio了

    热点图片
    拼命载入中...