本文是继承上文的基础上进行的讨论,建议读者先阅读http://www.cnblogs.com/xuezhezlr/p/9097137.html和https://www.cnblogs.com/xuezhezlr/p/9096063.html后在进行本文的了解,本文旨在对上文中的数据驱动在实际运用中的问题进行解答
实际使用时,读者会发现原有的框架在一些场景中貌似运用的不是太好,比如订单完成接口,这时就要用到关键字驱动的方式,本文的关键字驱动与正规的有一定出入,不过还是从最正统的关键字驱动的思维发散出来了,真正的关键字驱动,核心就是代码中定义一些关键字,一旦满足一定的触发条件,就会直接触发对应的代码逻辑与操作,以达到目的
所谓的数据驱动,确实会把数据和测试代码分割开来,但是在上文的方法中会发现,无论是excle形式的数据驱动还是数据库形式的,都会把数据抽象,具体实践中会把每一条测试用例以数据库中一条记录或者excle中的一行来展示,即把所有数据抽象成数据库中一条记录,但是订单完成这种接口会有一些问题
这里要说一下,一般的公司订单完成,是用一个正常状态的订单,调用特定接口传一些参数,来完成更改订单状态并支付等操作,在自动化中,由于很难保证测试数据始终是正确的,往往需要自己创建一个正常状态的订单,然后再去拿着这个订单的订单号来调用接口,也就是说,订单号是变化的,在跑自动化任务时候生成的
另一方面,在上文的框架中,基本都是写死的参数,这种变化的数据,临时生成的数据,将出现不兼容的问题,理论上我们需要两行数据,一行是调用创建订单时候的参数,第二行则是调用订单完成的参数,而如此做,代码将会很混乱,复杂度将直线提升
因此,关键字驱动出现了,它的任务就是解决这种,类似于订单号这种特殊的参数,假设在接口测试中,订单完成接口在原有代码中我们要传一个orderno字段,这里的orderno需要一个正常的订单,那么,我们要做的事是输入一个关键字,让代码知道,我们需要这样的一个关键字,下面是部分代码
else if(value.indexOf(URLEncoder.encode("已创建订单买方出价orderId","utf-8"))!=-1){ value = value.replaceAll(URLEncoder.encode("已创建订单买方出价orderId","utf-8"), order.testorder11());}else if(value.indexOf(URLEncoder.encode("已创建订单买方出价ipId","utf-8"))!=-1) { value = value.replaceAll(URLEncoder.encode("已创建订单买方出价ipId", "utf-8"), order.testorder11());}else if(value.indexOf(URLEncoder.encode("已创建订单卖方出价ipId","utf-8"))!=-1||value.indexOf(URLEncoder.encode("已创建订单卖方出价orderId","utf-8"))!=-1){ value = value.replaceAll(URLEncoder.encode("已创建订单卖方出价ipId","utf-8"), order.testorder12());}else if(value.indexOf(URLEncoder.encode("已创建订单卖方出价orderId","utf-8"))!=-1) { value = value.replaceAll(URLEncoder.encode("已创建订单卖方出价orderId", "utf-8"), order.testorder12());}else if(value.indexOf(URLEncoder.encode("已完成订单orderId","utf-8"))!=-1){ value = value.replaceAll(URLEncoder.encode("已完成订单orderId","utf-8"), getData(order.testorder2(),"orderId"));}else if(value.indexOf(URLEncoder.encode("已预创建订单orderId","utf-8"))!=-1){ value = value.replaceAll(URLEncoder.encode("已预创建订单orderId","utf-8"), getData(order.testorder0(),"orderId"));}else if(value.indexOf(URLEncoder.encode("已预创建订单ipId","utf-8"))!=-1){ value = value.replaceAll(URLEncoder.encode("已预创建订单ipId","utf-8"), order.testorderzlr0());}else if(value.indexOf(URLEncoder.encode("已撤销订单orderId","utf-8"))!=-1){ value = value.replaceAll(URLEncoder.encode("已撤销订单orderId","utf-8"), getData(order.testorder3(),"orderId"));}下图是文档的截图
上文中代码可以看到,在代码中会识别 已完成订单orderId,已撤销订单orderId等关键字,代码中看到了这个之后会直接执行对应的操作,然后再对字符串进行替换比方说原先是orderno,在文档中会直接把写作各种各样的关键字,比如是已撤销订单orderId,然后调用接口或者代码自身逻辑,直接生成一个对应状态的订单id,然后在把原先的数据替换一下就可以了 上文就是关键字驱动的代码核心了
原文地址:https://www.cnblogs.com/xuezhezlr/p/9127378.html