APP接口自动化测试JAVA+TestNG(三)之HTTP接口测试实例
前两篇普及相关基础知识后,本篇主要对举例对国家气象局接口自动化测试进行讲解(Get请求及结果断言),以达到自动化测试入门目的,除了前两篇的一些了解外,需要有一定的JAVA知识(HTTP相关)。
目录
以下实例均为本次总结再次编写,,如转载还请保留出处与作者姓名Findyou,谢谢!
3.1.1 待测接口说明
1.国家气象局天气预报接口
例:北京市天气
- 接口的址:http://www.weather.com.cn/data/cityinfo/101010100.html
- 请求方式:GET
- 请求结果:
{ "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方法没有太大问题。后续如有时间看心情再上持续集成、自动化部署、自动化用例执行与测试报告输出博文~~~
APP接口自动化测试JAVA+TestNG(三)之HTTP接口测试实例的更多相关文章
- APP接口自动化测试JAVA+TestNG(二)之TestNG简介与基础实例
前言 继上篇环境篇后,本篇主要对TestNG进行介绍,给出最最基础的两个实例,通过本文后,学会并掌握TestNG测试用例的编写与运行,以及生成美化后的报告.下一篇为HTTP接口实战(国家气象局接口自动 ...
- APP接口自动化测试JAVA+TestNG(一)之框架环境搭建
前言 好久不曾写点啥,去年换到新公司组测试团队与培养建设花费大量时间与精力,终于架构成型与稳定有时间可以打打酱油了.很久没有总结点啥,提笔想写的内容太多,先放APP接口自动化的内容吧,这个估计大家比较 ...
- 零成本实现接口自动化测试 – Java+TestNG 测试Restful service
接口自动化测试 – Java+TestNG 测试 Restful Web Service 关键词:基于Rest的Web服务,接口自动化测试,数据驱动测试,测试Restful Web Service, ...
- (转)接口自动化测试 – Java+TestNG 测试 Restful Web Service
本文主要介绍如何用Java针对Restful web service 做接口自动化测试(数据驱动),相比UI自动化,接口自动化稳定性可靠性高,实施难易程度低,做自动化性价比高.所用到的工具或类库有 T ...
- 【Java学习笔记之二十二】解析接口在Java继承中的用法及实例分析
一.定义 Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为( ...
- Effective Java 第三版——35. 使用实例属性替代序数
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- Effective Java 第三版——89. 对于实例控制,枚举类型优于READRESOLVE
Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...
- python接口自动化测试二十:函数写接口测试
# coding:utf-8import requestsimport refrom bs4 import BeautifulSoup # s = requests.session() # 全局的s ...
- 接口自动化测试框架搭建 – Java+TestNG 测试Restful service
接口自动化测试 – Java+TestNG 测试 Restful Web Service 关键词:基于Rest的Web服务,接口自动化测试,数据驱动测试,测试Restful Web Service, ...
随机推荐
- 四、jquery中的事件与应用
当用户浏览页面时,浏览器会对页面代码进行解释或编译--这个过程实质上是通过时间来驱动的,即页面在加载时,执行一个Load事件,在这个事件中实现浏览器编译页面代码的过程.时间无论在页面元素本身还是在元素 ...
- 串口计时工具Grabserial简介及修改(添加输入功能)
Grabserial是Tim Bird用python写的一个抓取串口的工具,这个工具能够为收到的每一行信息添加上时间戳. 如果想对启动时间进行优化的话,使用这个工具就可以简单地从串口输出分析出耗时. ...
- VS 默认开发环境如何更改
话不多说,直接上图
- 系统吞吐量(TPS)、用户并发量、性能测试概念和公式
分享一个概念: http://www.ha97.com/5095.html
- nmea协议
NMEA协议 信息类型为: GPGSV:可见卫星信息 GPGLL:地理定位信息 GPRMC:推荐最小定位信息 GPVTG:地面速度信息 GPGGA:GPS定位信息 GPGSA:当前卫星信息 1. Gl ...
- Jexus 支持PHP的三种方式
Jexus不仅支持ASP.NET,而且能够通个自带的PHP-FCGI服务以及PHP-FPM等方式灵活支持PHP而且还可以以.NET(Phalanger)方式支持PHP. PHP-FCGI服务支持PHP ...
- .Net开发笔记(二十一) 反射在.net中的应用
反射概念在网上到处都有,但是讲到的具体的应用很少,一个重要的原因是现实中真的很少用得到它.引用msdn上对“反射”的解释: "通过 System.Reflection 命名空间中的类以及 S ...
- Javascript分号,加还是不加?
关于这个问题,网上已经有很多人讨论过了,我先说说自己对这个问题的回答:加!(但非必须) 有些人写代码,懒得加分号,除非是迫不得已才勉强放一个分号上去.如果你可以保证你写的代码不出现任何 bug,那当然 ...
- [.net 面向对象程序设计深入](6).NET MVC 6 —— 模型、视图、控制器、路由等的基本操作
[.net 面向对象程序设计深入](6).NET MVC 6 —— 模型.视图.控制器.路由等的基本操作 1. 使用Visual Studio 2015创建Web App (1)文件>新建> ...
- SQL Server 深入解析索引存储(上)
标签:SQL SERVER/MSSQL SERVER/数据库/DBA/索引体系结构/堆/聚集索引 概述 最近要分享一个课件就重新把这块知识整理了一遍出来,篇幅有点长,想要理解的透彻还是要上机实践. 聚 ...


