最是人间留不住,朱颜辞镜花辞树。这篇文章主要讲述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.国家气象局天气预报接口例:北京市天气
- 接口的址: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);
}
}
文章图片
工程下载地址:http://pan.baidu.com/s/1mhyTNny 密码:11ft
3.1.4 执行测试用例
文章图片
【APP接口自动化测试JAVA+TestNG之HTTP接口测试实例】
文章图片
推荐阅读
- Android开发中常用的ListView列表的优化方式ViewHolder
- 第7章 Android中访问网络资源
- Mapper 动态代理方式
- android ——悬浮按钮及可交互提示
- Android——谷歌官方下拉刷新控件SwipeRefreshLayout(转)
- android ——滑动菜单
- WPF 10天修炼 - Application全局应用程序类
- JavaSE8基础 StringBuffer append 向缓冲区中变量的末尾追加字符串与缓冲区容量的自动扩充
- 安卓22学分绩点系统(app+server)