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 ...
随机推荐
- sql server删除数据时如何进行级联删除
可以在创建外键约束时直接设置级联删除
- 关于wcf,webservice,webapi或者其他服务或者接口有什么区别 WCF、WebAPI、WebService之间的区别 【转载】HTTP和SOAP完全就是两个不同的协议 WebService学习总结(一)——WebService的相关概念
wcf,webservice采用的是rpc协议,这个协议很复杂,所以每次要传递.要校验的内容也很复杂,别看我们用的很简单,但实际是frame帮我们做掉了rpc生成.解析的事情webapi遵循是rest ...
- .Net程序员面试 每个人都应知道篇 (回答Scott Hanselman的问题)
昨天回答了Scott Hanselman在他清单上关于C#那部分的题目,.Net 程序员面试 C# 语言篇 (回答Scott Hanselman的问题),今天接着回答他在清单上列出的"每个写 ...
- II7.5配置IIS支持2G文件下载
IIS默认支持下载在20M让IIS7.5支持大文件下载,有两个地方 1.打IIS管理器->asp->点限制属性+->设置最大请求实体主体限制为2147483648 2.打开路径C:\ ...
- Verilog语言:还真的是人格分裂的语言
人气腹语术师天愿在现场披露了被人偶搭档夺取灵魂的腹语术师将妻子杀害的表演节目.天愿真的陷入了多重人格,命令自己杀害妻子和子的人偶的人格出现了.为了不(让自己)杀害和弟子登川有外遇的妻子,天愿提出委托想 ...
- Java Web框架play framework的下载与环境变量配置
Web项目的开发有着众多的框架,近期刚刚接触了play. 对于一个Java开发者来说,play是一个不可多得的好框架.以下我简介下怎样下载play .以及play的环境变量配置方法. (1)登录pla ...
- flink checkpoint 源码分析 (二)
转发请注明原创地址http://www.cnblogs.com/dongxiao-yang/p/8260370.html flink checkpoint 源码分析 (一)一文主要讲述了在JobMan ...
- Java对象的浅克隆和深克隆
为什么需要克隆 在实际编程过程中,我们常常要遇到这种情况:有一个对象A,在某一时刻A中已经包含了一些有效值,此时可能会需要一个和A完全相同新对象B, 并且此后对B任何改动都不会影响到A中的值 ...
- 无需序列号安装Photoshop CS6
在百度下载Photoshop CS6破解版,解压后,如图所示 进入Photoshop_CS6.3510481888\Adobe CS6目录,双击Set-up.exe开始安装 点击接受协议,进入 ...
- 完整的jdbc查询结果集编码
public static ArrayList<HashMap<String,Object>> query(Connection conn,String sql, Object ...