Rest-Assured 是一套基于RestAssured的API自动化测试框架完美版
欢迎查阅Rest Assured(API接口自动化测试框架体系)
Rest Assured
现在,越来越多的 Web 应用转向了 RESTful 的架构,很多产品和应用暴露给用户的往往就是一组 REST API,这样有一个好处,用户可以根据需要,调用不同的 API,整合出自己的应用出来。从这个角度来讲,Web 开发的成本会越来越低,人们不必再维护自己的信息孤岛,而是使用 REST API 互联互通那么,作为 REST API 的提供者,如何确保 API 的稳定性与正确性呢?全面系统的测试是必不可少的。Java 程序员常常借助于 JUnit 来测试自己的 REST API,不,应该这样说,Java 程序员常常借助于 JUnit 来测试 REST API 的实现!从某种角度来说,这是一种“白盒测试”,Java 程序员清楚地知道正在测试的是哪个类、哪个方法,而不是从用户的角度出发,测试的是哪个 REST APIRest-Assured 是一套由 Java 实现的 REST API 测试框架,它是一个轻量级的 REST API 客户端,可以直接编写代码向服务器端发起 HTTP 请求,并验证返回结果;它的语法非常简洁,是一种专为测试 REST API 而设计的 DSL使用 Rest-Assured 测试 REST API,就和真正的用户使用 REST API 一样,只不过 Rest-Assured 让这一切变得自动化了
框架介绍:
Java + Rest Assured + Maven + TestNG + JDBC + Excel+ Git + +Ant + Jenkins** • 使用Java作为项目编程语言 • 使用Rest Assured作为API接口自动化项目底层服务驱动框架 • 使用Maven作为项目类型,方便管理架包 • 使用TestNG作为项目运行框架,方便执行测试用例,生成测试报告 • 使用JDBC作为数据库管理工具,方便连接数据库,执行SQL • 使用Xml作为用例管理工具,方便编写测试用例,维护测试脚本 • 使用Git作为仓库管理工具,方便管理项目代码 • 使用Ant作为Java的build打包工具,方便项目代码打包 • 使用Jenkins作为自动化持续集成平台,方便自动编译,自动打包,自动运行测试脚本,邮件发送测试报告
主要功能:
1. 实现了基于Rest Assured,HttpClient等常用接口请求方法的二次封装,包括(SendPost,SendGet,GetJsonResult)等,使用起来更简便2. 实现的基于Oracle,MySql等常用数据库SQL操作,包含(Insert into,Delete,Update,Query)和执行"存储过程"操作等3. 实现了基于Oracle,MySql等常用数据库数据获取功能,获取数据库字段值,写入到Excle文档所需参数中,然后进行接口请求参数调用4. 实现了基于Excel文档信息的读取和写入,包括(SheetName,ReadData,WriteData)等,基本内容符合测试用例编写步骤,编写测试用例脚本更简单5. 实现了基于Excel文档数据断言功能,预期结果和实际结果比对效验,检查点失败自动写入结果,可在测试报告中查看,一个检查点失败不影响后续用例执行6. 实现了基于ExtentReports,TestNG生成的测试报告二次美化功能,界面更美观,内容清晰
环境配置:
JDK1.7以上Eclipse/IDEARest AssuredMavenGitAntJenkins
部分网站需要翻墙,具体安装参考:https://ibm.com/developerworks/cn/java/j-lo-rest-assured
注意事项:
工程项目编码需要设置成UTF-8,否则会出现中文乱码情况
一、创建测试对象处理程序类,例如【Login_Handler.java】
package com.jmoney.luckeylink.handler;import java.io.IOException;import java.util.List;import java.util.Map;import org.apache.log4j.Logger;import org.testng.Assert;import org.testng.Reporter;import com.jmoney.luckeylink.controller.Login_Controller;import com.jmoney.luckeylink.util.ExcelUtil;import com.jmoney.luckeylink.util.MobileApiToolsUtil;import com.jmoney.luckeylink.util.StringUtil;import com.jmoney.luckeylink.util.DecodeUnicodeUtil;public class Login_Handler { private static Logger logger = Logger.getLogger(Login_Handler.class); static int TITLE_LINE_INDEX=5;//接口用例标题所在行 static int ArgName_Number=2;//接口所需参数的个数 static int Act_Number=8;//接口需要效验参数的个数 static String Param = null;//接口参数 static String msg_Act = null; /** *
获取Excel数据 * @author 刘智King * @date 2018年4月20日 下午6:01:04 */ public static void GetExcelInstance() { logger.info(Login_Handler.class); System.out.println(Login_Handler.class); ExcelUtil.getInstance().setFilePath("src/test/java/TestCasexls/JMoney.Luckeylink.Api.xlsm"); ExcelUtil.getInstance().setSheetName("Login"); } /** *
初始化Excel数据 * @author 刘智King * @date 2018年4月20日 下午6:01:04 */ public static void InitializeExcelData() { GetExcelInstance(); int color = 4; try { logger.info("初始化: " + ExcelUtil.getInstance().getFilePath() + ", " + ExcelUtil.getInstance().getSheetName()); System.out.println("开始初始化: " + ExcelUtil.getInstance().getFilePath() + ", " + ExcelUtil.getInstance().getSheetName()); MobileApiToolsUtil.initializeData(TITLE_LINE_INDEX, ""+ExcelUtil.getInstance().readExcelCell(TITLE_LINE_INDEX, 3)+"", "", color); System.out.println("正在初始化:"+ExcelUtil.getInstance().readExcelCell(TITLE_LINE_INDEX, 3)+"列"); if(Act_Number<1){ for(int i =1;i1){ for(int i =1;i根据数据库版本和用例ID,从数据库获取信息并写入到Excel预期值 * @author 刘智King * @date 2018年4月20日 下午6:01:04 * @param DataVersion * @param ID */ public static void WriteExcelExpected(String DataVersion,int ID){ List
二、创建测试对象脚本用例类,例如【Login.java】
package TestCases;import org.testng.annotations.AfterTest;import org.testng.annotations.BeforeTest;import org.testng.annotations.Test;import com.jmoney.luckeylink.handler.Login_Handler;public class Login { @BeforeTest private void Stup() throws Exception{ Login_Handler.InitializeExcelData(); } @Test public void Case1() throws Exception{ Login_Handler.Login(1); } @Test public void Case2() throws Exception{ Login_Handler.Login(2); } @Test public void Case3() throws Exception{ Login_Handler.Login(3); } @Test public void Case4() throws Exception{ Login_Handler.Login(4); } @Test public void Case5() throws Exception{ Login_Handler.Login(5); } @Test public void Case6() throws Exception{ Login_Handler.Login(6); } @Test public void Case7() throws Exception{ Login_Handler.Login(7); } @AfterTest public void TearDown() throws Exception{ Login_Handler.GetCaseInfo(1); Login_Handler.GetCaseInfo(2); Login_Handler.GetCaseInfo(3); Login_Handler.GetCaseInfo(4); Login_Handler.GetCaseInfo(5); Login_Handler.GetCaseInfo(6); Login_Handler.GetCaseInfo(7); }}
以上只是单个案例,相关的接口参数定义根据具体接口文档进行设置,是不是很简单,和写测试用例基本一致
具体脚本编方法请参考: https://pan.baidu.com/s/1fBMX2ET7oHzZW-hsvCwk-A官方使用指南请参考: https://testerhome.com/topics/7060
三、Rest Assured测试用例文档配置:
public static void GetExcelInstance() { logger.info(Login_Handler.class); System.out.println(Login_Handler.class); ExcelUtil.getInstance().setFilePath("src/test/java/TestCasexls/JMoney.Luckeylink.Api.xlsm"); ExcelUtil.getInstance().setSheetName("Login");}
测试执行时需要在指定对应Excel测试用例文档路径和Sheet工作表名,当前为JMoney.Luckeylink.Api.xlsm,和Login工作表
四、执行用例:
五、测试报告:
测试报告分为两种,一种是TestNG自带的TestngReport测试报告,另外一种则是调用ExtentReports生成的报告,第二种更加美观
TestngReport
ExtentReports
第二种测种试报告,需要翻墙才能正常显示,否则页面显示乱码,因为是国外的东西或者在C:\Windows\System32\drivers\etc host文件末尾添加151.139.237.11 cdn.rawgit.com
六、Jnekins持续集成:
搭建Jenkins环境,具体请参考: https://blog.csdn-/wuxuehong0306/article/details/50016547配置Jenkins自动化持续集成项目,即可实现远程服务器自动(构建,编译,打包)运行脚本,发送邮件测试报告等
七、感谢
如果您觉得这个框架不错,您可以捐赠下我,让我有理由继续下去。
非常感谢您花费时间阅读,祝您在这里记录、阅读、分享愉快! 欢迎留言评论,有问题也可以联系我或者加群交流....
作者:@刘智King QQ:1306086303 Email:hagyao520@163.com
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
暂时没有评论,来抢沙发吧~