博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
http接口测试—自动化测试框架设计
阅读量:6734 次
发布时间:2019-06-25

本文共 9244 字,大约阅读时间需要 30 分钟。

hot3.png

一、测试需求描述

    对服务后台一系列的http接口功能测试。

    输入:根据接口描述构造不同的参数输入值(Json格式)

    输出:字符串(传入的方式+传入的字符串)

    http://localhost:8090/lctest/TestServer

 

 

二、程序设计

    1、Client程序设计

        读取Excel配置的测试用例数据

        发送参数Json格式给Server,接收Server的返回数据

        进行数据比对校验,返回测试结果,将数据插入到Excel中

    2、Server端程序设计

        接受Client的参数,进行解析

        发送返回数据给client

 

 

三、实现方法

    1、选用Java脚本来驱动测试

    2、采用Excel表格管理测试数据,包括用例的管理、测试数据录入、测试结果显示等等,这个需要封装一个Excel的类。

    3、调用http接口采用java自带的的API

    4、测试需要的将参数转化成字符串

    5、通过预期结果和实际结果的对比,将实际结果和对比结果写入Excel用例中,这里封装了一个类

    6、首次执行测试采用人工检查输出的是否正确,一旦正确写入Excel的期望结果中,如果发现错误手工修正为预期文件。

四、Excel表格设计

 

113325_AXlY_1391889.png

五、代码结构

113326_n9qu_1391889.png

六、实现代码

1、ExcelUtil.java

    

