12
返回列表 发新帖
楼主: AlexQin

[转载] 智能正交请求参数自动化测试

[复制链接]
论坛徽章:
1056
紫蜘蛛
日期:2015-09-22 15:53:22紫蜘蛛
日期:2015-10-15 13:48:52紫蜘蛛
日期:2015-10-15 14:45:48紫蜘蛛
日期:2015-10-15 14:47:47紫蜘蛛
日期:2015-10-15 14:48:45九尾狐狸
日期:2015-09-22 15:53:22九尾狐狸
日期:2015-10-15 13:50:37九尾狐狸
日期:2015-10-15 14:45:48九尾狐狸
日期:2015-10-15 14:47:47九尾狐狸
日期:2015-10-15 14:48:45
11#
 楼主| 发表于 2015-4-11 17:52 | 只看该作者
服务的定义


接口
  1. VcpVoucherProductFacade#createVoucherProduct(VcpCreateVoucherProductRequest request)
复制代码



接口参数

请求由VcpCreateVoucherProductRequest定义。它有11个属性(如下图所示。不计其中的serialVersionUID),除资金账号fundAccounts的值是字符串列表List<String>外,其余属性的值均为字符串String。



之所以属性值多定义为字符串String,是为了将系统与客户端解藕,系统升级(如资金计算类型calcType属性,由现在的“定额”FIXED、“不定额”FLOAT,扩展一种新的类型假设为“按比例”RATIO)时,无须捆绑客户端强制升级。




使用道具 举报

回复
论坛徽章:
1056
紫蜘蛛
日期:2015-09-22 15:53:22紫蜘蛛
日期:2015-10-15 13:48:52紫蜘蛛
日期:2015-10-15 14:45:48紫蜘蛛
日期:2015-10-15 14:47:47紫蜘蛛
日期:2015-10-15 14:48:45九尾狐狸
日期:2015-09-22 15:53:22九尾狐狸
日期:2015-10-15 13:50:37九尾狐狸
日期:2015-10-15 14:45:48九尾狐狸
日期:2015-10-15 14:47:47九尾狐狸
日期:2015-10-15 14:48:45
12#
 楼主| 发表于 2015-4-11 17:53 | 只看该作者
存储

之所以要把存储的定义予以说明,是因为对于请求合法性校验来说,存储定义往往是请求合法性重要的和主要的依据。券产品领域对象VpProduct最终将存储到vp_product数据表中,如下图所示。


使用道具 举报

回复
论坛徽章:
1056
紫蜘蛛
日期:2015-09-22 15:53:22紫蜘蛛
日期:2015-10-15 13:48:52紫蜘蛛
日期:2015-10-15 14:45:48紫蜘蛛
日期:2015-10-15 14:47:47紫蜘蛛
日期:2015-10-15 14:48:45九尾狐狸
日期:2015-09-22 15:53:22九尾狐狸
日期:2015-10-15 13:50:37九尾狐狸
日期:2015-10-15 14:45:48九尾狐狸
日期:2015-10-15 14:47:47九尾狐狸
日期:2015-10-15 14:48:45
13#
 楼主| 发表于 2015-4-11 17:54 | 只看该作者
定义参数的合法性

一个参数是否合法,取决于它的值是否在其值域内。在值域内则合法,否则就是非法的。所以,要定义参数的合法性,关键是要定义它的值域。


定义参数的值域


决定参数值域的因素,一般包括存储、业务约束等。以券产品创建请求的pid、useScene和fundAccounts参数为例分析如下:

请求参数
存储约束
业务约束
值域
pid
  • nullable:NO。所以pid为必填。
  • varcher(16)。所以pid字符串长度不能超过16。

长度不超16的、非空的字符串。
useScene
  • nullable:NO。所以pid为必填。

业务定义useScene为2种:
2个字符串构成的集合:{“ORDER”,
  • varchar(8)。所以useScene字符串长度不能超过8。

  • “ORDER”(订单券)
  • “PAY”(支付券)两种。

“PAY”}
fundAccounts
  • nullable:NO。所以fundAccounts为必填。
  • varchar(1024)。所以fundAccounts字符串长度不能超过1024。

业务定义fundAccounts为保证金账号列表。
一个或多个保证金账号构成的列表,并且整个列表字符串最终的长度不能超过1024。


使用道具 举报

回复
论坛徽章:
1056
紫蜘蛛
日期:2015-09-22 15:53:22紫蜘蛛
日期:2015-10-15 13:48:52紫蜘蛛
日期:2015-10-15 14:45:48紫蜘蛛
日期:2015-10-15 14:47:47紫蜘蛛
日期:2015-10-15 14:48:45九尾狐狸
日期:2015-09-22 15:53:22九尾狐狸
日期:2015-10-15 13:50:37九尾狐狸
日期:2015-10-15 14:45:48九尾狐狸
日期:2015-10-15 14:47:47九尾狐狸
日期:2015-10-15 14:48:45
14#
 楼主| 发表于 2015-4-11 17:54 | 只看该作者
请求合法性测试用例设计

合法性测试的目的,是要确保所有的非法的情形下都能正确地工作。合法性用例设计的关键,是要发挥创造力,找出所有的非法值。注意,是非法值而不是合法值。如果请求合法性测试是黄药师的碧海潮生曲,那么,找出所有非法值就是郭靖的鼓点——要把每一个点都敲在“反节奏”上。背后的逻辑是:扛的住所有“反节奏”的鼓点方显碧海潮生曲的功力!才可能是靠谱的系统服务。


在值域定义清楚以后,非法请求的测试用例设计就很容易了。仍以券产品创建请求的pid、useScene和fundAccounts参数为例分析如下:

请求参数
存储约束
业务约束
值域
非法值用例
pid
  • nullable:NO。所以pid为必填。
  • varcher(16)。所以pid字符串长度不能超过16。

长度不超16的、非空的字符串。
  • null
  • 空字符串
  • 非空串且长度为17

useScene
  • nullable:NO。所以pid为必填。
  • varchar(8)。所以useScene字符串长度不能超过8。

业务定useScene为2种:
  • “ORDER”(订单券)
  • “PAY”(支付券)两种。

2个字符串构成的集合:{“ORDER”, “PAY”}
  • null
  • 空串
  • 非空串且长度为9
  • 非空串且值为“INV”

fundAccounts
  • nullable:NO。所以fundAccounts为必填。
  • varchar(1024)。所以fundAccounts字符串长度不能超过1024。

业务定义fundAccounts为保证金账号列表。
一个或多个保证金账号构成的列表,并且整个列表字符串最终的长度不能超过1024。
  • null
  • 空列表 Collections.EMPT Y_LIST对象
  • 2个保证金账号构成的列表,并且每个
  • 保证金账号字符串的长度均为513


设计出正交的非法值用例,就可以将它们配置到非法值列表中,利用OrthotropicRequestTestBase进行自动化测试及回归了。


使用道具 举报

回复
论坛徽章:
1056
紫蜘蛛
日期:2015-09-22 15:53:22紫蜘蛛
日期:2015-10-15 13:48:52紫蜘蛛
日期:2015-10-15 14:45:48紫蜘蛛
日期:2015-10-15 14:47:47紫蜘蛛
日期:2015-10-15 14:48:45九尾狐狸
日期:2015-09-22 15:53:22九尾狐狸
日期:2015-10-15 13:50:37九尾狐狸
日期:2015-10-15 14:45:48九尾狐狸
日期:2015-10-15 14:47:47九尾狐狸
日期:2015-10-15 14:48:45
15#
 楼主| 发表于 2015-4-11 17:55 | 只看该作者
常见扩展性问题

智能正交请求参数测试方法在扩展性、高效性方面具有显著优势。比如,当系统发生重构时,如DB重构增删请求参数,或者根据测试覆盖率而增加相应参数值组合,智能正交请求参数测试方法易于扩展,可以随系统进行低成本的重构,并迅速得到回归测试的结果。


使用道具 举报

回复
论坛徽章:
1056
紫蜘蛛
日期:2015-09-22 15:53:22紫蜘蛛
日期:2015-10-15 13:48:52紫蜘蛛
日期:2015-10-15 14:45:48紫蜘蛛
日期:2015-10-15 14:47:47紫蜘蛛
日期:2015-10-15 14:48:45九尾狐狸
日期:2015-09-22 15:53:22九尾狐狸
日期:2015-10-15 13:50:37九尾狐狸
日期:2015-10-15 14:45:48九尾狐狸
日期:2015-10-15 14:47:47九尾狐狸
日期:2015-10-15 14:48:45
16#
 楼主| 发表于 2015-4-11 17:55 | 只看该作者
结论

综合以上,地毯式请求合法性自动化测试——OrthotropicRequestTestBase,具有如下优势:

  • 遵从ATS框架约定因而易于理解和使用;
  • 高度可复用的OrthotropicRequestTestBase及其@Test(dataProvider=”OrthotropicRequestProvider”)注解,大幅降低测试的开发成本;
  • 非法值配置简单易用不易出错且易于提供工具支持;
  • 测试结果清晰,便于判断是否完全覆盖所有可能的非法的或合法的请求。
  • 易于扩展。当DB或领域模型重构时,测试用例易于同步演化。

它在工程实践中具有简化测试工作,事半功倍的效果。也在一定程度上把boring乏昧的测试工作变得轻松有趣,快乐工作。


使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表