美文网首页
(四)java+okhttp+testng+poi做接口自动化测

(四)java+okhttp+testng+poi做接口自动化测

作者: 阿阿潇 | 来源:发表于2018-12-29 17:24 被阅读0次

目前的项目结构

image.png

1.准备工作

在pom.xml中添加一下

        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>3.11.0</version>
        </dependency>
        <!-- POI EXCEL 文件读写 -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-excelant</artifactId>
            <version>3.14</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.54</version>
        </dependency>

2.还是先来看用例

元素:接口url
动作:请求方式支持get、post
参数:是以json保存,现主要由两个节点param节点(请求参数)、headers(请求头参数)
期望:请求期望的反参


image.png

3.然后然后根据用例封装model数据(也是先读取excel文件中的数据,在依次封装model)

4.最最最最重要的okhttp请求工具类

get请求
    public String get(String url, String param) {
        JSONObject paramHeaderJO = JSONObject.parseObject(param);
        JSONObject paramJO = (JSONObject) paramHeaderJO.get("param");
        JSONObject headerJO = (JSONObject) paramHeaderJO.get("headers");
        String mergeUrl = MergeParam(url, paramJO);
        okhttp3.Request.Builder requestBuilder = new Request.Builder().url(mergeUrl);
        
        //遍历添加header
        if (null != headerJO) {
            for (String key : headerJO.keySet()) {
                requestBuilder.addHeader(key, headerJO.getString(key));
            }
        }

        Request request = requestBuilder.build();
        Call call = okHttpClient.newCall(request);
        Response response;
        // request.
        try {
            response = call.execute();
            // System.out.println(response.code());
            return response.body().string();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return "异常:请求错误发生";
        }
    //拼装geturl
    public String MergeParam(String url, JSONObject param) {
        // JSONObject paramJO = JSONObject.parseObject(param);
        StringBuffer stringBuffer = new StringBuffer(url);
        stringBuffer.append("?");
        boolean isFrist = true;
        for (String key : param.keySet()) {
            if (!isFrist) {
                stringBuffer.append("&");
            } else {
                isFrist = false;
            }
            stringBuffer.append(key);
            stringBuffer.append("=");
            stringBuffer.append(param.get(key));
        }
        url = stringBuffer.toString();
        return url;
    }
post请求
public String post(String url, String param) {
        JSONObject paramHeaderJO = JSONObject.parseObject(param);
        JSONObject paramJO = (JSONObject) paramHeaderJO.get("param");
        JSONObject headerJO = (JSONObject) paramHeaderJO.get("headers");
        Builder formBuilder = new FormBody.Builder();
        //遍历添加请求参数
        if (null != paramJO) {
            for (String key : paramJO.keySet()) {
                formBuilder.add(key, paramJO.getString(key));
            }
        }

        FormBody formBody = formBuilder.build();
        // RequestBody body = RequestBody.create(type, param);
        // System.out.println(param);

        okhttp3.Request.Builder requestBuilder = new Request.Builder().url(url).post(formBody);
        //遍历添加header参数
        if (null != headerJO) {
            for (String key : headerJO.keySet()) {
                requestBuilder.addHeader(key, headerJO.getString(key));
            }
        }
        // Headers headers = new Headers(null);
        Request request = requestBuilder.build();

        Response response;
        Call call = okHttpClient.newCall(request);
        try {
            response = call.execute();
            response.headers();
            System.out.println(response.headers());
            return response.body().string();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.err.println();
            return "请求错误aaa";
        }

    }

5.然后是APITest(基本与之前的webtest差不多,只是修改了执行的方法)

package com.testng.testng;

import org.testng.annotations.Test;

import TestAutomationZ.apiCase.APICaseModel;
import TestAutomationZ.apiCase.APIStepModel;
import TestAutomationZ.okHttp.OkHttpUtil;

import static org.testng.Assert.assertEquals;

import java.util.List;

import org.testng.annotations.DataProvider;

public class APITest {
    List<APICaseModel> caseList;
    OkHttpUtil okHttpUtil;

    public APITest(List<APICaseModel> caseLiset) {
        // TODO Auto-generated constructor stub
        okHttpUtil = new OkHttpUtil();
        this.caseList = caseLiset;
    }
    @Test(dataProvider = "dp")
    public void f(APICaseModel caseModel) {
        doCase(caseModel);
    }

    // 根据case模型执行用例
    public void doCase(APICaseModel caseModel) {
        for (int i = 0; i < caseModel.getStepModels().size(); i++) {
            APIStepModel apiStepModel = caseModel.getStepModels().get(i);
            if (apiStepModel.getAction().equals("get")) {
                //执行get请求
                String actual = okHttpUtil.get(apiStepModel.getUrl(), apiStepModel.getValue());
                assertEquals(actual, apiStepModel.getExpect());
            } else if (apiStepModel.getAction().equals("post")) {
                //执行post请求
                String actual = okHttpUtil.post(apiStepModel.getUrl(), apiStepModel.getValue());
                assertEquals(actual, apiStepModel.getExpect());
            } else {
                System.err.println("haimeixie");
            }

        }
    }

    @DataProvider
    public Object[] dp() {
//      caseList = APICaseModel.getCaseList("caseexcel/apicase/APIExample.xlsx");
        // 获取用例
        int size = caseList.size();
        Object[] objects = new Object[size];
        for (int i = 0; i < objects.length; i++) {
            objects[i] = caseList.get(i);
        }
        return objects;
    }
}

6.在Test工厂类中添加相应的构建APItest的动作

package com.testng.testng;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

//import org.testng.TestNG;
import org.testng.annotations.Factory;

import TestAutomationZ.Case.CaseModel;
import TestAutomationZ.apiCase.APICaseModel;

public class TestFactory {
    @Factory
    public Object[] createInstances() {
        List<String> webPathList = getWebCasePathList();
        List<String> APIPathList = getAPICasePathList();
        int resultSize = webPathList.size() + APIPathList.size();
        Object[] result = new Object[resultSize];
        //生成webTest
        for (int i = 0; i < webPathList.size(); i++) {
            // CaseModel.getCaseList(pathList.get(i), CaseType.publicCase);
            result[i] = new WebTest(CaseModel.getCaseList(webPathList.get(i)));
        }
        //生成APITest
        for (int i = 0, j = webPathList.size(); j < result.length; i++, j++) {
            result[j] = new APITest(APICaseModel.getCaseList(APIPathList.get(i)));
        }
        return result;
    }

    // 获取web测试用例
    static public ArrayList<String> getWebCasePathList() {
        ArrayList<String> files = new ArrayList<String>();
        File file = new File("caseexcel/webcase/");
        File[] tempList = file.listFiles();
        if (tempList.length > 0) {
            for (int i = 0; i < tempList.length; i++) {
                if (tempList[i].isFile()) {
                    System.out.println("文     件:" + tempList[i]);
                    files.add(tempList[i].toString());
                }
                if (tempList[i].isDirectory()) {
                    // System.out.println("文件夹:" + tempList[i]);
                }
            }
        } else {
            throw new NullPointerException("没有找到case");
        }

        return files;
    }

    // 获取接口测试用例
    static public ArrayList<String> getAPICasePathList() {
        ArrayList<String> files = new ArrayList<String>();
        File file = new File("caseexcel/apicase/");
        File[] tempList = file.listFiles();
        if (tempList.length > 0) {
            for (int i = 0; i < tempList.length; i++) {
                if (tempList[i].isFile()) {
                    System.out.println("文     件:" + tempList[i]);
                    files.add(tempList[i].toString());
                }
                if (tempList[i].isDirectory()) {
                    // System.out.println("文件夹:" + tempList[i]);
                }
            }
        } else {
            throw new NullPointerException("没有找到case");
        }

        return files;
    }
}

最后github地址:https://github.com/ahaMrz/test

相关文章

网友评论

      本文标题:(四)java+okhttp+testng+poi做接口自动化测

      本文链接:https://www.haomeiwen.com/subject/ffdplqtx.html