赞
踩
目录
在现代 Web 应用程序中,API 通常以 JSON 格式返回数据。因此,对接口返回的 JSON 数据进行基本处理非常重要。
1.涉及到旧接口为 xml 格式,新接口为 json 格式。
2.涉及到新接口有旧接口字段的合并;
3.我只做了简单的对比,如比对两个接口的返回字段是否值相等;
4.项目使用 java 语言,Maven 管理。
- //使用日志
- @Slf4j
- public class TestUrlMap {
- //设置请求http参数初始化
- public static final OkHttpClient client = new OkHttpClient.Builder()
- .connectTimeout(5, TimeUnit.SECONDS)
- .readTimeout(5, TimeUnit.SECONDS)
- .writeTimeout(5, TimeUnit.SECONDS)
- .build();
-
- public static void diffMap(String code) throws IOException {
-
- //如果是读取多条url,可以读取文件,我这里直接赋值了。
- String oldUrl = "oldUrl";
- String newUrl = "newUrl" ;
-
-
- //获取body
- String oldData = client.newCall(
- new Request.Builder().url(oldUrl).build())
- .execute().body().string();
- String newData = client.newCall(
- new Request.Builder().url(newUrl).build())
- .execute().body().string();
-
- if (StringUtils.isAnyBlank(oldData, newData)) {
- log.error("获取数据异常, code={}, oldData={}, newData={}", code, oldData, newData);
- }
-
- //读取到json里面result的内容
- JSONObject oldJson = JSON.parseObject(oldData).getJSONObject("result");
- //XML转换json,并读取里面result内容
- JSONObject newJson = XML.toJSONObject(newData).getJSONObject("result");
-
- /**
- *数据示例
- * "adcode": "110000",
- "version": 1601,
- */
- //对比字符串
- if (!StringUtils.equals(oldJson.getString("adcode"), newJson.getString("adcode"))) {
- log.error("code={}, adcode 不一致, {}!={}", code, oldJson.getString("adcode"), newJson.getString("adcode"));
- return;
- }
- //对比整数
- if (oldJson.getInt("version") != newJson.getInt("version")) {
- log.error("code={}, version 不一致, {}!={}", code, oldJson.getInt("version"), newJson.getInt("version"));
- return;
- }
-
- int count = newJson.getInteger("count");
- JSONArray oldEvents = oldJson.getJSONArray("events");
- JSONArray newEvents = newJson.getJSONArray("events");
-
- if (count != oldEvents.size() || count != newEvents.size()) {
- log.error("code={} events长度不一致, {}!={}", code, oldEvents.size(), newEvents.size());
- return;
- }
-
- //下面的for循环是对比json里面的数组
- int newI = 0;
- int linkIndex = 0;
- for (int i = 0; i < oldEvents.size(); i++) {
- String oldEvent = StringUtils.trim(oldEvents.getString(i));
-
- //获取json数组里面第N个值。
- JSONObject newEvent = newEvents.getJSONObject(newI);
- List<String> oldEventList = Splitter.on(",").splitToList(oldEvent);
-
- //oldEventList.get(29),查找接口文档确定 i 的值,但是要注意java的下标是从0开始计数。
- if (!StringUtils.equals(Strings.nullToEmpty(newEvent.getString("lonlat")), Strings.nullToEmpty(oldEventList.get(29) + "," + oldEventList.get(30)))) {
- log.error("code={}, enventIndex={}, lonlat 不一致, {}!={}", code, i, oldEventList.get(29) + "," + oldEventList.get(30), newEvent.getString("lonlat"));
- return;
- }
- }
-
- //这里做的比较是因为新接口把旧接口的很多相关的niLinkIds字段拼接为一个字段了。
- String niLinkIdsStr = newEvent.getString("niLinkIds");
- Iterable<String> split = Splitter.on(",").split(niLinkIdsStr);
-
- if (!Iterables.get(split, linkIndex, "").equals(Strings.nullToEmpty(oldEventList.get(26)))) {
- log.error("code={}, enventIndex={}, niLinkIds 不一致, {}!={}", code, i, oldEventList.get(26), newEvent.getString("niLinkIds"));
- return;
- }
-
- linkIndex++;
- if (linkIndex >= Iterables.size(split)) {
- linkIndex = 0;
- newI++;
- }
-
- log.info("对比成功");
- }
- }
-
- public static void main(String[] args) throws IOException {
-
- /* List<String> codes = Files.readLines(new File("F:/code.txt"), Charset.forName("utf-8"));
- * for (String code : codes) {
- * diffMap(code);
- * }
- * 这是读取文件,传参数的方式,因为我直接给url赋值了,所以直接调用 diffMap() 就可以了。
- */
- diffMap(code);
- }
- }
作为一位过来人也是希望大家少走一些弯路
在这里我给大家分享一些自动化测试前进之路的必须品,希望能对你带来帮助。
(软件测试相关资料,自动化测试相关资料,技术问题答疑等等)
相信能使你更好的进步!
点击下方小卡片
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。