一、接口参数的获取:

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. ASP.NET MVC 简单的分页思想与实现

    首先我们通过VS创建一个空的基于Razor视图引擎的ASP.NET MVC3 Web应用程序,命名为JohnConnor.Web 对创建过程或Razor不太了解的看官,请移步 ASP.NET MVC ...

  2. DataProtectionConfigurationProvider加密web.config文件

    web.config 文件中经常会包含一些敏感信息,最常见的就是数据库连接字符串了,为了防止该信息泄漏,最好是将相关内容加密. Aspnet_regiis.exe命令已经提供了加密配置文件的方法,系统 ...

  3. shared-service.ts

    shared-service.ts import { Observable } from 'rxjs/Observable'; import { Injectable } from '@angular ...

  4. [docker]搭建私有registry

    导入导出镜像比较麻烦,共享镜像占了工作中一大部分时间. 搭建了个本地registry, 不支持用户名密码验证的 和 支持用户名密码验证的两种. 参考: https://docs.docker.com/ ...

  5. 使用BleLib的轻松搞定Android低功耗蓝牙Ble 4.0开发具体解释

    转载请注明来源: http://blog.csdn.net/kjunchen/article/details/50909410 使用BleLib的轻松搞定Android低功耗蓝牙Ble 4.0开发具体 ...

  6. 简单说一下 servlet的生命周期?

    1.servlet有良好的生存期的定义,包括加载和实例化.初始化.处理请求以及服务结束.这个生存期由 javax.servlet.Servlet接口的  init,service和   destroy ...

  7. MySQL 行号(类似SQLServer的row_number())

    Select ID,(@rowNum:=@rowNum+1) as RowNo From a,(Select (@rowNum :=0) ) b

  8. MapReduce编程实例2

    MapReduce编程实例: MapReduce编程实例(一),详细介绍在集成环境中运行第一个MapReduce程序 WordCount及代码分析 MapReduce编程实例(二),计算学生平均成绩 ...

  9. 如何利用gdb调试程序?

    程序的大体意思就是各一个数组赋值,然后输出来程序已经写在了上面,下面我们就来看一下如何产生带有调试信息的编译文件,这里我们要使用gcc的-g参数,用于在编译文件中加入一些调试信息.发现加了-g和没有加 ...

  10. codeforces 825F F. String Compression dp+kmp找字符串的最小循环节

    /** 题目:F. String Compression 链接:http://codeforces.com/problemset/problem/825/F 题意:压缩字符串后求最小长度. 思路: d ...