黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

selenium從入門到應(yīng)用 - 7,testNG的DataProvid

系統(tǒng) 2099 0

本系列所有代碼?https://github.com/zhangting85/simpleWebtest

?

本文將介紹一個(gè)Java+TestNG+Maven+Selenium的web自動(dòng)化測(cè)試腳本環(huán)境下testNG的Dataprovider的使用和數(shù)據(jù)驅(qū)動(dòng)的自動(dòng)化測(cè)試的實(shí)現(xiàn),并提供全部代碼。

?

?

首先,DataProvider是什么?

這是testNG提供的一個(gè)做數(shù)據(jù)驅(qū)動(dòng)的自動(dòng)化測(cè)試時(shí)用到的標(biāo)簽。詳見testNG官網(wǎng)文檔。

?

很多人會(huì)在使用testNG的時(shí)候把測(cè)試數(shù)據(jù)文件獨(dú)立出來,有的人會(huì)自己去寫讀文件的方法,在測(cè)試方法里去調(diào)用。這樣寫不一定不好,但有時(shí)我們?nèi)绻私鈚estNG提供的方法,就多了一種選擇。而且通常DataProvider是比較好的一種選擇。

?

DataProvider有兩種寫法:

?

一種是返回一個(gè)Iterator的泛型對(duì)象,代碼如下:

        
           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首頁上搜索一個(gè)商品 主要介紹定位某個(gè)商品名稱的N種寫法


        
        
          21
        
        
               * 這里用了DataProvider


        
        
          22
        
        
               * (不會(huì)用DataProvier不要說自己懂testNG)


        
        
          23
        
        
          */
        
        
          24
        
             @Test(dataProvider="product_to_search"
        
          )


        
        
          25
        
        
          public
        
        
          void
        
         searchProduct(String keyword) 
        
          throws
        
        
           InterruptedException {


        
        
          26
        
        
          27
        
                 log.info("keyword="+
        
          keyword);


        
        
          28
        
        
          //
        
        
          方法鏈。方法鏈并不會(huì)導(dǎo)致調(diào)試?yán)щy,因?yàn)槲沂窍葘懢€性腳本后重構(gòu)成這種腳本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
        
        
               * 一個(gè)返回iterator的的DataProvider


        
        
          37
        
        
          */
        
        
          38
        
             @DataProvider(name="product_to_search"
        
          )


        
        
          39
        
        
          public
        
         Iterator<Object[]>
        
           createData1() {


        
        
          40
        
        
          //
        
        
          一個(gè)Array
        
        
          41
        
                 String[] astringarray={"巧克力","餅","糕","蛋"
        
          };


        
        
          42
        
        
          //
        
        
          轉(zhuǎn)成一個(gè)String的List
        
        
          43
        
                 List<String> lines=
        
          Arrays.asList(astringarray);


        
        
          44
        
        
          45
        
        
          //
        
        
          一個(gè)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
        
         }
      
View Code

?

另一種是返回一個(gè)Object的二維數(shù)組,代碼如下:

        
           1
        
        
          package
        
        
           simplewebtest.test.testcases.sample.jd;


        
        
           2
        
        
           3
        
        
          import
        
        
           org.testng.annotations.DataProvider;


        
        
           4
        
        
          import
        
        
           org.testng.annotations.Test;


        
        
           5
        
        
           6
        
        
          import
        
        
           simplewebtest.core.TestCase;


        
        
           7
        
        
          import
        
        
           simplewebtest.core.page.sample.jd.JDHomepage;


        
        
           8
        
        
           9
        
        
          public
        
        
          class
        
         TestJDDataDriven2 
        
          extends
        
        
           TestCase {


        
        
          10
        
        
          11
        
        
          12
        
        
          13
        
        
          14
        
        
          /**
        
        
          15
        
        
               * JD首頁上搜索一個(gè)商品 主要介紹定位某個(gè)商品名稱的N種寫法


        
        
          16
        
        
               * 這里用了DataProvider


        
        
          17
        
        
               * (不會(huì)用DataProvier不要說自己懂testNG)


        
        
          18
        
        
          */
        
        
          19
        
             @Test(dataProvider="product_to_search"
        
          )


        
        
          20
        
        
          public
        
        
          void
        
         searchProduct(String keyword) 
        
          throws
        
        
           InterruptedException {


        
        
          21
        
        
          22
        
                 log.info("keyword="+
        
          keyword);


        
        
          23
        
                 String actual_procut_name= 
        
          new
        
         JDHomepage().init().searchHeader.search(keyword).getProductNameByIndexMethodTwo(1
        
          );


        
        
          24
        
                 log.info("actual_procut_name="+
        
          actual_procut_name);


        
        
          25
        
        
          assert
        
        
          (actual_procut_name.contains(keyword));


        
        
          26
        
                 log.info("--------------------------------"
        
          );


        
        
          27
        
        
              }


        
        
          28
        
        
          29
        
        
          /**
        
        
          30
        
        
               * 一個(gè)返回Object2維數(shù)組的DataProvider


        
        
          31
        
        
          */
        
        
          32
        
             @DataProvider(name="product_to_search"
        
          )


        
        
          33
        
        
          public
        
        
           Object[][] createData1() {


        
        
          34
        
        
          return
        
        
          new
        
        
           Object[][] {


        
        
          35
        
                    { "巧克力"
        
           },


        
        
          36
        
                    { "餅"
        
          },


        
        
          37
        
                    { "核桃"
        
          },


        
        
          38
        
        
                   };


        
        
          39
        
        
                  }


        
        
          40
        
        
          41
        
         }
      