package client;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.util.ArrayList;import java.util.List;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFRichTextString;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.poifs.filesystem.POIFSFileSystem;public class ExcelUtil {		//读取Excel中数据	public static List read() throws Exception{		 HSSFWorkbook wb = new HSSFWorkbook();		 HSSFSheet s = wb.createSheet();		 HSSFRow row = s.createRow(0);		 HSSFCell cell = row.createCell((int)0,0);		 //------------从xls读出数据		 wb = new HSSFWorkbook(new FileInputStream("D:\\learn\\test.xls"));		 s = wb.getSheetAt(0);		 		 //获得EXCEL行数		 int rowNums=s.getLastRowNum();		 //获得Excell列数		 //int columnNum=r.getPhysicalNumberOfCells();		 		 List params=new ArrayList();		 for(int i=1;i<=rowNums;i++){			 HSSFRow r = s.getRow(i);			 cell=r.getCell(0);			 Param param= new Param();			 param.setNo(r.getCell(0).getStringCellValue());			 param.setName(r.getCell(1).getStringCellValue());			 param.setAge(r.getCell(2).getStringCellValue());			 param.setSex(r.getCell(3).getStringCellValue());			 param.setExpResu(r.getCell(4).getStringCellValue());//			 System.out.println(cell.getRichStringCellValue());			 params.add(param);		 }		 return params;	}	/**	  * 写入Excel,在任意坐标处写入数据。	  * String value:你要输入的内容	  * int x :行坐标,Excel从 0 算起	  * int y   :列坐标,Excel从 0 算起	  */		public static void writeCell(String filePath,int x,int y,String value) {			try {				// 创建Excel的工作书册 Workbook,对应到一个excel文档				HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(filePath));				HSSFSheet sheet=wb.getSheetAt(0);				HSSFRow row=sheet.getRow(x);				HSSFCell cell=row.getCell((short) y);				cell.setCellValue(value);				FileOutputStream os;				os = new FileOutputStream(filePath);				wb.write(os);				os.close();			} catch (Exception e) {				e.printStackTrace();			}		}}

 

2、JsonsUtil.java

    

package client;import java.text.ParseException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;/** * 使用json-lib构造和解析Json数据 */public class JsonsUtil {    /**将Bean转换成Map     * 将Map转换Json数据     */public static String BuildJson(Param param) throws JSONException {            	 Map
 map1 = new HashMap
();         map1.put("no", param.getNo());         map1.put("name", param.getName());         map1.put("age", param.getAge());         map1.put("sex", param.getSex());//         map1.put("expResu", param.getExpResu());      // JSON格式数据解析对象        JSONObject jo = new JSONObject();        // 将Map转换为JSONArray数据        JSONArray ja = new JSONArray();        ja.put(map1);//        System.out.println("JSONArray对象数据格式:"+ja.toString());        jo.put("map", ja);//        System.out.println("最终构造的JSON数据格式:"+jo.toString());        return jo.toString();    }    /**     * 解析Json数据     *     */public static JSONArray ParseJson(String jsonString) throws JSONException,            ParseException {        JSONObject jo = new JSONObject(jsonString);        JSONArray ja = jo.getJSONArray("map");//        System.out.println(ja.getJSONObject(0).getString("name"));        return ja;    }}

 

3、Param.java

package client;public class Param {		String no;//编号	String name;//姓名	String age;//年龄	String sex;//性别	String expResu;//期望结果	String actResu;//实际结果	String pass;//是否通过	String desc;//描述		public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}		public String getNo() {		return no;	}	public void setNo(String no) {		this.no = no;	}	public String getAge() {		return age;	}	public void setAge(String age) {		this.age = age;	}	public String getSex() {		return sex;	}	public void setSex(String sex) {		this.sex = sex;	}	public String getExpResu() {		return expResu;	}	public void setExpResu(String expResu) {		this.expResu = expResu;	}	public String getActResu() {		return actResu;	}	public void setActResu(String actResu) {		this.actResu = actResu;	}	public String getPass() {		return pass;	}	public void setPass(String pass) {		this.pass = pass;	}	public String getDesc() {		return desc;	}	public void setDesc(String desc) {		this.desc = desc;	}}

 

4、CompareRes.java

    

package client;public class CompareRes {	int actResuNo=5;//测试结果在第五例	int passNo=6;//对比结果在第六列		public  void compare(String filePath,Param param,String actResu){				ExcelUtil.writeCell(filePath,Integer.parseInt(param.getNo()),actResuNo,actResu);		if(param.getExpResu().trim().equals(actResu)){			ExcelUtil.writeCell(filePath,Integer.parseInt(param.getNo()),passNo,"Y");		}else{			ExcelUtil.writeCell(filePath,Integer.parseInt(param.getNo()),passNo,"N");		}	}}

 

5、TestClient .java

package client;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLConnection;import java.util.List;public class TestClient {		public static void main(String[]agrs){		TestClient a=new TestClient();		try {			a.client();		} catch (Exception e) {			// TODO Auto-generated catch block			e.printStackTrace();		}	}	public void client() throws Exception{				List params = ExcelUtil.read();		for(Param pa:params){			try {				// 接报文的地址				String filePath="D:\\learn\\test.xls";				String param= new JsonsUtil().BuildJson(pa);				URL serverUrl= new URL("http://localhost:8090/lctest/TestServer");				URLConnection uct= serverUrl.openConnection();				HttpURLConnection hutc=(HttpURLConnection)uct;					// 设置报文参数				hutc.setRequestMethod("POST");								// 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在 http正文内,因此需要设为true, 默认情况下是false; 				hutc.setDoOutput(true);								// 设置是否从httpUrlConnection读入,默认情况下是true				hutc.setDoInput(true);	//				hutc.setAllowUserInteraction(true);								// 开启流,写入数据data				OutputStream out=hutc.getOutputStream();								out.write(param.getBytes("UTF-8"));				out.flush();				out.close();								// 获取返回的数据					StringBuffer buffer=new StringBuffer();				BufferedReader reader = null;				InputStream ins=hutc.getInputStream();				reader = new BufferedReader(new InputStreamReader(ins,"UTF-8"));				String sg=reader.readLine();				if (sg!= null){			           buffer.append(sg);			     }			        System.out.println("接收返回值:" + buffer);			        new CompareRes().compare(filePath, pa, buffer.toString());											} catch (Exception e) {				// TODO Auto-generated catch block				e.printStackTrace();			}		}				}}

6、TestServer

public class TestServer extends HttpServlet {	private static final long serialVersionUID = 1L;	 private static JSONArray ja;           /**     * @see HttpServlet#HttpServlet()     */    public TestServer() {        super();        // TODO Auto-generated constructor stub    }	/**	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)	 */	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {		// TODO Auto-generated method stub		try {			this.excute(request, response);		} catch (Exception e) {			// TODO Auto-generated catch block			e.printStackTrace();		}	}	/**	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)	 */	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {		// TODO Auto-generated method stub		try {			this.excute(request, response);		} catch (Exception e) {			// TODO Auto-generated catch block			e.printStackTrace();		}	}		public void excute(HttpServletRequest request,HttpServletResponse response) throws Exception{		request.setCharacterEncoding("utf-8");		response.setCharacterEncoding("UTF-8");		response.setContentType("text/xml");		String method=request.getMethod();		String url=request.getRequestURI();		String param;	       // 获取收到的报文        BufferedReader reader = request.getReader();        String line = "";        line = reader.readLine();        ja=new JsonsUtil().ParseJson(line);				StringBuffer resultBuffer=new StringBuffer();		resultBuffer.append("访问方式"+method+"访问成功");		resultBuffer.append("接收到的数据:"+line);		PrintWriter out =response.getWriter();		out.println(resultBuffer.toString());		out.flush();		out.close();			}}

7、web.xml

  
    
TestServer
    
com.servlet.TestServer
  
  
    
TestServer
    
/lctest/TestServer
  

欢迎大家关注微信公众号与QQ群进行交流

个人网站地址:

转载于:https://my.oschina.net/hellotest/blog/499719

你可能感兴趣的文章
学习日记0829 IP协议 子网掩码 端口TCP协议的三次握手 四次挥手 套接字socket
查看>>
jQuery中json对象与json字符串互换
查看>>
微服务时代之2017年五军之战:Net PHP谁先死
查看>>
【下一代核心技术DevOps】:(五)微服务CI与Rancher持续集成
查看>>
C# Task的使用---Task的启动
查看>>
查询sql limit用法,望大神指教
查看>>
十四、MySQL UPDATE 查询
查看>>
CentOS系统通过PXE实现批量无人值守安装
查看>>
c++控制台程序实现定时器
查看>>
Qt快速入门学习笔记(画图篇)
查看>>
深入浅析nginx部署及简单优化
查看>>
C++定义指针数组
查看>>
Codeforces Round #446 (Div. 2) C. Pride【】
查看>>
洛谷 P3371 【模板】单源最短路径 【链式前向星+SPFA】
查看>>
hdu 1230 火星A+B
查看>>
vijos1144(小胖守皇宫)
查看>>
Tomcat中的Session小结
查看>>
获取windows磁盘的可用空间函数
查看>>
完全二叉树节点个数
查看>>
猜字符小游戏编写步骤(基础练习)
查看>>