1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 基于springboot的支持http接口+dubbo接口的TestNG自动化测试框架

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

时间:2020-04-20 02:23:48

相关推荐

基于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":"/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;@SpringBootTestpublic class BaseCase extends AbstractTestNGSpringContextTests {}

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

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

3. Http接口调用:

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

public String okHttpPost(HashMap<String,String> 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://:2181dubbo.application.name=autotest

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

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:dubbo="/schema/dubbo"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans.xsd/schema/dubbo /schema/dubbo/dubbo.xsd"><dubbo:application name="${dubbo.application.name}" /><!--zookeeper注册中心 --><dubbo:registry address="${dubbo.registry.address}" check="false"/><!--要测试的Dubbo服务 --><dubbo:reference id="testDubboService" interface="com.xxxx.dubbo.TestDubboService" timeout="1000" check="false" /></beans>

TestCase类调用dubbo接口:

public class DubboServiceTest extends BaseCase {@Resourceprivate 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<Info> result = testDubboService.process(taskContext);String resultStr = JSONObject.toJSONString(result);Reporter.log("---------testDubboService接口返回为-----------"+resultStr);//去掉返回结果前后的中括号String finalResult = StringUtils.strip(resultStr,"[]");// 4. 转化格式然后调用check方法校验接口返回结果和Json文件中的期望结果数据是否匹配Map<String, Object> expectDataMap = JSONObject.parseObject(expectData, Map.class);monJsonCheck(finalResult,expectDataMap);}}

5. 测试报告:

使用ExtentReports报告框架输出测试报告,关于ExtentReports使用,可以参看我的另一篇文章:

TestNG ExtentReports报告css/js样式加载问题解决方案

testng.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "/testng-1.0.dtd"><suite name="测试模板"><test name="测试入参获取"><classes><class name="com.autotestdemo.cases.task.api.testCase.TaskServiceTest"><methods><include name="testData"></include></methods></class></classes></test><listeners><!--<listener class-name="com.vimalselvam.testng.listener.ExtentTestNgFormatter"></listener>--><!--直接使用我们自己写的监听器,可以跳过翻墙的Js文件,不然报告一致转圈圈加载不出来--><listener class-name="com.autotestdemo.utils.ExtendTestNGIReporterListenerNew" /></listeners></suite>

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

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、小程序测试、测试工具、测试开发、测试框架/平台、测试管理…

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。