TestNG+ReportNG+IDEA+Git+Jenkins+surefire持续集成数据驱动dubbo接口测试
一、pom.xml增加testng相关配置
<!--添加插件 关联testNg.xml-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.6</version>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
<suiteXmlFiles>
<file>src/main/java/com/tree/autotest/testng.xml</file> <!--testsuite.xml文件类路径-->
</suiteXmlFiles>
<!--<workingDirectory>target/</workingDirectory>-->
<properties>
<property>
<name>usedefaultlisteners</name>
<value>false</value>
</property>
<property>
<name>listener</name>
<value>org.uncommons.reportng.HTMLReporter, org.uncommons.reportng.JUnitXMLReporter</value>
</property>
</properties>
<workingDirectory>target/</workingDirectory>
<forkMode>always</forkMode>
</configuration>
</plugin>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.4</version>
</dependency> <!-- 依赖reportNg 关联testNg-->
<dependency>
<groupId>org.uncommons</groupId>
<artifactId>reportng</artifactId>
<version>1.1.4</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
</exclusion>
</exclusions>
</dependency> 二、脚本开发
1、编写一个基础类作为测试类父类。
@ContextConfiguration(locations = {"classpath:/spring-context.xml"})
@Configuration
public class BaseTestNGTest extends AbstractTestNGSpringContextTests {
}
2、编写测试类,继承父类
public class TestGetBankIdsOfNeedMoreBill extends BaseTestNGTest {
@Autowired
private IUserBankSummaryService iUserBankSummaryService;
private boolean handleOk;
private String insertSql;
private static String excel;
private static Map allCases;
private Integer testuser;
private TestCase testcase;
@BeforeMethod
public void setUp() throws SQLException {
//获取excel用例列表
handleOk = true;
testcase = CommonUtil_2.getTestCaseBean(allCases, "case1", "case1-1");
testuser = Integer.valueOf(testcase.param1);
//获取SQL
insertSql = testcase.stepSql;
//删除,添加数据
handleOk &= deleteData(testuser);
handleOk &= ManagedSqlUtil.insertBySql(insertSql, DBIdConstant.MySql_Basisdata_ID);
System.out.println("----->> @BeforeClass is finished");
}
@DataProvider(name = "testData")
private static Object[][] dataprovide()throws IOException {
excel="src/main/resources/case/IUserBankSummaryService/TestGetBankIdsOfNeedMoreBill.xlsx";
allCases = CommonUtil_2.getAllCases(excel);
System.out.println("dataprovide方法执行");
Object[][] testData = ExcelHandle.readXlsx(excel, "用例列表");
return testData;
}
@Test(dataProvider="testData")
public void test_case_1(HashMap<String, String> map) throws Exception {
testuser =Integer.valueOf(map.get("userid"));
//实际值:
List<Integer> actual_list = iUserBankSummaryService.getBankIdsOfNeedMoreBill(testuser);
//预期值:
List<Integer> excepted_list = get_excepted_list(testuser);
//验证:
System.out.println("userId值:"+testuser);
System.out.println("actual_list值:"+actual_list.toString());
System.out.println("excepted_list值:"+excepted_list.toString());
System.out.println("size值:"+excepted_list.size());
if (excepted_list.size()==0){
Assert.assertEquals(actual_list.toString(), "[]");
}else {
Assert.assertEquals(actual_list.toString(), excepted_list.toString());
}
System.out.println("----->> @Test is finished");
}
@AfterMethod
public void tearDown() {
testuser = Integer.valueOf(testcase.param1);
handleOk &= deleteData(testuser);
System.out.println("----->> AfterClass is finished");
}
//定义数据清理
public boolean deleteData(Integer userid) {
String deleteSql = "delete from t_user_bank_summary where userid = "+userid+";";
handleOk &= ManagedSqlUtil.deleteBySql(deleteSql, DBIdConstant.MySql_Basisdata_ID);
return handleOk;
}
//预期值
public List<Integer> get_excepted_list(Integer userid)throws SQLException{
String searchSql = " SELECT a.BankId " +
" FROM t_user_bank_summary a, (SELECT MAX(Id) mid " +
" FROM t_user_bank_summary " +
" WHERE UserId ="+userid+" " +
" GROUP BY BankId) t " +
" WHERE a.id = t.mid AND EffectiveBillCount12M<11";
ResultSet rs = ManagedSqlUtil.selectBySql(searchSql,DBIdConstant.MySql_Basisdata_ID);
List<Integer> list = new ArrayList<Integer>();
while (rs.next()){
list.add(rs.getInt(1));
}
return list;
}
3、新建testsuite文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite thread-count="1" name="Suite" parallel="tests">
<test name="demo">
<packages>
<package name="com.tree.autotest.testcase.IUserCustomerService"/>
<package name="com.tree.autotest.testcase.IVariableService"/>
<package name="com.tree.autotest.testcase.IUserBillService"/>
<package name="com.tree.autotest.testcase.IInsuranceBillService"/>
<package name="com.tree.autotest.testcase.IUserBankService"/>
<package name="com.tree.autotest.testcase.IUserBankSummaryService"/>
<package name="com.tree.autotest.testcase.ICustomerBackService"/>
</packages>
<classes>
<class name="com.tree.autotest.testcase.IUserBankService.TestSelectListByUserId"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite --> 4、直接执行testng.xml文件,运行成功的话,使用jenkins集成 三、Jenkins配置集成项目,使用HTML插件和TestNG插件解析报告
1、从git上得到测试项目文件

2、每天10点,15点构建测试

3、构建shell

4、HTML和TestNG report解析报告

5、构建完成后,点击HTML Report,展示结果


TestNG+ReportNG+IDEA+Git+Jenkins+surefire持续集成数据驱动dubbo接口测试的更多相关文章
- [python]Robotframework+Git+jenkins实现持续集成并生成测试报告发送邮件
1.环境需求 &robotframework(不写搭建,自行百度) & git(不写安装,自行百度) &jenkins 2.安装jenkins 官网下载最新版本https:// ...
- Jenkins+maven+git+sonar 系统持续集成&代码单測管理
Jenkins+maven+git+sonar 系统持续集成&代码单測管理 Jenkins的安装 Jenkins是基于Java开发的一种持续集成工具,用于监控持续反复的工作.功能包含: 1.持 ...
- 【iOS】Jenkins Gitlab持续集成打包平台搭建
Jenkins Gitlab持续集成打包平台搭建 SkySeraph July. 18th 2016 Email:skyseraph00@163.com 更多精彩请直接访问SkySeraph个人站点: ...
- 使用jenkins构建持续集成平台
jenkins + Maven + svn/git + tomcat 的持续集成平台 项目管理流程: 需求分析----原型设计----开发代码----提交测试-----内部测试-----确认上线( ...
- RF+Jenkins构建持续集成
引入RF是为了能够快速的开展自动化验收测试,Jenkins而一种持续集成工具,用于监控持续重复的工作,持续的软件版本发布/测试项目,而通过RF+Jenkins可以有利的对RF构建的接口项目进行持续集成 ...
- jenkins+github持续集成中的坑
1.前言 刚开始开发自己的独立博客的时候,每次发布都要手动打包,上传服务器,杀tomcat进程,重启,来回这么重复性工作,很快就有点不耐烦了.如果能自动化的东西,就绝不要手动了,所以自己搭建了个持续集 ...
- Jenkins的持续集成
持续集成:不需要人工干预,持久化.重复的运行一个任务.将代码自动的更新到最新,然后自动运行. 新建项目之前要再Jenkins的全局工具配置里面把git的路径设置好.[全局工具配置]-->[Git ...
- jenkins+docker持续集成实验
在互联网时代,对于每一家公司,软件开发和发布的重要性不言而喻,目前已经形成一套标准的流程,最重要的组成部分就是持续集成(CI)及持续部署.交付(CD).本文基于Jenkins+Docker+Git实现 ...
- docker+jenkins实现持续集成
持续集成的概念我就不多说了,网上一大堆,今日主要讲讲怎么通过docker 和jenkins实现项目的持续集成.看着简单,网上完整教程很少,本人摸索很久才搞定!!! 一.首先安装docker.安装过程可 ...
随机推荐
- Mysql 索引原理(转自:张洋)
摘要 本文以MySQL数据库为 研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据 库支持多种索引类型,如 ...
- OpenCV3.1.0+VS2015开发环境配置
摘要: 由于最近AR(增强现实)这个概念非常火爆,各种基于AR的应用及游戏逐渐面向大众,而在AR中最重要的两个技术就是跟踪识别和增强渲染,其中跟踪识别是通过OpenCV这个开源的计算机视觉库来实现的, ...
- 50 days before NOI2017
2017.5.31 今天开了这个博客,打算每天来写点东西,嗯...毕竟要NOI了嘛... 第一天跑到常州里集训,打开题目一看湖南集训题... T1刷一下写完,然后交了然后发现错了...赶紧改过来,大概 ...
- Dinic算法学习&&HDU2063
http://www.cnblogs.com/SYCstudio/p/7260613.html 看这篇博文懂了一点,做题再体会体会吧 找了好久都没找到一个好用的模板…… 我也是佛了..最后决定用峰神的 ...
- [C++对象模型][8]多重继承与虚函数表
转载: [C++对象模型][8]多重继承与虚函数表 一 多重继承 1) 代码: Code #include <iostream> using namespace std; class B1 ...
- SPI总线介绍
1. 简介 SPI, Serial Peripheral Interface, 串行外设接口, 是一种高速的.全双工.同步的通信总线SPI在芯片的管脚上只占用四根线 SPI接口主要用于MCU与各种外围 ...
- flask框架下的jinja2模板引擎(3)(模板继承与可以在模板使用的变量、方法)
flask 框架下的jinja2模块引擎(1):https://www.cnblogs.com/chichung/p/9774556.html flask 框架下的jinja2模块引擎(2):http ...
- js面试总结
<div id="app"> <button onClick="app()">点击1</button> <button ...
- eclipse CreateProcess error=87
http://blog.csdn.net/mylove709834360/article/details/9253697 完美解决~
- poj2104(划分树模板)
poj2104 题意 给出一个序列,每次查询一个区间,要求告诉这个区间排序后的第k个数. 分析 划分树模板,O(mlogn). 建树.根据排序之后的数组,对于一个区间,找到中点的数,将整个区间分为左右 ...