一、接口参数的获取:

1.参数通过Excel读取,并将结果写入Excel中

package org.fanqi.operateExcel;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap; import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class OperateExcelUtil { /*
* 读取Excel数据
*/
public List<Map<String, Object>> readExcel(String filename) { FileInputStream in;
XSSFWorkbook workbook = null;
try {
in = new FileInputStream(filename);
workbook = new XSSFWorkbook(in);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//获取第一张表
XSSFSheet sheet = workbook.getSheetAt();
List<Map<String, Object>> listCanshu = new ArrayList<Map<String, Object>>();
for(int i=;i<=sheet.getLastRowNum();i++){
Map<String, Object> map = new TreeMap<String, Object>();
String cell0 = sheet.getRow(i).getCell().getStringCellValue();
String cell1 = sheet.getRow(i).getCell().getStringCellValue();
//利用map保存参数
map.put("canshu1", cell0);
map.put("canshu2", cell1);
listCanshu.add(map);
}
return listCanshu;
} /*
* 测试结果写入原Excel
* result为测试结果(Pass or Failed)
*/
public void writeExcel(String filename,List<String> resultList,int resultRow) { XSSFWorkbook workbook = null;
FileInputStream in = null; try {
in = new FileInputStream(filename);
workbook = new XSSFWorkbook(in);
} catch (IOException e) {
e.printStackTrace();
}
XSSFSheet sheet = workbook.getSheetAt();
int rowSum = sheet.getLastRowNum();
XSSFCell cell = null;
for(int i=;i<=rowSum;i++){
cell = sheet.getRow(i).getCell(resultRow);
cell.setCellValue(resultList.get(i-));
}
try {
workbook.write(new FileOutputStream(filename));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} /*创建Excel文件
*
public void createExcel() { XSSFWorkbook x = new XSSFWorkbook();
XSSFFont font1 = x.createFont();
font1.setFontHeightInPoints((short) 15);
font1.setFontName("Pristina");
font1.setColor(IndexedColors.GREEN.index);
//font1.setColor(HSSFColor.YELLOW.index);
XSSFCellStyle style = x.createCellStyle();
style.setFont(font1);
XSSFSheet sheet = x.createSheet();
XSSFRow row0 = sheet.createRow(0);
row0.createCell(0).setCellValue("姓名");
row0.getCell(0).setCellStyle(style);
row0.createCell(1).setCellValue("性别");
row0.getCell(1).setCellStyle(style);
row0.createCell(2).setCellValue("年龄");
row0.getCell(2).setCellStyle(style);
row0.createCell(3).setCellValue("职位");
row0.getCell(3).setCellStyle(style);
row0.createCell(4).setCellValue("工作年限");
row0.getCell(4).setCellStyle(style);
User u = new User();
u.setName("郭大侠");
u.setSex("男");
u.setAge("30");
u.setJob("Java开发");
u.setExperience("2"); User u1 = new User();
u1.setName("陶大婶");
u1.setSex("男");
u1.setAge("28");
u1.setJob("Java开发");
u1.setExperience("3"); ArrayList<User> arrayList = new ArrayList<User>();
arrayList.add(u);
arrayList.add(u1);
for(int i=1; i<3; i++){
XSSFRow row = sheet.createRow(i);
row.createCell(0).setCellValue(arrayList.get(i-1).getName());
row.createCell(1).setCellValue(arrayList.get(i-1).getSex());
row.createCell(2).setCellValue(arrayList.get(i-1).getAge());
row.createCell(3).setCellValue(arrayList.get(i-1).getJob());
row.createCell(4).setCellValue(arrayList.get(i-1).getExperience());
} try {
x.write(new FileOutputStream("E:\\test.xlsx"));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
*/
public static void main(String[] args) {
OperateExcelUtil op = new OperateExcelUtil();
List<String> resultList = new ArrayList<String>();
resultList.add("Failed");
resultList.add("Pass");
op.writeExcel("E:\\test.xlsx", resultList, );
} }

可能需要加验签:sign(MD5)验签

/**
* MD5工具类(许总监)
*
*/
public class MD5Util { /**
* Md5.
*
* @param value
* the value
* @return the string
*/
public static String md5(String value) {
return DigestUtils.md5Hex(value);
} public static String md5New(String value) {
try {
MessageDigest md = MessageDigest.getInstance("md5");
byte[] e = md.digest(value.getBytes());
return toHex(e);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return value;
}
} /**
* To hex.
*
* @param bytes
* the bytes
* @return the string
*/
private static String toHex(byte bytes[]) {
StringBuilder hs = new StringBuilder();
String stmp = "";
for (int n = 0; n < bytes.length; n++) {
stmp = Integer.toHexString(bytes[n] & 0xff);
if (stmp.length() == 1)
hs.append("0").append(stmp);
else
hs.append(stmp);
}
return hs.toString();
}
}

二、请求报文的组装:

1.组装为JSON格式

package org.fanqi.operateJSONUtil;

import java.util.List;
import java.util.Map; import org.json.JSONArray;
import org.json.JSONObject; public class BuildJSON { /*
* 组装成JSON形式
*/
public JSONObject buildJSON(Map mapParameters) { JSONObject json = new JSONObject(mapParameters);
return json;
} /*
* 组装成JSON形式
*/
public JSONObject buildJSONByString(String str) {
return new JSONObject(str);
   } /*
* 组装成JSON形式
* @parameter list<map>
*/
public JSONArray buildsJSON(List<Map> listCanshu) { JSONArray jArray = new JSONArray();
for(int i=0;i<listCanshu.size();i++ ){
JSONObject json = new JSONObject(listCanshu.get(i));
jArray.put(json);
}
return jArray;
}
}

三、请求方法:方式get、post、Hessian

1.get请求方式

/*
* get请求方式
* @author:fanqi
*/
public static String httpGetMethod(String url,Map<Object,Object> map) { DefaultHttpClient httpClient = new DefaultHttpClient();
Object value;
Object urlInfo = "";
for(Object key : map.keySet()){
value = map.get(key);
urlInfo += key+"="+value+"&";
}
urlInfo = urlInfo.toString().substring(0, urlInfo.toString().length()-1);
url = url + "?" + urlInfo.toString();
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = null;
try {
httpResponse = httpClient.execute(httpGet);
StringBuilder sb = new StringBuilder();
InputStream inputStream = httpResponse.getEntity().getContent();
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream,"GBK"));
String temp = "";
while((temp = br.readLine()) != null){
sb.append(temp + "\n");
}
return sb.toString();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}

2.Post请求方式PostMethod(根据httpclient.jar包的版本不同,用到的方法有差异)

/*
* author:fanqi
*/
public String HttpClientPostMethod(String url,Map map) { DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
InputStream responseStream = null;
//参数形式为JSON格式
JSONObject parameter = new JSONObject(map);
try {
StringEntity entity = new StringEntity(parameter.toString());//解决中文乱码问题可以加参数"utf-8"
entity.setContentEncoding("UTF-8");
entity.setContentType("application/json");
httpPost.setEntity(entity);
HttpResponse httpResponse = httpClient.execute(httpPost);
if(httpResponse.getStatusLine().getStatusCode() == 200){
HttpEntity httpEntity = httpResponse.getEntity();
responseStream = httpEntity.getContent();
BufferedReader br = new BufferedReader(new InputStreamReader(responseStream));
StringBuilder sb = new StringBuilder();
String temp = "";
while((temp = br.readLine()) != null){
String str = new String(temp.getBytes(), "UTF-8");
sb.append(str + "\n");
}
return sb.toString();
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

/*
* author:xu zong jian
*/
public static String HttpClientPostMethod(String url,String sign,Map<String,String> map){
try {
log.info("HttpClientPostMethod -- url:{}",url);
HttpClient client = new HttpClient();
PostMethod postMethod = new PostMethod(url);
NameValuePair[] data = new NameValuePair[map.keySet().size()];
Iterator it = map.entrySet().iterator();
int i = 0;
while (it.hasNext()) {
Map.Entry entry = (Entry) it.next();
Object key = entry.getKey();
Object value = entry.getValue();
data[i] = new NameValuePair(key.toString(), value.toString());
i++;
}
postMethod.setRequestBody(data);
client.executeMethod(postMethod); log.info("HttpClientPostMethod -- status:{} ",postMethod.getStatusCode()); if (postMethod.getStatusCode() == HttpStatus.SC_OK) {
return postMethod.getResponseBodyAsString();
}
} catch (Exception e) {
log.error("HttpClientPostMethod error", e);
}
log.info("HttpClientPostMethod return null");
return null;
}

3.Hessian请求:

Hessian是基于Binary –RPC(二进制远程过程调用协议)进行通讯。

Hessian就是把Java对象转变成字节序列,然后通过Http传输到目标服务器上(主机),主机收到这个字节序列后,按照一定的协议标准进行反序列,提交给对应的服务处理。处理完成以后以同样的方式返回数据。

需要:Hessian.jar、 所测接口的API包、请求地址

/*
* url为请求地址,包含端口号
* Response为接口请求返回对象
* ServerClient为接口中定义的请求客户端类
*/
public Response executes(String url) { HessianProxyFactory hpf = new HessianProxyFactory();
ServerClient ServerClient = null;
try {
ServerClient = (ServerClient) hpf.create(ServerClient.class, url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
response = ServerClient.TxnSyncAudit(SyncAuditRequestBo);
return response; }

四、返回报文的解析:

1.返回JSON格式的报文

package org.fanqi.operateJSONUtil;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.json.JSONObject; public class AnalysisJSON {
/*
* 解析JSON报文,JSON中不嵌套JSON
*/
public Map analysisJSON1(String responseResult) {
//去掉{}
responseResult = responseResult.substring(1, responseResult.length()-1);
String[] strs = responseResult.split(",");
@SuppressWarnings("rawtypes")
Map<String, Object> map = new HashMap<String, Object>();
for(int i=0;i<strs.length;i++){
String[] str = strs[i].split(":");
map.put(str[0], str[1]);
}
return map;
}
/*
* 解析JSON报文,JSON中不嵌套JSON
*/
public Map analysisJSON2(String responseResult) { JSONObject json = new JSONObject(responseResult);
Iterator<String> it = json.keys();
HashMap<String, Object> map = new HashMap<String, Object>();
while(it.hasNext()){
String key = it.next();
Object value = json.getString(key);
map.put(key, value);
}
return map;
}
/*
* 解析JSON报文,JSON中含有JSON数组
*/
public Map analysisJSONs(String responseResult) { JSONObject json = new JSONObject(responseResult);
Iterator<String> it = json.keys();
HashMap<String, Object> map = new HashMap<String, Object>();
while(it.hasNext()){
String key = it.next();
Object value = json.getJSONArray(key);
map.put(key, value);
}
return map;
} }

Java版接口自动化--初稿的更多相关文章

  1. (转)Java + Excel 接口自动化

    最近项目比较悠闲,想找点事干,写了个 Excel 接口测试的 "框架" 以前用 python 写过一个,这次用 java, 应该说框架都不算,反正就是写了,能帮我解决问题就行. 当 ...

  2. Java + Excel 接口自动化

    最近项目比较悠闲,想找点事干,写了个 Excel 接口测试的 "框架" 以前用 python 写过一个,这次用 java, 应该说框架都不算,反正就是写了,能帮我解决问题就行. 当 ...

  3. APP自动化框架-ATX原理解析及JAVA版客户端

    作为网易开源的ATX APP自动化测试框架,对比现有的macaca自动化框架/Appium自动化框架,最大的特别就是在于可远程进行自动化测试 先给大家看一张我自己梳理的框架架构图 框架巧妙点: 1. ...

  4. java接口自动化(一) - 接口自动化测试整体认知 - 开山篇(超详解)

    简介 了解什么是接口和为什么要做接口测试.并且知道接口自动化测试应该学习哪些技术以及接口自动化测试的落地过程.其实这些基本上在python接口自动化的文章中已经详细的介绍过了,不清楚的可以过去看看.了 ...

  5. java、python及jmeter操作redis(接口自动化必备)

    redis是nosql数据库之一,其存储结构简单,提供高性能服务,所以在架构中是很常用的. 在做接口自动化测试过程中,有时也会涉及到redis,比如:发送短信验证码,我们做接口自动化测试,如何模拟发送 ...

  6. Java版阿里云通信短信发送API接口实例(新)

    阿里云通信(原名阿里大于)的短信服务(Short Message Service)是阿里云为用户提供的一种通信服务的能力,支持快速发送短信验证码.短信通知等. 完美支撑双11期间2亿用户,发送6亿短信 ...

  7. java接口自动化(三) - 手工接口测试到自动化框架设计之鸟枪换炮

    1.简介 上一篇宏哥介绍完了接口用例设计,那么这一章节,宏哥就趁热打铁介绍一下,接口测试工具.然后小伙伴们或者童鞋们就可以用接口测试工具按照设计好的测试用例开始执行用例进行接口手动测试了.关于手动测试 ...

  8. 想在java接口自动化里用上Python的requests?这样做就可以了

    相信现在很多的公司自动化测试重点都在接口层,因为接口测试更加接近代码底层,相对于UI自动化,接口自动化有着开发更快.覆盖更全.回报率高等优点. 接口自动化代码实现不难,本质上就是代码模拟发送请求,然后 ...

  9. Java + maven + httpclient + testng + poi实现接口自动化

    一.maven中引入httpclient.testng.poi依赖包 <project xmlns="http://maven.apache.org/POM/4.0.0" x ...

随机推荐

  1. NanoHttpd

    NanoHttpd是个很强大的开源库,仅仅用一个Java类,就实现了一个轻量级的 Web Server,可以非常方便地集成到Android应用中去,让你的App支持 HTTP GET, POST, P ...

  2. FPGA学习(第8节)-Verilog设计电路的时序要点及时序仿真

    一个电路能跑到多少M的时钟呢? 这和电路的设计有密切联系(组合逻辑的延时),我们知道电路器件都是由一定延迟的,所以信号的仿真很重要.如果延迟时间大于时钟,就会导致时序违例,出现逻辑错误. 项目要求30 ...

  3. 李洪强IOS经典面试题 33-计算有多少个岛屿

    李洪强IOS经典面试题 33-计算有多少个岛屿 问题 在一个地图中,找出一共有多少个岛屿. 我们用一个二维数组表示这个地图,地图中的 1 表示陆地,0 表示水域.一个岛屿是指由上下左右相连的陆地,并且 ...

  4. 5.14日学习内容1:jquery表单相关知识

    <script> $comment.animate({height:'+=50'},400);//在原来的基础上加50: $('.smaller').click(function(){ i ...

  5. JS的面向对象编程

    一.什么是"非构造函数"的继承? 比如,现在有一个对象,叫做"中国人". var Chinese = { nation:'中国' }; 还有一个对象,叫做&qu ...

  6. CCNA2.0笔记_WAN技术-专线

    WAN拓扑 Routers.CSU/DSU.WAN switches.Core routers.Modems 使用 数据链路层协议(二层) 来建立对端连接 WAN的三种连接方式 广域网链路类型: ·V ...

  7. 关于 web中 使用 java.net.URLEncoder.encode 要编码两次呢 , js的encodeURIComponent 同理

    因为在jsp中对中文进行了编码的时候用的是UTF-8的编码方式,而在servlet中调用request.getParameter();方法的时候使用服务器指定的原始编码格式(ISO-8859-1)自动 ...

  8. CSRF学习笔记之CSRF的防御【00x4】

    referer 验证 根据HTTP协议,在http请求头中包含一个referer的字段,这个字段记录了该http请求的原地址.通常情况下,执行转账操作的post请求www.bank.com/trans ...

  9. Win7下 OpenCV+Qt开发环境搭建

    1.所需软件工具: (1)OpenCV开发库,2.4.9版:包括源文件(source文件夹)和编译后的文件(build文件夹),但最好自己使用CMake又一次编译.否则easy出错. (2)Qt Cr ...

  10. JQuery 中的Show方法

    对css中 display:none的对象有用,对visibility:hidden的对象无效.