java post接口测试_接口测试——Java + TestNG 国家气象局接口(json解析)实例
后端測試,主要以測試接口為主。需要代碼支撐,近期便找了個天氣接口搗鼓了。
使用到的工具是:Eclipse + TestNG + Maven + ReportNG,全國城市編碼:http://www.cnblogs.com/oucbl/p/6138963.html,接口地址:http://www.weather.com.cn/data/cityinfo/城市編碼.html
先看一下代碼架構,如下所示:
建的是maven工程,個人覺得這樣下載依賴包較方便。工程科分為四部分:功能代碼,測試case,報表文件和配置文件。網絡上也有很多這樣的實例,我只是列舉些我在做的過程中所遇到的問題吧,也當一個記錄。maven不會配置,可參見我之前寫的隨筆。
功能代碼
Common
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
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
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
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
報表文件示例
報表html文件位置在如下所示:
代碼實現如上就完成,需要配置pom.xml文件和testng.xml文件,可參照如下:
pom.xml
pom.xml文件是下載依賴包的,特別方便
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文件是用于運行的,運行程序直接運行該文件即可:
1 <?xml version="1.0" encoding="UTF-8"?>
2
3
4
5
6
7
8
9
10
11
12
13
View Code
問題總結
自己在完成過程中,過程中遇到如下問題:
1、接口返回的數據是亂碼
如下所示:
解決辦法:
在CityWeather類中代碼下加上如下代碼即可:
public staticString formatString(String s) {if (s != null) {
s= s.replaceAll("\ufeff", "");
}returns;
}
2、Common類中導包錯誤
Common類中代碼導入如下包,運行程序報錯
importorg.json.JSONException;import org.json.JSONObject;
報錯為:
解決辦法為:
重新導入JSON包即可,如下:
importnet.sf.json.JSONException;import net.sf.json.JSONObject;
3、注意:測試報告美化是依賴ReportNG包的,切莫忘記
本文僅代表作者觀點,系作者@溫一壺清酒發表。
歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
文章出處:http://www.cnblogs.com/hong-fithing/
總結
以上是生活随笔為你收集整理的java post接口测试_接口测试——Java + TestNG 国家气象局接口(json解析)实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java强引用弱引用_Java 的强引用
- 下一篇: java servlet filter_