ITEST框架调用测试数据方法为配置对应的XML文件,包括测试对象,执行方法,测试方法,输入的参数,一条案例配置一条数据(详细可见itest的说明)
而在XXX的测试项目中,存在应答应用,即输入问题,底层引擎通过提炼关键词,并进行一定规则算法,模拟人工智能,调用搜索引擎,应答出匹配的知识。(业务场景类似于百度知道)。从接口层面来说调用的都是同一个接口方法,而基本问答的提问方式非常多,是否能够在接口层面传入大批量的输入问题,调用接口自动运行常见问题,来判断引擎的准确性和是否贴近业务,从而不用在页面上进行大量手工的输入验证呢,做了些尝试,利用itest框架是可以跑通的(开始调试时发现在同一个测试方法里,非第一次运行时itest测试时,传入的参数不会被初始化,目前叶渡已经增强了此功能)。
一.原有单条数据的传参方式:
一条数据输入时,测试代码和XML文件如下:
配置文件:传入所需参数:埋点页面地址,问题字符串
<test name=”test_04_返回基本问答_有效问题有唯一答案”>
<param name=”questString” desc=”" value=”开店” />
<param name=”minervasource” desc=”" value=”http://service.daily.taobao.net/support/help.htm” />
</test>
调用接口和验证的主要代码如下:
performWebxModule();
String actualAnswer = ((MinervaAnswerDO) context.get(“answerResult”))
.getAnswer();
// 知识对应的ID
String subString = “当您预订酒店时您应以实际入住客人真实姓名做预订。”;
Assert.assertThat(actualAnswer, containsString(subString));
二.批量应用的传参方式:
而此时,我们可利用第三方的输入,利用java集合,得到输入的案例集合,改造的主要过程如下(本例用jxl调用excel实现的,用JAVA的poi等方法也都可以)
(1) 从输入文件中取得每一条输入数据,并将每一条数据通过itest框架传入被测试的对象,运行
通过paramWrapper.getRequestParamMap().put(“questString”,questString);将从excel每个单元格读取出来的数据作为输入条件传入questString变量中,此时配置xml文件不需要传参,保持为空即可,例如:
<test name=”test_11_返回基本问答_有效问题有唯一回答”>
</test>
(2) 获取出运行后期望验证的参数值,并将输入输出一一对应存储于java集合中,以上主要代码如下:
(3) 将该集合的输入输出取出,写入到excel中,进行判定,主要代码如下:
(4) 运行前准备大量的测试数据到EXCEL(可通过数据库导出为CSV文件)(本例准备了1000条输入数据)
(5) 运行测试方法后,得到EXCEL文件内容如下:
三.后话:
1.此方法适用于调用接口相同,而输入数据和期望数据不同的情况(比如根据等价类,判定表或者正交等划分的不同测试用例),来实现自动化的逻辑校验。
2.可以通过此方法将功能测试用例和接口测试用例结合起来,(功能测试同一功能的多条用例都可看作接口测试的同一接口的多条输入输出),并更好地发挥页面自动化测试的效率(如同一页面,不同业务逻辑,输入输出的校验可交由接口自动化实现)
3.传参和出参校验值在具体实现方式上不必拘泥于excel,可从数据库里面取等,
4.Itest能否将此项也增强下调用封装呢,可以类似于自动化的数据驱动那样?