【摘要】
针对web的测试,如果做UI层的自动化测试,需要等界面都已经设计好且没有大的改动时才能编写脚本,写UI脚本又比较耗时,在进行项目功能测试的时候常常没有足够的时间来写界面自动化脚本,那么有什么方式能将自动化测试提前化又能方便的测试上层功能呢?
也许你要说service层(Model)和action层(controller)的接口测试,这两项确实能将测试提前化,但是就我个人的测试体会来说,service层一般只提供一些底层的服务,里面包含的业务逻辑不是很多,经常会发现测试完后根本覆盖不了多少功能,不能减少功能测试的周期;而action层测试由于环境等因素比较复杂,经常会出现投入产出比不理想的情况。基于以上的一些考虑,针对一些特殊场景的http测试,我们引入了针对数据的自动化测试方法。
【使用场景】
针对都是通过发送http请求,返回html页面或者是直接返回数据的场景。
校验点:返回数据的正确性。
【实现】
一般的http访问返回页面的类型都是以.htm、.jsp、.asp等结尾,后面跟上各种参数,例如:在浏览器中输入下面这个网址:http://tradecard.wangwang.taobao.com/tradecard/buyer/chatCard.htm?loginId=cntaobaoclientautotest01&uid=cntaobaoschiffer_yu&gid=9409512100&itemsId= 返回html页面
针对这样的请求和响应,我们设想,能不能发送一个特殊的请求,不返回html页面,而是返回页面上展示的那些数据呢?例如返回json格式的字符串等不依赖页面展示的数据类型。
接下来,我们就按照这种想法继续往下设计。
1、请求和响应之间做一个约定,如果http请求中以.do(实际可以依项目情况而定)结尾,后面跟上各种参数(与原http请求一致),最后加上一个我们自定义的itest(这里的itest仅仅是个标识)参数,服务端遇到这个请求之后认为是一个测试请求,不返回页面,而是以json数据格式返回页面需要展示的数据。
2、接收服务器返回的数据,将返回的数据与预期的数据进行对比,校验结果的正确性。
……………………
查看全文请点击下载:http://www.51testing.com/html/13/n-806213.html
测试代码举例:
1、拼接测试URL。
String url= "http://tradecard.wangwang.daily.taobao.net:8080/tradecard/buyer/cartItemList.do?
loginId=cntaobaotbtestuser250&uid=cntaobaoclienttestcauto1&gid=&itemsId=1604398968,1500003926799&itest=1"; 该请求以.do格式结尾,最后一个参数为itest,其值为1.实际测试代码中,url中的参数值可以设置成可配置的,将代码与测试数据分离。
2、发送http请求并获取返回字符串。
HttpRequest interfaceHttpRequest = new HttpRequest("get", url, "",false, false); ResponseInfo response = interfaceHttpRequest.call(); String s=response.responseBody.toString(); |
返回的结果中可以看出,包含了很多信息,其中有些数据界面上是不展现的,我们只需要提取那些页面上展现的数据进行校验。
3、校验返回的字符串
校验方法与普通的测试校验方法基本一致,将返回的字符串于预期设定的字符串进行对比,一致则表示测试通过,不一致则表示测试失败。
例如上面举例的测试http请求中包含两个itemid,其中一个宝贝不属于双方,预期结果是只显示一个宝贝。
校验方法:首先校验是否包含宝贝A,其次校验是否不包含宝贝B。
assertThat(s, containsString("title\":\"小稚的测试哦。不要删了")); //校验第一个宝贝名称 assertThat(s, containsString("price\":1212.0")); //校验第一个宝贝价格 assertThat(s.indexOf("title\":\"小稚测试哈"), is(-1)); //校验第二个宝贝信息不显示 |
……
查看全文请点击下载:http://www.51testing.com/html/13/n-806213.html
版权声明:51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。