多测师是一家拥有先进的教学理念,强大的师资团队,业内好评甚多的接口自动化测试培训机构!

17727591462

联系电话

您现在所在位置:接口自动化测试培训 > 新闻资讯

http接口自动化测试框架设计

更新时间:2021-10-28 09:48:02 作者:admin 浏览:192

http接口自动化测试框架设计

  一、测试需求描述

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

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

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

  二、程序设计

  1、Client程序设计

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

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

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

  2、Server端程序设计

  接受Client的参数,进行解析

  发送返回数据给client

http接口自动化测试框架设计

  三、实现方法

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

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

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

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

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

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

  四、Excel表格设计

  五、代码结构

  六、实现代码

  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 est.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 est.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

  以上内容为大家介绍了http接口自动化测试框架设计,希望对大家有所帮助,如果想要了解更多接口自动化测试相关知识,请关注多测师。https://www.aichudan.com/

联系电话

17727591462

返回顶部