基于springboot的支持http接口+dubbo接口的TestNG自动化测试框架

一、背景

由于大多数公司都是使用Java作为后端开发语言,因此为了更好的与研发的框架对接、测试,掌握一套Java的自动化测试框架也逐渐成为测试人员的必修课。

同时随着现在微服务框架的流行,自动化测试框架除了支持传统的http接口之外,各系统微服务间的RPC接口的自动化测试需求也越来越旺盛。本篇文章主要介绍基于springboot的支持http接口+dubbo接口的TestNG自动化测试框架。

欢迎关注我的微信公众号:程序员杨叔,各类文章都会第一时间在上面发布,持续分享全栈测试知识干货,你的支持就是作者更新最大的动力~

二、框架结构

项目整体采用springboot框架,首先来看框架的整体结构图:

1. 数据驱动:

使用Json文件作为case的数据驱动,Json文件中包含了接口的基础信息、入参信息、期望结果信息:
TestDataJson文件:

{
  "dataItem": [
    {
      "id": "createActivity-1",
      "name": "创建活动",
      "desc": "创建活动",
      "isRun": "Y",
      "url":"https://testxxxx.com/add",
      "parameters": {
        "name": "自动化测试活动"
      },
      "expectData": {
        "code": "0000",
        "result": "成功",
      }
    }
  ]
}

2. 测试用例调度框架:

使用testNG框架作为测试用例调度框架,TestCase类:

public class serviceTest extends BaseCase {
	//测试Json文件读取效果
	@Test(dataProvider = "TaskServiceData" ,dataProviderClass = TaskServiceDataProvider.class)
	public void testData(ParamOB paramOB) throws TaskRemoteException {
	    System.out.println(paramOB.toString());
	    Reporter.log("获取Json文件入参为:"+paramOB.toString());
	}
}

BaseCase类:

import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;

@SpringBootTest
public class BaseCase extends AbstractTestNGSpringContextTests {
}

BaseCase类的作用:继承AbstractTestNGSpringContextTests, AbstractTestNGSpringContextTests这个类的作用:测试类只有继承了该类才拥有注入实例的能力。

同时BaseCase添加了@SpringBootTest注解,Spring将加载所有被管理的bean。不然测试类注入bean时会报空指针。

3. Http接口调用:

使用okhttp3工具包调用,OkHttpUtils类:

public String okHttpPost(HashMap requestBody, String url, String cookieValue){
        // 设置接口调用超时时间为60秒
        OkHttpClient client = new OkHttpClient().newBuilder().connectTimeout(60, TimeUnit.SECONDS).readTimeout(60,TimeUnit.SECONDS).build();
        // 可以单独把formbody拿出来
        FormBody.Builder formBuilder = new FormBody.Builder();
        // 将传进来包含的参数键值对的map集合遍历出来
        for (Object o : requestBody.keySet()) {
            // 将参数添加到frombody中
            formBuilder.add(o.toString(), String.valueOf(requestBody.get(o.toString())));
        }
        // 将frombody初始化到request对象中然后拿去请求
        RequestBody body = formBuilder.build();

        Request request = new Request.Builder()
                .url(url)
                .method("POST", body)
                .addHeader("Content-Type", "application/x-www-form-urlencoded")
                .addHeader("Cookie", cookieValue)
                .build();
        try {
            Response response = client.newCall(request).execute();
            String rescontent=response.body().string();
//            log.info("-------调用接口:"+url+" 返回---------"+rescontent);
            return rescontent;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

    public String okHttpGet(String url, String cookieValue){
        OkHttpClient client = new OkHttpClient().newBuilder().connectTimeout(60, TimeUnit.SECONDS).readTimeout(60,TimeUnit.SECONDS).build();
        Request request = new Request.Builder()
                .url(url)
                .addHeader("Content-Type", "application/x-www-form-urlencoded")
                .addHeader("Cookie", cookieValue)
                .build();
        try {
            Response response = client.newCall(request).execute();
            String rescontent=response.body().string();
            return rescontent;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }

4. Dubbo接口调用:

使用zookeeper+dubbo xml 配置方式调用dubbo接口,application-test.properties配置文件:

dubbo.registry.address=zookeeper://testzk1.xxxx.com:2181
dubbo.application.name=autotest

spring-dubbo-config.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>


    

    
    
    
    
    

TestCase类调用dubbo接口:

public class DubboServiceTest extends BaseCase {

    @Resource
    private TaskDubboService taskDubboService;

    @Test(dataProvider = "TaskServiceData" ,dataProviderClass = TaskServiceDataProvider.class,description = "测试dubbo接口")
    public void testDubbo(ParamOB paramOB) throws TaskRemoteException {
        // 1.获取Json数据中的用例ID、名称、入参、期望结果数据
        String param = paramOB.getParams();
        String expectData = paramOB.getExpectData();

        // 2.转换为对应的参数对象信息
        TaskContext taskContext = JSONObject.parseObject(param, TaskContext.class);
        Reporter.log("---------接口入参为----------"+ JSONObject.toJSONString(taskContext));

        // 3.测试环境正常调用接口
        List result = testDubboService.process(taskContext);
        String resultStr = JSONObject.toJSONString(result);
        Reporter.log("---------testDubboService接口返回为-----------"+resultStr);
        //去掉返回结果前后的中括号
        String finalResult = StringUtils.strip(resultStr,"[]");
        
        // 4. 转化格式然后调用check方法校验接口返回结果和Json文件中的期望结果数据是否匹配
        Map expectDataMap = JSONObject.parseObject(expectData, Map.class);
        CommonResultCheck.CommonJsonCheck(finalResult,expectDataMap);
    }
}

5. 测试报告:

使用ExtentReports报告框架输出测试报告,testng.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>


    
        
            
                
                    
                
            
        
    

    
        
        
        
    

三、项目目录结构文件内容介绍

1. 主目录src>main


src>main>java 用于存放一些封装公共方法类和基础类:

CommonResultCheck: 封装结果方法断言类
OkHttpUtil: 封装http请求方法类
DBUtil: 封装数据库操作方法类
AutotestdemoApplication: springboot启动类

src>main>resources 用于存放各类配置文件:

application-test.properties: 配置文件(zookeeper、数据库配置等)
spring-dubbo-config.xml:dubbo配置文件

2. 测试目录src>test


src>test>java>cases 用于存放测试用例:

systemName文件夹:系统名称文件夹
dataProvider文件夹: 系统的测试数据获取类
testcase文件夹:系统的测试用例类

src>test>java>utils 用于存放公共方法类:

DataProviderUtils: 转换测试数据为DataProvider格式类
ExtendTestNGReporterListenerNew: 测试报告优化类
ParamOB:测试数据对象类
LoginUtil:封装登录方法类
ReadJsonUtil:封装读取Json文件数据方法类

src>test>resources 用于存放测试数据、离线报告样式文件等:

css文件夹: ExtendReport报告的css文件
js文件夹: ExtendReport报告的js文件
font文件夹:ExtendReport报告的字体文件
jsonData文件夹:存放各系统接口Json测试数据
testSuites文件夹: 存放testNG的xml文件用于批量运行

3. 测试报告结果展示:

=================================
以上就是本次的全部内容,都看到这里了,如果对你有帮助,麻烦点个赞+收藏+关注,一键三连啦~

程序员杨叔:持续分享全栈测试知识干货。标签:自动化测试、性能测试、Java、Python、DevOps、CI/CD、小程序测试、测试工具、测试开发、测试框架/平台、测试管理…

展开阅读全文

页面更新:2024-03-18

标签:框架   接口   测试   干货   文件夹   测试报告   文件   报告   方法   数据

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top