APP接口自动化测试JAVA+TestNG之HTTP接口测试实例

最是人间留不住,朱颜辞镜花辞树。这篇文章主要讲述APP接口自动化测试JAVA+TestNG之HTTP接口测试实例相关的知识,希望能为你提供帮助。
转载自:http://www.cnblogs.com/findyou/p/5388853.html 说明,本文为学习参考,将于一段时间后删除。 前言
      前两篇普及相关基础知识后,本篇主要对举例对国家气象局接口自动化测试进行讲解(Get请求及结果断言),以达到自动化测试入门目的,除了前两篇的一些了解外,需要有一定的java知识(HTTP相关)。 
目录
3.1 HTTP接口(GET)测试实例

3.1.1 待测接口说明 3.1.2 新建JAVA工程
1.工程目录说明 2.Common.java源码 3.getCityWeathe.java源码 4.URLConnection.java源码
3.1.3 编写测试用例
1.测试用例 2.简化后的用例
3.1.4 执行测试用例
 
以下实例均为本次总结再次编写,,如转载还请保留出处与作者姓名Findyou,谢谢! 
 
3.1.1  待测接口说明
1.国家气象局天气预报接口例:北京市天气
 
  1. 接口的址:http://www.weather.com.cn/data/cityinfo/101010100.html
  2. 请求方式:GET
  3. 请求结果:
APP接口自动化测试JAVA+TestNG之HTTP接口测试实例

文章图片
{
        "weatherinfo":  {
                "city":  "北京",
                "cityid":  "101010100",
                "temp1":  "15℃",
                "temp2":  "5℃",
                "weather":  "多云",
                "img1":  "d1.gif",
                "img2":  "n1.gif",
                "ptime":  "08:00"
        }
}
APP接口自动化测试JAVA+TestNG之HTTP接口测试实例

文章图片
 
 
2.测试目标请求对应cityid代码,返回的城市是否是预期城市。
 
 
3.1.2  新建JAVA工程
步骤同上一篇2.2.2.1新建JAVA工程,不再复述,如不懂请百度Eclipse新建工程 
1.工程结构说明 
APP接口自动化测试JAVA+TestNG之HTTP接口测试实例

文章图片

 
2.Common.java源码 
APP接口自动化测试JAVA+TestNG之HTTP接口测试实例

文章图片
package  findyou.Interface;
import  org.codehaus.jettison.json.JSONException;
import  org.codehaus.jettison.json.JSONObject;
public  class  Common  {
        /**
          *  解析Json内容
          * 
          *  @author  Findyou
          *  @version  1.0  2015/3/23
          *  @return  JsonValue  返回JsonString中JsonId对应的Value
          **/
        public  static  String  getJsonValue(String  JsonString,  String  JsonId)  {
                String  JsonValue  =  "";
                if  (JsonString  ==  null  ||  JsonString.trim().length()  <   1)  {
                        return  null;
                }
                try  {
                        JSONObject  obj1  =  new  JSONObject(JsonString);
                        JsonValue  =  (String)  obj1.getString(JsonId);
                }  catch  (JSONException  e)  {
                        e.printStackTrace();
                }
                return  JsonValue;
        }
}
APP接口自动化测试JAVA+TestNG之HTTP接口测试实例

文章图片
 
 
 
3.getCityWeathe.java源码 
APP接口自动化测试JAVA+TestNG之HTTP接口测试实例

文章图片
package  findyou.Interface;
import  java.io.BufferedReader;
import  java.io.DataOutputStream;
import  java.io.IOException;
import  java.io.InputStreamReader;
import  java.net.HttpURLConnection;
public  class  getCityWeather  {
        private  String  url="";
       
        public  String  geturl()  {
                return  url;
        }

        public  String  getHttpRespone(String  cityCode)  throws  IOException  {
                String  line  =  "";
                String  httpResults  =  "";
                url=("http://www.weather.com.cn/data/cityinfo/"
                                +  cityCode  +  ".html");
                try  {
                        HttpURLConnection  connection  =  URLConnection
                                        .getConnection(url);
                        DataOutputStream  out  =  null;
                        //  建立实际的连接
                        connection.connect();
                        out  =  new  DataOutputStream(connection.getOutputStream());
                        out.flush();
                        out.close();
                        BufferedReader  reader  =  new  BufferedReader(new  InputStreamReader(
                                        connection.getInputStream()));
                        while  ((line  =  reader.readLine())  !=  null)  {
                                httpResults  =  httpResults  +  line.toString();
                        }
                        reader.close();
                        //  断开连接
                        connection.disconnect();
                }  catch  (Exception  e)  {
                        e.printStackTrace();
                }
                return  httpResults;
        }
}
APP接口自动化测试JAVA+TestNG之HTTP接口测试实例

文章图片
 
 
4.URLConnection.java源码 
APP接口自动化测试JAVA+TestNG之HTTP接口测试实例

文章图片
package  findyou.Interface;
import  java.net.HttpURLConnection;
import  java.net.URL;
public  class  URLConnection  {       
        public  static  HttpURLConnection  getConnection(String  url){
                HttpURLConnection  connection  =  null;
                try  {
                        //  打开和URL之间的连接
                        URL  postUrl  =  new  URL(url);
                        connection  =  (HttpURLConnection)  postUrl.openConnection();
                          //  设置通用的请求属性
                        connection.setDoOutput(true);
                        connection.setDoInput(true);
                        connection.setRequestMethod("GET");
                        connection.setUseCaches(false);
                        connection.setInstanceFollowRedirects(true);
                        connection.setRequestProperty("Content-Type",  "application/json");
                        connection.setRequestProperty("Charset",  "utf-8");
                        connection.setRequestProperty("Accept-Charset",  "utf-8");
                }  catch  (Exception  e)  {
                        e.printStackTrace();
                } 
                return  connection;
        }
}
APP接口自动化测试JAVA+TestNG之HTTP接口测试实例

