zoukankan      html  css  js  c++  java
  • APP接口自动化测试JAVA+TestNG(三)之HTTP接口测试实例

    前言
        前两篇普及相关基础知识后,本篇主要对举例对国家气象局接口自动化测试进行讲解(Get请求及结果断言),以达到自动化测试入门目的,除了前两篇的一些了解外,需要有一定的JAVA知识(HTTP相关)。


    目录

    以下实例均为本次总结再次编写,,如转载还请保留出处与作者姓名Findyou,谢谢! 


    3.1.1 待测接口说明

    1.国家气象局天气预报接口

    例:北京市天气
    1. 接口的址:http://www.weather.com.cn/data/cityinfo/101010100.html
    2. 请求方式:GET
    3. 请求结果:
    {
        "weatherinfo": {
            "city": "北京",
            "cityid": "101010100",
            "temp1": "15℃",
            "temp2": "5℃",
            "weather": "多云",
            "img1": "d1.gif",
            "img2": "n1.gif",
            "ptime": "08:00"
        }
    }

    2.测试目标

    请求对应cityid代码,返回的城市是否是预期城市。

    3.1.2 新建JAVA工程

    步骤同上一篇2.2.2.1新建JAVA工程,不再复述,如不懂请百度Eclipse新建工程

    1.工程结构说明

     

    2.Common.java源码

    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;
        }
    }

     

    3.getCityWeathe.java源码

    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;
        }
    }

    4.URLConnection.java源码

    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;
        }
    }

    3.1.3 编写测试用例

    1.测试用例(常见"二"一般的写法)

    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);
        }    
    }

    2.简化后的用例

    如何返回值格式与请求格式固定,用例优化如下
    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);        
        }
    }

      

    工程下载地址: https://pan.baidu.com/s/1HL2WPkYNwJ3kx4WH5hSvZA 密码: 7nm5

    3.1.4 执行测试用例

     


     

     TestNG自动化测试系列实例,基本已完毕,Post方法由于篇幅问题,则再不贴出来了,了解了以上实例,Post方法没有太大问题。后续如有时间看心情再上持续集成、自动化部署、自动化用例执行与测试报告输出博文~~~

  • 相关阅读:
    【codecombat】 试玩全攻略 第九关 循环又循环
    【codecombat】 试玩全攻略 第十三关 已知敌人
    【codecombat】 试玩全攻略 第十一关 再次迷宫经历
    【codecombat】 试玩全攻略 第六关 cell commentary
    【codecombat】 试玩全攻略 第八关 火舞
    【codecombat】 试玩全攻略 第十二关 恐惧之门
    【codecombat】 试玩全攻略 第十四关 已知敌人
    苹果apns推送总结
    Xcode 提升速度小技巧
    UITextField 限制输入字数
  • 原文地址:https://www.cnblogs.com/findyou/p/5388853.html
Copyright © 2011-2022 走看看