View Code

?

這兩種寫法都可以,隨個(gè)人喜好選擇吧。第二種方法更古老一點(diǎn),在沒有泛型的年代就只能用它了。

?

另外,DataProvider還支持并行執(zhí)行。

比如,

      @DataProvider(name="product_to_search",parallel = 
      
        true
      
      )
    

parallel屬性為true時(shí),testNG會(huì)并行執(zhí)行這個(gè)DataProvider提供的測(cè)試數(shù)據(jù)。

如此,我們的測(cè)試執(zhí)行速度也會(huì)大幅提升(如果你的電腦有多個(gè)CPU,速度提升更明顯)。下期介紹testNG中的并行測(cè)試執(zhí)行時(shí)會(huì)給出例子。

?

有人問,我要把測(cè)試數(shù)據(jù)放到獨(dú)立文件里去的話,怎么做?

這個(gè)問題其實(shí)很簡單,我們?nèi)耘f使用DataProvider,在DataProvider里調(diào)用負(fù)責(zé)文件讀取的方法,然后把文件內(nèi)容存入我們DataProvider的返回值中。例子就不給了,請(qǐng)自己動(dòng)手寫吧。

但是呢,測(cè)試數(shù)據(jù)和測(cè)試用例分開放雖然有他的好處,新的問題卻會(huì)產(chǎn)生:程序的讀者(需要閱讀或維護(hù)你代碼的人)怎么知道哪個(gè)用例對(duì)應(yīng)哪個(gè)數(shù)據(jù)?我親眼見過有的人把上百個(gè)測(cè)試用例的數(shù)據(jù)放在一個(gè)txt文件里。其結(jié)構(gòu)之混亂,對(duì)程序讀者來說,無疑是一場(chǎng)災(zāi)難。請(qǐng)不要這么做!請(qǐng)?jiān)趯懘a時(shí),考慮讀者的感受,讀者每次讀到一個(gè)蹩腳的設(shè)計(jì)時(shí)是多么地難受啊。

?

有人問,我要把DataProvider獨(dú)立到一個(gè)專門的類里去,行不行?

你可以自己試試哦,我記得是可以的。同樣,請(qǐng)?jiān)谧鲞@種設(shè)計(jì)前考慮一下讀者的感受,我不希望在一個(gè)巨大的包含幾百個(gè)方法的類里尋找我用到的測(cè)試方法的DataProvider,請(qǐng)不要這么設(shè)計(jì)。

?

有人問,我一個(gè)DataProvider可不可以為多個(gè)測(cè)試方法提供數(shù)據(jù)?

完全可以哦,DataProvider上是可以跟一個(gè)傳入?yún)?shù)Method的,用來表示調(diào)用這個(gè)DataProvider的方法名稱。你可以在后續(xù)的代碼里判斷這個(gè)Method的值,根據(jù)不同的方法名為方法提供不同的數(shù)據(jù)。官網(wǎng)有例子哦,請(qǐng)看官網(wǎng)啊親。或者自己試試寫吧。這個(gè)系列里關(guān)于testNG的東西我就簡單帶過了,主要講selenium嘛。

selenium從入門到應(yīng)用 - 7,testNG的DataProvider


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦?。?!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論