13.2 Web 自動(dòng)化測(cè)試 -- 并發(fā)執(zhí)行

當(dāng)我們有成千上萬(wàn)個(gè)自動(dòng)化測(cè)試用例時(shí)绊率,為了提高測(cè)試用例的執(zhí)行速度究履,往往我們需要對(duì)測(cè)試用例進(jìn)行并發(fā)執(zhí)行。并發(fā)執(zhí)行的方式很多藐俺,而較為簡(jiǎn)單的方式就是通過(guò)TestNG提供的并發(fā)來(lái)完成泥彤。


DataProvider 的并發(fā)

上節(jié)我們已經(jīng)知道了如果通過(guò)@DataProvider進(jìn)行數(shù)據(jù)驅(qū)動(dòng)吟吝,那當(dāng)我們有多個(gè)數(shù)據(jù)源時(shí)我們想一次性執(zhí)行多個(gè)數(shù)據(jù)源該如何設(shè)置呢?
我們只需要在@DataProvider 標(biāo)簽中添加 parallel參數(shù)并設(shè)置值為true便可浙宜。

代碼例子:

    @DataProvider(name = "data1",parallel = true)
    public Object[][] data2() {
        return new String[][]{
                {"name", "gsfdg", "fadsf"},{"a","v","c"}
        };
    }

    //在@Test注解中指定dataProvider參數(shù)并設(shè)置獲取數(shù)據(jù)的來(lái)源 testData
    @Test(dataProvider = "data1")
    public void dataDriverTest(String name, String i, String b) throws InterruptedException {
        System.out.println(name + i + b);
        Thread.sleep(5000);
    }

代碼里面我們?cè)赿ata2()方法中添加了@DataProvider注解粟瞬,并添加了parallel=true參數(shù)萤捆,那么所有用到該數(shù)據(jù)源的測(cè)試方法都將并發(fā)執(zhí)行俗或,所以如下圖當(dāng)這個(gè)腳本運(yùn)行起來(lái)時(shí),我們會(huì)發(fā)現(xiàn)IDEA 同時(shí)執(zhí)行多個(gè)測(cè)試焰轻。但是當(dāng)我們的數(shù)據(jù)源操作10條時(shí)昆雀,默認(rèn)同時(shí)執(zhí)行10條數(shù)據(jù),也就是DataProvider的默認(rèn)線程為10揩懒。那如何更改這個(gè)默認(rèn)值呢挽封?這時(shí)我們就得去修改TestNG的執(zhí)行xml文件。


TestNG 執(zhí)行xml文件介紹

以往我們?cè)趫?zhí)行@Test時(shí)忆某,往往是通過(guò)IDE工具直接選取方法或者類(lèi)右鍵 --> run 的方式來(lái)執(zhí)行阔蛉,其實(shí)真正執(zhí)行的是一個(gè)xml文件状原,這個(gè)xml文件InteliJ IEDA會(huì)默認(rèn)生成于: C:\Users\用戶名.IntelliJIdea\system 底下的“temp-testng-customsuite.xml”。

我們簡(jiǎn)單查看下這個(gè)文件削锰。層級(jí)由外到內(nèi)分別為suite -> test -> class -> method 毕莱。一個(gè)<suite>里面可以包含多個(gè)<test>央串,一個(gè)<test>里面可以包含多個(gè)<class>,并用<classes>嵌套稳摄。<class>里面又可以包含<methods>饲宿。

看到這個(gè)suite瘫想,test,class减噪,method是不是想起TestNG的注解车吹,BeforeSuite、AfterSuite朝卒、BeforeTest乐埠、AfterTest、BeforeClass龙宏、AfterClass伤疙、BeforeMethod、AfterMethod。之前你可能還分不清他們之間的執(zhí)行順序厨姚,這回對(duì)應(yīng)上這個(gè)xml文件键菱,是不是就容易理解了谬墙,例如<suite>里面包含了兩個(gè)class,兩個(gè)class都包含了BefreSuite方法经备, 那么執(zhí)行時(shí)拭抬,會(huì)優(yōu)先執(zhí)行完成這個(gè)兩個(gè)BefreSuite。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Default Suite">
<!-- name 屬性值可以隨便取 -->
  <test name="Selenium_Demo_v3">
    <classes>
    <class name="com.selenium.demo.TestDemo">
      <!--被運(yùn)行的Class 名-->
      <class name="com.selenium.demo.WaitTest">
        <methods>
          <!--include 表示運(yùn)行該 Test-->
          <include name="waitTest"/>
          <!--exclude 表示不運(yùn)行改類(lèi)下的該 Test-->
          <exclude name="test1"/>
        </methods>
      </class> <!-- com.selenium.demo.WaitTest -->
    </classes>
  </test> <!-- Selenium_Demo_v3 -->
</suite> <!-- Default Suite -->


設(shè)定DataProvider 的并發(fā)數(shù)

當(dāng)我們知道初步了解了TestNG的執(zhí)行xml后侵蒙,我們只需要簡(jiǎn)單修改下<suite>標(biāo)簽造虎,在里面添加“data-provider-thread-count”屬性并設(shè)置值,那么我們就可以設(shè)定DataProvider的并發(fā)數(shù)纷闺。

  <suite name="Default Suite" data-provider-thread-count="20">

