java json接口实例_接口测试——Java + TestNG 国家气象局接口(json解析)实例

本文围绕后端接口测试展开,以天气接口为例,使用Eclipse、TestNG、Maven和ReportNG工具。介绍了代码架构,包含功能代码、测试case、报表文件和配置文件,给出了相关代码示例。还总结了接口返回数据乱码、导包错误等问题及解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

后端测试,主要以测试接口为主。需要代码支撑,近期便找了个天气接口捣鼓了。

使用到的工具是:Eclipse + TestNG + Maven + ReportNG,全国城市编码:http://www.cnblogs.com/oucbl/p/6138963.html,接口地址:http://www.weather.com.cn/data/cityinfo/城市编码.html

先看一下代码架构,如下所示:

bf461655d856b2026351a76ef923de86.png

建的是maven工程,个人觉得这样下载依赖包较方便。工程科分为四部分:功能代码,测试case,报表文件和配置文件。网络上也有很多这样的实例,我只是列举些我在做的过程中所遇到的问题吧,也当一个记录。maven不会配置,可参见我之前写的随笔。

功能代码

Common

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.CityWether.CityInfo;2

3 importnet.sf.json.JSONException;4 importnet.sf.json.JSONObject;5

6 public classCommon {7 public staticString getJsonValue(String JsonString, String JsonId) {8 String JsonValue = "";9 //trim()去掉字符串首尾的空格

10 if (JsonString == null || JsonString.trim().length() < 1) {11 return null;12 }13 try{14 JSONObject obj1 = newJSONObject(JsonString);15 JsonValue =obj1.getString(JsonId);16 } catch(JSONException e) {17 e.printStackTrace();18 }19 returnJsonValue;20 }21 }

View Code

URLConnection

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.CityWether.CityInfo;2

3 importjava.net.HttpURLConnection;4 importjava.net.URL;5

6 public classURLConnection {7 public staticHttpURLConnection getConnection(String url){8 HttpURLConnection connection = null;9 try{10 //打开和URL之间的连接

11 URL postUrl = newURL(url);12 connection =(HttpURLConnection) postUrl.openConnection();13 //设置通用的请求属性

14 connection.setDoOutput(true);15 connection.setDoInput(true);16 connection.setRequestMethod("GET");17 connection.setUseCaches(false);18 connection.setInstanceFollowRedirects(true);19 connection.setRequestProperty("Content-Type", "application/json");20 connection.setRequestProperty("Charset", "utf-8");21 connection.setRequestProperty("Accept-Charset", "utf-8");22 } catch(Exception e) {23 e.printStackTrace();24 }25 returnconnection;26 }27 }

View Code

CityWeather

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.CityWether.CityInfo;2

3 importjava.io.BufferedReader;4 importjava.io.DataOutputStream;5 importjava.io.IOException;6 importjava.io.InputStreamReader;7 importjava.net.HttpURLConnection;8

9 public classCityWeather {10 private String url="";11

12 publicString geturl() {13 returnurl;14 }15

16 public staticString formatString(String s) {17 if (s != null) {18 s = s.replaceAll("\ufeff", "");19 }20 returns;21 }22

23 public String getHttpRespone(String cityCode) throwsIOException {24 String line = "";25 String httpResults = "";26 url=("http://www.weather.com.cn/data/cityinfo/" + cityCode + ".html");27 try{28 HttpURLConnection connection =URLConnection.getConnection(url);29 //建立实际的连接

30 connection.connect();31 BufferedReader reader = new BufferedReader(newInputStreamReader(connection.getInputStream()));32 while ((line = reader.readLine()) != null) {33 httpResults = httpResults +line.toString();34 }35 reader.close();36 //断开连接

37 connection.disconnect();38 } catch(Exception e) {39 e.printStackTrace();40 }41 returnhttpResults;42 }43 }

View Code

测试case

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.CityWether.CityInfo;2

3 importjava.io.IOException;4

5 importorg.testng.Assert;6 importorg.testng.Reporter;7 importorg.testng.annotations.Test;8

9 importcom.CityWether.CityInfo.CityWeather;10 importcom.CityWether.CityInfo.Common;11

