Java版接口自动化--初稿
一、接口参数的获取:
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版接口自动化--初稿的更多相关文章
- (转)Java + Excel 接口自动化
最近项目比较悠闲,想找点事干,写了个 Excel 接口测试的 "框架" 以前用 python 写过一个,这次用 java, 应该说框架都不算,反正就是写了,能帮我解决问题就行. 当 ...
- Java + Excel 接口自动化
最近项目比较悠闲,想找点事干,写了个 Excel 接口测试的 "框架" 以前用 python 写过一个,这次用 java, 应该说框架都不算,反正就是写了,能帮我解决问题就行. 当 ...
- APP自动化框架-ATX原理解析及JAVA版客户端
作为网易开源的ATX APP自动化测试框架,对比现有的macaca自动化框架/Appium自动化框架,最大的特别就是在于可远程进行自动化测试 先给大家看一张我自己梳理的框架架构图 框架巧妙点: 1. ...
- java接口自动化(一) - 接口自动化测试整体认知 - 开山篇(超详解)
简介 了解什么是接口和为什么要做接口测试.并且知道接口自动化测试应该学习哪些技术以及接口自动化测试的落地过程.其实这些基本上在python接口自动化的文章中已经详细的介绍过了,不清楚的可以过去看看.了 ...
- java、python及jmeter操作redis(接口自动化必备)
redis是nosql数据库之一,其存储结构简单,提供高性能服务,所以在架构中是很常用的. 在做接口自动化测试过程中,有时也会涉及到redis,比如:发送短信验证码,我们做接口自动化测试,如何模拟发送 ...
- Java版阿里云通信短信发送API接口实例(新)
阿里云通信(原名阿里大于)的短信服务(Short Message Service)是阿里云为用户提供的一种通信服务的能力,支持快速发送短信验证码.短信通知等. 完美支撑双11期间2亿用户,发送6亿短信 ...
- java接口自动化(三) - 手工接口测试到自动化框架设计之鸟枪换炮
1.简介 上一篇宏哥介绍完了接口用例设计,那么这一章节,宏哥就趁热打铁介绍一下,接口测试工具.然后小伙伴们或者童鞋们就可以用接口测试工具按照设计好的测试用例开始执行用例进行接口手动测试了.关于手动测试 ...
- 想在java接口自动化里用上Python的requests?这样做就可以了
相信现在很多的公司自动化测试重点都在接口层,因为接口测试更加接近代码底层,相对于UI自动化,接口自动化有着开发更快.覆盖更全.回报率高等优点. 接口自动化代码实现不难,本质上就是代码模拟发送请求,然后 ...
- Java + maven + httpclient + testng + poi实现接口自动化
一.maven中引入httpclient.testng.poi依赖包 <project xmlns="http://maven.apache.org/POM/4.0.0" x ...
随机推荐
- php5 升级 php7 版本遇到的问题处理方法总结
为了能够更好的提升系统的安全性,把原来的进销存系统源码升级,遇到了一些问题在这儿总结一下: 1.mysql引擎在php7中不在支持会导致以下错误 Uncaught Error: Call to a m ...
- emqtt-benchmark发送指令
- Cocos2d-X中的ZORDER和Tag
ZORDER:是描写叙述渲染顺序的值,每一个CCNode都有ZORDER,默认是0 ZORDER越大,越后面绘制 假设ZORDER同样.那么看arrival顺序.先增加的节点先绘制 ZORDER仅仅在 ...
- centos(7.0) 上 crontab 计划任务
yum install vixie-cron yum install crontabs /bin/systemctl restart crond.service #启动服务 /bin/systemc ...
- Django Ajax提交数据请求
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- Garbage First(G1)垃圾收集器
1. 概述 G1(Garbage First)垃圾收集器是当今垃圾回收技术最前沿的成果之一.早在JDK7就已加入JVM的收集器大家庭中,成为HotSpot重点发展的垃圾回收技术.同优秀的CMS垃圾回收 ...
- 强大的Vivado IP工具——自定义IP的使用
首先,要指出,本文不描述任何IP的功能与使用. 在开发一个大型FPGA项目时,多人协作是必不可少的.这个时候,如何提交设计给负责集成的人,是项目开发中最关键的问题之一. 常用的一个方法是,提交网表 ...
- MapReduce编程实例2
MapReduce编程实例: MapReduce编程实例(一),详细介绍在集成环境中运行第一个MapReduce程序 WordCount及代码分析 MapReduce编程实例(二),计算学生平均成绩 ...
- linux学习笔记29---命令watch
watch是一个非常实用的命令,基本所有的Linux发行版都带有这个小工具,如同名字一样,watch可以帮你监测一个命令的运行结果,省得你一遍遍的手动运行.在Linux下,watch是周期性的执行下个 ...
- linux学习笔记16--命令find
find是linux系统中用的比较多的一个命令,而且功能强大,特别是对各种查找方式的不确定位置的文件的查找. Linux下find命令在目录结构中搜索文件,并执行指定的操作.Linux下find命令提 ...