httpclient如何驗證響應字段值是否爲數字

本人在使用httpclient做接口功能測試的過程中,有一個需求是驗證字段值是否是數字,我設計的用例格式是一個verify_key對應一個verify_value的格式,經過嘗試和驗證,終於解決了這個問題。數據庫中verify_key值爲int的時候,我就去驗證後面verify_value中的字符是否在相應的json數據中,如果在就去查找後面的值是否是數字,此處不一定是int類型。如果是多個字段使用逗號隔開,不區分中英文逗號,因爲會在程序中做兼容。分享代碼,供大家參考。

// 獲取驗證字段類型
	private String getDateType(JSONObject response, String key, String value) {
		String value1 = value;// 存放一個value,因爲後面回去value進行編輯
		if (key == null || key.isEmpty()) {
			return value1;
		}
		if (key.equalsIgnoreCase("int")) {
			if (!response.toString().contains(value1)) {
				return author;
			}
			value = value.replace(",", ",");// 替換掉中文逗號
			if (value.indexOf(",") == -1) {// 如果不存在逗號,則直接進入驗證
				boolean result = checkNum(response.toString(), value1);
				return result ? value1 : author;
			} else {// 如果包含逗號,先將中文逗號轉化爲英文都好
				List<String> list = new ArrayList<>();// 用list存放獲取到的value中的值
				for (int i = 0; i < 10; i++) {// for循環獲取驗證文本
					if (value.indexOf(",") == -1) {// 如果已經到頭,則直接賦值並添加list,跳出循環
						String key1 = value;
						list.add(key1);
						break;
					}
					String key1 = value.substring(0, value.indexOf(","));// 截取字符串
					list.add(key1);// 添加list
					value = deleteCharFromString(key1 + ",", value);// 刪除截取到的字符串
				}
				boolean result = true;
				for (int i = 0; i < list.size(); i++) {
					if (!result) {
						break;
					}
					result = result & checkNum(response.toString(), key);// 遍歷得到最終結果
				}
				return result ? value1 : author;// 返回值
			}
		} else {
			return getDataContains(response, key, value1);// 如果不是int,則返回getdatevalue()方法的返回值
		}
	}

最後一個方法是,從json數據中獲取對應值的方法,如果驗證失敗,就會調用驗證包含的方法,如果失敗繼續調用驗證字段值方法,防止一些用例編寫上的錯誤。

其中checknum的方法如下:

public boolean checkNum(String text, String key) {
		boolean result = true;
		key = "\"" + key + "\"";
		String key1 = text;
		String key0;
		String key2;
		while (result) {
			if (!key1.contains(key)) {
				break;
			}
			key1 = key1.substring(key1.indexOf(key));
			key0 = key1.substring(0, key1.indexOf(","));
			key2 = key0.substring(key0.indexOf(":") + 1);
			result = isNumber(deleteCharFromString("\"", key2));
			key1 = deleteCharFromString(key0, key1);
		}
		return result;
	}

這裏並未使用正則匹配,主要原因兩個,第一我對正則使用並不非常有把握,時間緊,第二,非數字的相應內容並不十分清楚。以後會繼續優化代碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章