12 public classTestCase {13 public String httpResult= null, weatherinfo= null, city=null,expect_city = null;14 public static String cityCode="";15 CityWeather weather=newCityWeather();16

17 @Test(priority=0)18 public void getHuaihua() throwsIOException{19 expect_city="怀化";20 cityCode="101251201";21 resultCheck(cityCode, expect_city);22 }23

24 @Test(priority=1)25 public void getHuitong() throwsIOException{26 expect_city="会同";27 cityCode="101251206";28 resultCheck(cityCode, expect_city);29 }30

31 @Test(priority=2)32 public void getChangsha() throwsIOException{33 expect_city="长沙";34 cityCode="101250101";35 resultCheck(cityCode, expect_city);36 }37

38 @Test(priority=3)39 public void getBaoshan() throwsIOException{40 expect_city="宝山";41 cityCode="101020300";42 resultCheck(cityCode, expect_city);43 }44

45 @Test(priority=4)46 public void getShanghai() throwsIOException{47 expect_city="上海";48 cityCode="101020100";49 resultCheck(cityCode, expect_city);50 }51

52 @Test(priority=5)53 public void Minhang() throwsIOException{54 expect_city="闵行";55 cityCode="101020200";56 resultCheck(cityCode, expect_city);57 }58

59 public void resultCheck(String cityCode, String expect_city) throwsIOException{60 System.setProperty("org.uncommons.reportng.escape-output", "false");61 Reporter.log("【正常用例】:获取"+expect_city+"天气成功!");62 httpResult=weather.getHttpRespone(cityCode);63 Reporter.log("

请求地址: "+weather.geturl()+"

");64 Reporter.log("【返回结果】: "+httpResult);65 weatherinfo=Common.getJsonValue(httpResult, "weatherinfo");66 city=Common.getJsonValue(weatherinfo, "city");67 Reporter.log("

【用例结果】: resultCode=>expected: " + expect_city + " ,actual: "+ city+"

");68 Assert.assertEquals(city,expect_city);69 Reporter.log("

"+"------------------------------------------------------------------------------"+"

");71 }72 }

View Code

报表文件示例

c1464f4b44aff4a8c4defcf3c9aa4880.png

报表html文件位置在如下所示:

3f6b4c3d392da61ec41f26d30a2110e8.png

代码实现如上就完成,需要配置pom.xml文件和testng.xml文件,可参照如下:

pom.xml

pom.xml文件是下载依赖包的,特别方便

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1

2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

3 4.0.0

4

5 com

6 CityWether

7 0.0.1-SNAPSHOT

8 jar

9

10 CityWether

11 http://maven.apache.org

12

13

14 UTF-8

15

16

17

18

19 junit

20 junit

21 3.8.1

22 test

23

24

25 org.json

26 json

27 20171018

28

29

30 org.testng

31 testng

32 6.9.10

33

34

35 org.uncommons

36 reportng

37 1.1.4

38

39

40 com.google.inject

41 guice

42 4.0

43

44

45 velocity

46 velocity-dep

47 1.4

48

49

50

View Code

这里需要注意的是,由于接口返回的是json数据,所以必须导入json依赖包:

1

2 org.json

3 json

4 20171018

5

testng.xml

testng.xml文件是用于运行的,运行程序直接运行该文件即可:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 <?xml version="1.0" encoding="UTF-8"?>

2

3

4

5

6

7

8

9

10

11

12

13

View Code

问题总结

自己在完成过程中,过程中遇到如下问题:

1、接口返回的数据是乱码

如下所示:

4799dcbaf980430be47493dc276c3521.png

解决办法:

在CityWeather类中代码下加上如下代码即可:

public staticString formatString(String s) {if (s != null) {

s= s.replaceAll("\ufeff", "");

}returns;

}

2、Common类中导包错误

Common类中代码导入如下包,运行程序报错

importorg.json.JSONException;import org.json.JSONObject;

报错为:

370290fc37f254229ae88949ee3677e0.png

解决办法为:

重新导入JSON包即可,如下:

importnet.sf.json.JSONException;import net.sf.json.JSONObject;

3、注意:测试报告美化是依赖ReportNG包的,切莫忘记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值