文章图片
 
 
 
3.1.3  编写测试用例
1.测试用例(常见"二"一般的写法) 
APP接口自动化测试JAVA+TestNG之HTTP接口测试实例

文章图片
package  findyou.testcase;
import  java.io.IOException;
import  org.testng.Assert;
import  org.testng.Reporter;
import  org.testng.annotations.Test;
import  findyou.Interface.Common;
import  findyou.Interface.getCityWeather;
public  class  test  {
        public  String  httpResult=  null,  weatherinfo=  null,  city=null,exp_city  =  null;
        public  static  String  cityCode="";        
        public  static  getCityWeather  weather=new  getCityWeather();

        @Test(groups  =  {  "BaseCase"})
        public  void  getShenZhen_Succ()  throws  IOException{
                exp_city="深圳";
                cityCode="101280601";
                Reporter.log("【正常用例】:获取"+exp_city+"天气成功!");
                httpResult=weather.getHttpRespone(cityCode);
                Reporter.log("请求地址:  "+weather.geturl());
                Reporter.log("返回结果:  "+httpResult);
                weatherinfo=Common.getJsonValue(httpResult,  "weatherinfo");
                city=Common.getJsonValue(weatherinfo,  "city");
                Reporter.log("用例结果:  resultCode=> expected:  "  +  exp_city  +  "  ,actual:  "+  city);
                Assert.assertEquals(city,exp_city);
        }
       
        @Test(groups  =  {  "BaseCase"})
        public  void  getBeiJing_Succ()  throws  IOException{
                exp_city="北京";
                cityCode="101010100";
                Reporter.log("【正常用例】:获取"+exp_city+"天气成功!");
                httpResult=weather.getHttpRespone(cityCode);
                Reporter.log("请求地址:  "+weather.geturl());
                Reporter.log("返回结果:  "+httpResult);
                weatherinfo=Common.getJsonValue(httpResult,  "weatherinfo");
                city=Common.getJsonValue(weatherinfo,  "city");
                Reporter.log("用例结果:  resultCode=> expected:  "  +  exp_city  +  "  ,actual:  "+  city);
                Assert.assertEquals(city,exp_city);
        }
       
        @Test(groups  =  {  "BaseCase"})
        public  void  getShangHai_Succ()  throws  IOException{
                exp_city="上海";
                cityCode="101020100";
                Reporter.log("【正常用例】:获取"+exp_city+"天气成功!");
                httpResult=weather.getHttpRespone(cityCode);
                Reporter.log("请求地址:  "+weather.geturl());
                Reporter.log("返回结果:  "+httpResult);
                weatherinfo=Common.getJsonValue(httpResult,  "weatherinfo");
                city=Common.getJsonValue(weatherinfo,  "city");
                Reporter.log("用例结果:  resultCode=> expected:  "  +  exp_city  +  "  ,actual:  "+  city);
                Assert.assertEquals(city,exp_city);
        }       
}
APP接口自动化测试JAVA+TestNG之HTTP接口测试实例

文章图片
 
 
2.简化后的用例 
如何返回值格式与请求格式固定,用例优化如下 
APP接口自动化测试JAVA+TestNG之HTTP接口测试实例

文章图片
package  findyou.testcase;
import  java.io.IOException;
import  org.testng.Assert;
import  org.testng.Reporter;
import  org.testng.annotations.Test;
import  findyou.Interface.Common;
import  findyou.Interface.getCityWeather;
public  class  test  {
        public  String  httpResult=  null,  weatherinfo=  null,  city=null,exp_city  =  null;
        public  static  String  cityCode="";
        getCityWeather  weather=new  getCityWeather();
       
        @Test(groups  =  {  "BaseCase"})
        public  void  getShenZhen_Succ()  throws  IOException{
                exp_city="深圳";
                cityCode="101280601";
                resultCheck(cityCode,  exp_city);
        }
       
        @Test(groups  =  {  "BaseCase"})
        public  void  getBeiJing_Succ()  throws  IOException{
                exp_city="北京";
                cityCode="101010100";
                resultCheck(cityCode,  exp_city);
        }
       
        @Test(groups  =  {  "BaseCase"})
        public  void  getShangHai_Succ()  throws  IOException{
                exp_city="上海";
                cityCode="101020100";
                resultCheck(cityCode,  exp_city);
        }
       
        public  void  resultCheck(String  cityCode_str,  String  exp_city_str)  throws  IOException{
                Reporter.log("【正常用例】:获取"+exp_city_str+"天气成功!");
                httpResult=weather.getHttpRespone(cityCode_str);
                Reporter.log("请求地址:  "+weather.geturl());
                Reporter.log("返回结果:  "+httpResult);
                weatherinfo=Common.getJsonValue(httpResult,  "weatherinfo");
                city=Common.getJsonValue(weatherinfo,  "city");
                Reporter.log("用例结果:  resultCode=> expected:  "  +  exp_city_str  +  "  ,actual:  "+  city);
                Assert.assertEquals(city,exp_city_str);                
        }
}
APP接口自动化测试JAVA+TestNG之HTTP接口测试实例

文章图片
   
工程下载地址:http://pan.baidu.com/s/1mhyTNny  密码:11ft 
 
3.1.4  执行测试用例
 
APP接口自动化测试JAVA+TestNG之HTTP接口测试实例

文章图片

 
【APP接口自动化测试JAVA+TestNG之HTTP接口测试实例】
APP接口自动化测试JAVA+TestNG之HTTP接口测试实例

文章图片
 

    推荐阅读