注意通過(guò)IDEA執(zhí)行時(shí)算凿,不可以在測(cè)試方法上右鍵 -->run ,而是需要在執(zhí)行的xml文件上右鍵 -->run


test犁功,class , method 級(jí)別的并發(fā)

TestNG除了支持DataProvider的并發(fā)外,也支持test浸卦, class , method 級(jí)別的并發(fā)署鸡。設(shè)置基本一樣都是在<suite> 標(biāo)簽添加parallel 和 thread-count 參數(shù),其中parallel參數(shù)表示采用哪種級(jí)別的并發(fā)限嫌,thread-count參數(shù)表示并發(fā)的線程數(shù)靴庆,如下示例:

<suite name="Default Suite" parallel="tests" thread-count="10">
<suite name="Default Suite" parallel="classes" thread-count="10">
<suite name="Default Suite" parallel="methods" thread-count="10">

說(shuō)明:

tests 級(jí)別:我們?cè)趫?zhí)行的xml中配置多個(gè)<test>標(biāo)簽,則每個(gè)<test>標(biāo)簽內(nèi)的測(cè)試用例執(zhí)行在同一個(gè)線程中萤皂。
classes 級(jí)別: 我們?cè)趫?zhí)行的xml中配置多個(gè)<class>標(biāo)簽撒穷,則每個(gè)<class>標(biāo)簽內(nèi)的測(cè)試運(yùn)行在同一個(gè)線程中。
methods 級(jí)別:則運(yùn)行所有的執(zhí)行xml中配置的測(cè)試用例都于不同的線程中裆熙。


并發(fā)的帶來(lái)的問(wèn)題

盡管并發(fā)可以大大縮短我們的測(cè)試時(shí)間端礼,但是從實(shí)踐中我們會(huì)發(fā)現(xiàn)做并發(fā)執(zhí)行腳本時(shí)禽笑,對(duì)腳本的設(shè)計(jì)需要考慮更多復(fù)雜的場(chǎng)景,例如腳本與腳本間依賴等蛤奥,腳本的測(cè)試數(shù)據(jù)傳遞等等都需要在編寫(xiě)腳本時(shí)考慮進(jìn)來(lái)佳镜。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市凡桥,隨后出現(xiàn)的幾起案子蟀伸,更是在濱河造成了極大的恐慌,老刑警劉巖缅刽,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件啊掏,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡衰猛,警方通過(guò)查閱死者的電腦和手機(jī)迟蜜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)啡省,“玉大人娜睛,你說(shuō)我怎么就攤上這事∝远茫” “怎么了畦戒?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)结序。 經(jīng)常有香客問(wèn)我障斋,道長(zhǎng),這世上最難降的妖魔是什么笼痹? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任配喳,我火速辦了婚禮,結(jié)果婚禮上凳干,老公的妹妹穿的比我還像新娘晴裹。我一直安慰自己,他們只是感情好救赐,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布涧团。 她就那樣靜靜地躺著,像睡著了一般经磅。 火紅的嫁衣襯著肌膚如雪泌绣。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天预厌,我揣著相機(jī)與錄音阿迈,去河邊找鬼。 笑死轧叽,一個(gè)胖子當(dāng)著我的面吹牛苗沧,可吹牛的內(nèi)容都是我干的刊棕。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼待逞,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼甥角!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起识樱,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤嗤无,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后怜庸,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體当犯,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年割疾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了灶壶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡杈曲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出胸懈,到底是詐尸還是另有隱情担扑,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布趣钱,位于F島的核電站涌献,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏首有。R本人自食惡果不足惜燕垃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望井联。 院中可真熱鬧卜壕,春花似錦、人聲如沸烙常。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蚕脏。三九已至侦副,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間驼鞭,已是汗流浹背秦驯。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留挣棕,地道東北人译隘。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓亲桥,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親细燎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子两曼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 感謝原作者的奉獻(xiàn),原作者博客地址:http://blog.csdn.net/zhu_ai_xin_520/arti...
    狼孩閱讀 14,078評(píng)論 1 35
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理玻驻,服務(wù)發(fā)現(xiàn)悼凑,斷路器,智...
    卡卡羅2017閱讀 134,711評(píng)論 18 139
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架璧瞬,建立于...
    Hsinwong閱讀 22,442評(píng)論 1 92
  • 隨著社會(huì)的進(jìn)步户辫,心智的成熟,我們會(huì)想得越來(lái)越多嗤锉,想要的太多渔欢,而知道的又太少,總是陷入迷茫的死胡同瘟忱,也許許多人都有...
    沅韻閱讀 190評(píng)論 0 0
  • 沒(méi)有拆不散的家庭奥额,只有不努力的小三。 當(dāng)你脫離了社會(huì)輿論傾向的軌道访诱。你只有兩種歸宿垫挨。要么被譴責(zé)自毀。要么被自我救贖...
    金慕煙閱讀 187評(píng)論 0 0