本系列所有代码 https://github.com/zhangting85/simpleWebtest
本文将介绍一个Java+TestNG+Maven+Selenium的web自动化测试脚本环境下testNG的Dataprovider的使用和数据驱动的自动化测试的实现,并提供全部代码。
首先,DataProvider是什么?
这是testNG提供的一个做数据驱动的自动化测试时用到的标签。详见testNG官网文档。
很多人会在使用testNG的时候把测试数据文件独立出来,有的人会自己去写读文件的方法,在测试方法里去调用。这样写不一定不好,但有时我们如果了解testNG提供的方法,就多了一种选择。而且通常DataProvider是比较好的一种选择。
DataProvider有两种写法:
一种是返回一个Iterator的泛型对象,代码如下:
1 package simplewebtest.test.testcases.sample.jd; 2 3 import java.util.ArrayList; 4 import java.util.Arrays; 5 import java.util.Iterator; 6 import java.util.List; 7 8 import org.testng.annotations.DataProvider; 9 import org.testng.annotations.Test; 10 11 import simplewebtest.core.TestCase; 12 import simplewebtest.core.page.sample.jd.JDHomepage; 13 14 public class TestJDDataDriven extends TestCase { 15 16 17 18 19 /** 20 * JD首页上搜索一个商品 主要介绍定位某个商品名称的N种写法 21 * 这里用了DataProvider 22 * (不会用DataProvier不要说自己懂testNG) 23 */ 24 @Test(dataProvider="product_to_search") 25 public void searchProduct(String keyword) throws InterruptedException { 26 27 log.info("keyword="+keyword); 28 //方法链。方法链并不会导致调试困难,因为我是先写线性脚本后重构成这种脚本this is a method chain 29 String actual_procut_name= new JDHomepage().init().searchHeader.search(keyword).getProductNameByIndexMethodTwo(1); 30 log.info("actual_procut_name="+actual_procut_name); 31 assert(actual_procut_name.contains(keyword)); 32 log.info("--------------------------------"); 33 } 34 35 /** 36 * 一个返回iterator的的DataProvider 37 */ 38 @DataProvider(name="product_to_search") 39 public Iterator<Object[]> createData1() { 40 //一个Array 41 String[] astringarray={"巧克力","饼","糕","蛋"}; 42 //转成一个String的List 43 List<String> lines=Arrays.asList(astringarray); 44 45 //一个Object的空的List 46 List<Object[]> data = new ArrayList<Object[]>(); 47 48 //往空List里放东西,然后返回 49 for (String line :lines ) 50 { 51 data.add(new Object[]{line}); 52 } 53 return data.iterator(); 54 55 } 56 57 }