接口测试之数据环境参数准备

本文主要讨论接口测试中数据准备我的一些感悟。

1. 接口测试的背景

目前我们的用例通过CSV脚本进行维护的,因此我们测试基类里编写了一个DataProvider。具体定义如下:

@DataProvider(name = "CsvDataProvider")
public Iterator<?> getDataProvider(Method method) {}

测试类继承测试基类,测试类示例如下

 @Test(dataProvider = "CsvDataProvider", description = "InsertWhiteListItem正常场景测试")
 public void insertWhiteListItem(final String caseid, final String description,
                                    final String type, final String content, final String riskType,
                                    ) {
	WhiteListItem white =JsonHelper.jsonToObject(whiteItem, WhiteListItem.class);
	boolean result = whiteListService.insertWhiteListItem(white);
}

此类对应的CSV文件如下所示:

caseid	description	type	content	  	riskType
001	插入不存在记录	MAC	00247E036940	ACCOUNT_RISK
002	插入已存在的记录	MAC	00247E036941	ACCOUNT_RISK
003	插入无效记录	MAC	00247E036942	ACCOUNT_RISK
004	插入过期记录	MAC	00247E036943	ACCOUNT_RISK

在真正的测试执行时,每次会读取一条CSV记录,每个字段做为一个参数(String类型)传给@Test下面的测试方法insertWhiteListItem。

2.参数构造方法
a. 简单对象直接传入
接口定义如下:

WhiteListItem queryWhiteItem(String type, String content, String riskType);

测试代码:

WhiteListItem white = whiteListService.queryWhiteItem(type, content, riskType);

适用范围:内置类型或java.lang下相关的类。
b. 复杂对象使用Json 类型转化
接口定义如下:

boolean insertWhiteListItem(WhiteListItem whiteListItem)
转换代码:
WhiteListItem white =JsonHelper.jsonToObject(whiteItem, WhiteListItem.class);
适用方法:构造JSON串比较麻烦,要先通过JsonHelper.objectToString拿到一个复杂对象的基本对象信息,再根据这个基本对象信息改为我们需要的类。适用于复杂查询对象。
c. 复杂对象使用Factory方法构造
接口定义如下:
boolean insertWhiteListItem(WhiteListItem whiteListItem)
测试脚本:
WhiteListItem white = WhiteListHelper.factory(type, content, riskType);

适用范围:如果一个对象大部分属性都可以是相同的,只有部分属性起关键作用,建议使用这个方法。

d.通过反射构建对象。

3.数据准备

a. 关系型存储的准备,包括DB及MILE。

对于单一表的数据,目前能够做到只需要指定一个CSV文件(通常是DB查询结果导出为CSV文件),实现自动导入功能。

对于多表关联的数据,可以做到多个指到的CSV文件自动导入。

根据数据类型区分,

配置类数据,我们不能直接删除,否则会影响系统运行,建立直接采用DB中的数据,可以插入新记录。

业务类数据,我们可以采用先删除后插入的操作,保证数据的正确性。

b. K-V型的存储,包括Tair及Hbase。

目前也是通过CSV来构造所需要的Key及Value,然后存储入对应的存储中。

c.多份存储的准备。

一份数据既存储在DB中,又存储在Hbase中,此时需要同时调用上面讲到的两种数据准备方案。

d. 关于事务控制

一直对此块有个幻想,就是支持事务控制,比如说在用例执行前设置一个SavePoint,然后执行数据准备,测试执行,结果校验过程,测试完成后执行下CallBack,数据库中的数据自动清除,实现到框架当中。接口测试就做到了悄悄的走,不带走一片云彩的状态。这就是极致的追求。

4. 环境准备

a. 缓存数据的推送。

b. DRM开关的设置。



























   

你可能感兴趣的:(java,TestNG,接口测试)