⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 csvsaveservice.java

📁 测试工具
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
		}

        if (saveConfig.saveBytes()) {
            text.append(CSV_BYTES);
            text.append(delim);
        }

        if (saveConfig.saveThreadCounts()) {
            text.append(CSV_THREAD_COUNT1);
            text.append(delim);
            text.append(CSV_THREAD_COUNT2);
            text.append(delim);
        }

        if (saveConfig.saveUrl()) {
            text.append(CSV_URL);
            text.append(delim);
        }

        if (saveConfig.saveFileName()) {
            text.append(CSV_FILENAME);
            text.append(delim);
        }

        if (saveConfig.saveLatency()) {
            text.append(CSV_LATENCY);
            text.append(delim);
        }

        if (saveConfig.saveEncoding()) {
            text.append(CSV_ENCODING);
            text.append(delim);
        }

		if (saveConfig.saveSampleCount()) {
			text.append(CSV_SAMPLE_COUNT);
			text.append(delim);
			text.append(CSV_ERROR_COUNT);
			text.append(delim);
		}

        if (saveConfig.saveHostname()) {
            text.append(CSV_HOSTNAME);
            text.append(delim);
        }

        String resultString = null;
		int size = text.length();
		int delSize = delim.length();

		// Strip off the trailing delimiter
		if (size >= delSize) {
			resultString = text.substring(0, size - delSize);
		} else {
			resultString = text.toString();
		}
		return resultString;
	}
	
	// Map header names to set() methods
	private static final LinkedMap headerLabelMethods = new LinkedMap();
	
	// These entries must be in the same order as columns are saved/restored.
	
	static {
		    headerLabelMethods.put(TIME_STAMP, new Functor("setTimestamp"));
			headerLabelMethods.put(CSV_ELAPSED, new Functor("setTime"));
			headerLabelMethods.put(LABEL, new Functor("setLabel"));
			headerLabelMethods.put(RESPONSE_CODE, new Functor("setCode"));
			headerLabelMethods.put(RESPONSE_MESSAGE, new Functor("setMessage"));
			headerLabelMethods.put(THREAD_NAME, new Functor("setThreadName"));
			headerLabelMethods.put(DATA_TYPE, new Functor("setDataType"));
			headerLabelMethods.put(SUCCESSFUL, new Functor("setSuccess"));
			headerLabelMethods.put(FAILURE_MESSAGE, new Functor("setAssertionResultsFailureMessage"));
            headerLabelMethods.put(CSV_BYTES, new Functor("setBytes"));
            // Both these are needed in the list even though they set the same variable
            headerLabelMethods.put(CSV_THREAD_COUNT1,new Functor("setThreadCounts"));
            headerLabelMethods.put(CSV_THREAD_COUNT2,new Functor("setThreadCounts"));
            headerLabelMethods.put(CSV_URL, new Functor("setUrl"));
            headerLabelMethods.put(CSV_FILENAME, new Functor("setFileName"));
            headerLabelMethods.put(CSV_LATENCY, new Functor("setLatency"));
            headerLabelMethods.put(CSV_ENCODING, new Functor("setEncoding"));
            // Both these are needed in the list even though they set the same variable
            headerLabelMethods.put(CSV_SAMPLE_COUNT, new Functor("setSampleCount"));
            headerLabelMethods.put(CSV_ERROR_COUNT, new Functor("setSampleCount"));
            headerLabelMethods.put(CSV_HOSTNAME, new Functor("setHostname"));
	}

	/**
	 * Parse a CSV header line
	 * @param headerLine from CSV file
	 * @param filename name of file (for log message only)
	 * @return config corresponding to the header items found or null if not a header line
	 */
	public static SampleSaveConfiguration getSampleSaveConfiguration(String headerLine, String filename){
		String[] parts = splitHeader(headerLine,_saveConfig.getDelimiter()); // Try default delimiter

		String delim = null;
		
		if (parts == null){
			Perl5Matcher matcher = JMeterUtils.getMatcher();
			PatternMatcherInput input = new PatternMatcherInput(headerLine);
			Pattern pattern = JMeterUtils.getPatternCache()
			// This assumes the header names are all single words with no spaces
			// word followed by 0 or more repeats of (non-word char + word)
			// where the non-word char (\2) is the same
			// e.g.  abc|def|ghi but not abd|def~ghi
			        .getPattern("\\w+((\\W)\\w+)?(\\2\\w+)*", // $NON-NLS-1$
					Perl5Compiler.READ_ONLY_MASK);
			if (matcher.matches(input, pattern)) {
				delim = matcher.getMatch().group(2);
				parts = splitHeader(headerLine,delim);// now validate the result
			}
		}
		
		if (parts == null) {
			return null; // failed to recognise the header
		}
		
		// We know the column names all exist, so create the config 
		SampleSaveConfiguration saveConfig=new SampleSaveConfiguration(false);
		
		for(int i=0;i<parts.length;i++){
			Functor set = (Functor) headerLabelMethods.get(parts[i]);
			set.invoke(saveConfig,new Boolean[]{Boolean.TRUE});
		}

		if (delim != null){
			log.warn("Default delimiter '"+_saveConfig.getDelimiter()+"' did not work; using alternate '"+delim+"' for reading "+filename);
			saveConfig.setDelimiter(delim);
		}
		return saveConfig;
	}

	private static String[] splitHeader(String headerLine, String delim) {
		String parts[]=headerLine.split("\\Q"+delim);// $NON-NLS-1$
		int previous = -1;
		// Check if the line is a header
		for(int i=0;i<parts.length;i++){
			final String label = parts[i];
			int current = headerLabelMethods.indexOf(label);
			if (current == -1){
				return null; // unknown column name
			}
			if (current <= previous){
				log.warn("Column header number "+(i+1)+" name "+ label + " is out of order.");
				return null; // out of order
			}
			previous = current;
		}
		return parts;
	}

	/**
     * Method will save aggregate statistics as CSV. For now I put it here.
     * Not sure if it should go in the newer SaveService instead of here.
     * if we ever decide to get rid of this class, we'll need to move this
     * method to the new save service.
     * @param data
     * @param writer
     * @throws IOException
     */
    public static void saveCSVStats(Vector data, FileWriter writer) throws IOException {
        for (int idx=0; idx < data.size(); idx++) {
            Vector row = (Vector)data.elementAt(idx);
            for (int idy=0; idy < row.size(); idy++) {
                if (idy > 0) {
                    writer.write(","); // $NON-NLS-1$
                }
                Object item = row.elementAt(idy);
                writer.write( String.valueOf(item) );
            }
            writer.write(System.getProperty("line.separator")); // $NON-NLS-1$
        }
    }

    /**
     * Convert a result into a string, where the fields of the result are
     * separated by the default delimiter.
     * 
     * @param event
     *            the sample event to be converted
     * @return the separated value representation of the result
     */
    public static String resultToDelimitedString(SampleEvent event) {
    	return resultToDelimitedString(event, event.getResult().getSaveConfig().getDelimiter());
    }

    /**
     * Convert a result into a string, where the fields of the result are
     * separated by a specified String.
     * 
     * @param event
     *            the sample event to be converted
     * @param delimiter
     *            the separation string
     * @return the separated value representation of the result
     */
    public static String resultToDelimitedString(SampleEvent event, String delimiter) {
    	StringBuffer text = new StringBuffer();
    	SampleResult sample = event.getResult();
    	SampleSaveConfiguration saveConfig = sample.getSaveConfig();
    
    	if (saveConfig.saveTimestamp()) {
    		if (saveConfig.printMilliseconds()){
    			text.append(sample.getTimeStamp());
    			text.append(delimiter);
    		} else if (saveConfig.formatter() != null) {
    			String stamp = saveConfig.formatter().format(new Date(sample.getTimeStamp()));
    			text.append(stamp);
    			text.append(delimiter);
    		}
    	}
    
    	if (saveConfig.saveTime()) {
    		text.append(sample.getTime());
    		text.append(delimiter);
    	}
    
    	if (saveConfig.saveLabel()) {
    		text.append(sample.getSampleLabel());
    		text.append(delimiter);
    	}
    
    	if (saveConfig.saveCode()) {
    		text.append(sample.getResponseCode());
    		text.append(delimiter);
    	}
    
    	if (saveConfig.saveMessage()) {
    		text.append(sample.getResponseMessage());
    		text.append(delimiter);
    	}
    
    	if (saveConfig.saveThreadName()) {
    		text.append(sample.getThreadName());
    		text.append(delimiter);
    	}
    
    	if (saveConfig.saveDataType()) {
    		text.append(sample.getDataType());
    		text.append(delimiter);
    	}
    
    	if (saveConfig.saveSuccess()) {
    		text.append(sample.isSuccessful());
    		text.append(delimiter);
    	}
    
    	if (saveConfig.saveAssertionResultsFailureMessage()) {
    		String message = null;
    		AssertionResult[] results = sample.getAssertionResults();
    
    		if (results != null) {
    			// Find the first non-null message
    			for (int i = 0; i < results.length; i++){
        			message = results[i].getFailureMessage();
    				if (message != null) break;
    			}
    		}
    
    		if (message != null) {
    			text.append(message);
    		}
    		text.append(delimiter);
    	}
    
        if (saveConfig.saveBytes()) {
            text.append(sample.getBytes());
            text.append(delimiter);
        }
    
        if (saveConfig.saveThreadCounts()) {
            text.append(sample.getGroupThreads());
            text.append(delimiter);
            text.append(sample.getAllThreads());
            text.append(delimiter);
        }
        if (saveConfig.saveUrl()) {
            text.append(sample.getURL());
            text.append(delimiter);
        }
    
        if (saveConfig.saveFileName()) {
            text.append(sample.getResultFileName());
            text.append(delimiter);
        }
    
        if (saveConfig.saveLatency()) {
            text.append(sample.getLatency());
            text.append(delimiter);
        }

        if (saveConfig.saveEncoding()) {
            text.append(sample.getDataEncoding());
            text.append(delimiter);
        }

    	if (saveConfig.saveSampleCount()) {// Need both sample and error count to be any use
    		text.append(sample.getSampleCount());
    		text.append(delimiter);
    		text.append(sample.getErrorCount());
    		text.append(delimiter);
    	}
    
        if (saveConfig.saveHostname()) {
            text.append(event.getHostname());
            text.append(delimiter);
        }

    	String resultString = null;
    	int size = text.length();
    	int delSize = delimiter.length();
    
    	// Strip off the trailing delimiter
    	if (size >= delSize) {
    		resultString = text.substring(0, size - delSize);
    	} else {
    		resultString = text.toString();
    	}
    	return resultString;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -