1、艾斯医药商务系统集成测试 子系统构件购物车子系统修改购物车药品数量Servlet结算中心子系统结算中心界面输入参数格式检查结算Servlet输入参数格式、内容检查结算Servlet结算结果Servlet邮件发送子系统邮件发送ServletJava邮件发送类子系统协作图:子系统类之间协作关系描述:消息编号消息描述消息发送者消息接收者1访问购物车列表(单击查看购物车链接)用户(浏览器代理)ShopCartServlet2访问结算中心(单击购物车列表中的结算中心)用户(浏览器代理)OrderServlet3访问数据库对象(用户提交订单信息)OrderServlet(用户单击提交按钮)OrderDAO
2、4通知邮件子系统发送邮件到管理员邮箱OrderServlet发送用户提交订单的内容以及价格MailSender5返回处理结果(通知用户是否已发出邮件通知)OrderServlet根据MailSender的返回结果,决定返回信息ordershow.jsp由于直接采用类耦合的方式,没有使用接口,这里只列举系统类之间的消息输入与输出的类型与数量。系统类之间消息描述(使用消息编号对应上述表格)消息编号消息类型消息内容1超级链接单击超级链接2超级链接单击超级链接3OrderItemOrders外部输入:订单项(购物车中每件商品的ID,每件商品数量与单价乘积后的每项小计,以及每订单项小计的总合)订单信息(
3、提交订单的用户名称,单位名称,单位电话,联系电话,Email)调用OrdersDAO保存上述信息4String订单项和订单信息的字符串形式通知MailSender发送该信息到指定管理员邮箱5String订单和邮件信息提交成功订单信息提交成功但邮件发送失败订单提交不成功也就是说要做这3个子系统间的集成测试,就是外部输入7个全局变量,从对外输出的1个全局变量以及5个接口或者类来进行观察。当然观察点也可以减少一些,比如不是检查所有的内部接口或者类。1.确定测试输入首先从外部输入角度来考虑测试输入的设计,把集成后的组件看成一个黑盒,针对其集成后的功能(有时候也会考虑到性能)来进行测试,对外部输入的各参
4、数使用等价类划分、边界值分析、错误猜测等方法来进行测试数据的选取。考虑到根据外部输入来选取的数据不一定能保证把各种可能的输出都覆盖到了,因此需要从输出域覆盖角度来对测试输入进行数据补充。对于作为内部输出的内部接口进行输出域覆盖,需要对该接口上的数据交互都进行覆盖,也就是内部接口上的输入、输出/返回值等进行覆盖。以艾斯医药商务系统软件为例,集成后功能包含:1)参数检查功能:首先确定每个外部输入条件的等价类以及边界值。商品ID: 等价类: 0-整数最大值边界值:整数最小值-1,整数最小值,整数最小值+1 整数最大值-1,整数最大值,整数最大值+1订单项小计:等价类 0.0小计=浮点数最大值边界值:
5、 0,-1,1 浮点数最大值-1,浮点数最大值,浮点数最大值+1用户名称:等价类: 长度大于5的字母、数字或者下划线边界值: 长度等于5,小于5非等价类: 非字母、数字以及下划线以外的其他字符单位名称:同用户名称单位电话:等价类: 数字非等价类: 非数字联系电话:等价类:11位的数字非等价类:非数字以外的字符边界值:内容长度 12,11,10位Email:等价类: 字母数字下划线横线字母数字下划线横线.字母数字下划线横线非等价类: 非字母数字下划线横线字母数字下划线横线.字母数字下划线之外的任意格式2)测试结算中心子系统功能 首先从外部输入角度考虑对7个参数进行覆盖;接着看选取的数据有没有覆盖
6、到等价类、非等价类以及边界值,如没有完全覆盖,补充测试数据。3)组合统计可以同时进行所有统计,也可以使用正交分析法来考虑组合。集成后功能角度参数名称合法取值非法取值参数检查功能OrderServlet(checkInputAcceptable)外部输入商品IDproductId123A:0 ;B:-1;C:MAXVALUE+1;D:a商品小计totalPrice100.9A:0,B:-1;C:MINVALUE-1;D:a用户名称username_Alex7A:%; B: _A;单位名称unitNameAscentTechA:*Asce; B:bc;单位电话unitTele010-8889999
7、9A:%67-1111111;B:010-888Abc;联系电话mobilePhone1869999999A:186000;B:186AAbb67;电子邮件Emailabc-_67A:&baB:C:输出域覆盖对外输出是否可接受?isAcceptabletruefalse非boolean之外的值测试订单中心OrderServlet子系统功能(getOrdersInfo(request)外部输入订单项OrderItemnew OrderItem()非OrderItem类型对象订单OrdersnewOrders()非Order类型对象输出域覆盖对外输出订单信息OrdersOrders对象A:NULL
8、B :非Orders类型对象 外部接口OrdersServlet获取Orders对象爱内阁可以不观察测试数据库订单信息访问DAO模块功能外部输入订单项Orders含有合法数据的,来自于getOrdersInfo方法的Orders对象A:NULLB:不包含任何信息的Orders对象C:不包含OrderItem对象的Orders对象D:Orders中没有用户ID输出域覆盖对外输出是否保存成功isSuccesstrueA: OrderItem保存成功,但Orders保存失败B:Orders保存成功,但OrderItem保存失败C:两者保存都不成功是否保存成功isSuccessfalseA:两者保存都
9、成功B: OrderItem保存成功,但Orders保存失败C:Orders保存成功,但OrderItem保存失败具体行数具体行数外部接口JDBC参数检查模块接口可以不观察测试邮件子系统模块功能MailSender(SendMail)外部输入字符串订单信息的字符串信息Orders.toString()来自于getOrdersInfo的Orders对象A:NULLB:不包含任何信息的Orders对象C:不包含OrderItem对象的Orders对象D:Orders中没有用户IDE:没有用户信息和商品信息的字符串F:” 空串G:Orders1234EA12 格式信息输出域覆盖对外输出是否发送成功i
10、sSuccesstrueA:邮件发送成功,但收件箱没收到B:邮件发送失败,但收件箱收到信息C:两者皆失败是否发送成功isSuccessfalseA:邮件发送成功外部接口Java Mail AIP参数检查模块接口可以不观察2.针对前面确定的测试输入,写出预期输出,完成测试用例设计注意这里的预期输出可以包含对外输出以及内部接口上的输出。功能预期输出期望输出参数检查功能(javascript)输入参数名称=username值: =username值: abc其他字段参考上述字段用户名不能为空用户名长度不能小于5个字符购物车子系统测试输入参数=单击 结算中心进入结算中心结算中心子系统测试输入参数=us
11、ername值: username值: abc其他字段参考上述字段用户名不能为空用户名长度不能小于5个字符数据库访问对象功能测试输入参数=Order对象值userid=50;productId=10unitPrice=12.3F;quantity = 10;totalPrice=unitPric*quanityOrderItem orderItem= new OrderItem(productId,totalPrice)Order order = new Order(userid,orderItem)其他情况以此类推true邮件发送子系统名称输入参数名称:=orderInfoString值:“guest 在 2011年1月3日 购买了 某药品:XXX,YYYY 总价 29.8元,请及时处理=orderInfoString值:NULL邮件发送成功订单信息处理失败