1. 程式人生 > 實用技巧 >ParameterUtils【java正則表示式】【多測師_王sir】

ParameterUtils【java正則表示式】【多測師_王sir】

import static org.testng.Assert.assertEqualsNoOrder;

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.jayway.jsonpath.Configuration;
import com.jayway.jsonpath.JsonPath;

public class ParameterUtils {

    //建立引數化的容器
    private
static Map<String, String> globalDataMap = new HashMap<String, String>(); /** * 通過引數名,返回資料池中間對應的值 * @param parameterName * @return */ public static String getGlobalData(String parameterName) { return globalDataMap.get(parameterName); } /** * 新增資料到全域性資料池中 *
@param parameterName * @param parameterValue */ public static void addGlobalData(String parameterName, String parameterValue) { globalDataMap.put(parameterName, parameterValue); } /** * 正則匹配並替換為資料池中間的引數值 * @param args */ public static String getReplacedStr(String str) {
//把所有符合引數化規則的字串提取出來 //正則表示式,又稱規則表示式。(英語:Regular Expression,在程式碼中常簡寫為regex、regexp或RE), //電腦科學的一個概念。正則表示式通常被用來檢索、替換那些符合某個模式(規則)的文字。 //符合${mobilephone}規則的正則表示式 //規則:開頭是${,中間是任意字串,皆為是} // \$\{.*\} String regex = "\\$\\{(.*?)\\}"; //編譯正則表示式,得到模式物件 Pattern pattern = Pattern.compile(regex); //匹配字串(檢索),得到匹配物件 Matcher matcher = pattern.matcher(str); //當檢索出有下一個匹配的字串後 while (matcher.find()) { String totalStr = matcher.group(0);//完整的符合規則的字串 -->${mobilephone} String parameterName = matcher.group(1);//對應的引數名-->mobilephone -->到容器中找對應的值 String parameterValue = globalDataMap.get(parameterName); //-->13777777777 // System.out.println(totalStr + "-->" + parameterName + "-->" + parameterValue); //把原字串中間的符合規則的字串,替換為對應引數的值 //${mobilephone} -->13777777777 str = str.replace(totalStr, parameterValue); } return str; } public static void main(String[] args) { // example(); String jsonStr = "{\"status\":1,\"code\":\"10001\",\r\n" + " \"data\":{\"id\":3,\"regname\":\"jack\",\r\n" + " \"pwd\":\"E10ADC3949BA59ABBE56E057F20F883E\",\r\n" + " \"mobilephone\":\"13999888819\",\"leaveamount\":\"10000.00\",\r\n" + " \"type\":\"1\",\"regtime\":\"2019-04-20 11:39:05.0\"},\r\n" + " \"msg\":\"充值成功\"}"; Object document = Configuration.defaultConfiguration().jsonProvider().parse(jsonStr); Object idStr = JsonPath.read(document, "$.data.regtime"); System.out.println(idStr); } private static void example() { //準備一個沒有註冊過的手機號:13777777777 --》儲存到一個容器中 //要把13666666666替換為13777777777 //設計一個規則,就是告訴系統從容器中去拿沒有註冊過的手機號 //{"mobilephone":"${mobilephone}","pwd":"123456","regname":"lemonban"} //${mobilephone}:去容器中讀取出mobilephone對應的值 /** * 引數化: * 1:完成介面的關聯 * 2:分離出靜態的資料,讓介面測試用例更加容易維護 */ Map<String, String> parametersMap = new HashMap<String, String>(); parametersMap.put("mobilephone", "13777777778"); parametersMap.put("pwd", "123456"); String str = "{\"mobilephone\":\"${mobilephone}\",\"pwd\":\"${pwd}\",\"regname\":\"lemonban\"}"; System.out.println("原始字串:" + str); //把${mobilephone}替換為13777777777 //把所有符合引數化規則的字串提取出來 //正則表示式,又稱規則表示式。(英語:Regular Expression,在程式碼中常簡寫為regex、regexp或RE), //電腦科學的一個概念。正則表示式通常被用來檢索、替換那些符合某個模式(規則)的文字。 //符合${mobilephone}規則的正則表示式 //規則:開頭是${,中間是任意字串,皆為是} // \$\{.*\} String regex = "\\$\\{(.*?)\\}"; //編譯正則表示式,得到模式物件 Pattern pattern = Pattern.compile(regex); //匹配字串(檢索),得到匹配物件 Matcher matcher = pattern.matcher(str); //當檢索出有下一個匹配的字串後 while (matcher.find()) { String totalStr = matcher.group(0);//完整的符合規則的字串 -->${mobilephone} String parameterName = matcher.group(1);//對應的引數名-->mobilephone -->到容器中找對應的值 String parameterValue = parametersMap.get(parameterName); //-->13777777777 System.out.println(totalStr + "-->" + parameterName + "-->" + parameterValue); //把原字串中間的符合規則的字串,替換為對應引數的值 //${mobilephone} -->13777777777 str = str.replace(totalStr, parameterValue); } System.out.println("替換後的字串:" + str); } }