2015-12-11 127 views
3

我需要我的參數自動測試,使他們能夠用多組數據(即數據驅動測試)運行。我使用Nightwatch和最貼近它,我發現this Google Group thread這實際上說,它不支持的結果。我也沒有能力來嘗試修改夜巡核心代碼,以支持這一點。與Nightwatch參數測試(數據驅動的測試)

我一直在使用TestNG中是這樣的:從含有測試配置中的testng.xml閱讀

package parameters; 
import org.testng.annotations.Parameters; 
// [...] 
@Test 
@Parameters({"param1","param2"}) 
public void testParameter(String param1, String param2) 
// [..] 

<suite name="Smoke Test" thread-count="1"> 
    <parameter name = "productName" value = "Bonbons" /> 
    <parameter name = "productID" value = "09464703" /> 
    <test name = "ProductInfo"> 
    <classes> 
     <class name = "parameters.testParameter"> 
     </class> 
    </classes> 
    </test> 
</suite> 

是否有任何自定義JavaScript庫,這將有助於這在Nightwatch中?或者也許有辦法將它與其他工具集成? (通過我的知識,Nightwatch是建立在頂部上不具有驅動測試或者數據的支持Node.js的,但爲了實現這一目標與其他工具集成。)

回答

1

一種方法我已經解決了需要測試數據的多種組合運行的問題,就是用一切的模板是相同的在所有的測試和使用節點創建的所有測試文件與模板和數據變量的每個組合。

我所需要的所有準備使用nightwatches工作進程在同一時間運行約20個瀏覽器的測試。我有4種環境中,每4個站點,每個站點有4種登錄類型,各有4種支付類型,各有4卡類型1024次測試,以測試每個組合。

我並不是說這是最簡單的解決方案。這只是我怎麼也允許工作進程與許多環境中工作,也許一個扭捏版本可以對您有所幫助:

var config = require("../globals").config; 
var _ = require('underscore'); 
var fs = require('fs'); 

var template = fs.readFileSync('testTemplate.js'); 

_.each(config.environments, function (env) { 
    _.each(config.sites, function (site) { 
     _.each(config.logins, function (login) { 
      _.each(config.paymentTypes, function (paymentType) { 
       _.each(config.cardTypes, function (cardType) { 

    var testName = env.name+'-'+site.name+'-'+login.name+'-'+paymentType.name+'-'+cardType.name; 

    var s = "var _ = require('underscore');\n\n"; 
    s += "var env = '" + env.name + "';\n"; 
    s += "var site = '" + site.name + "';\n"; 
    s += "var login = '" + login.name + "';\n"; 
    s += "var paymentType = '" + paymentType.name + "';\n"; 
    s += "var cardType = '" + cardType.name + "';\n\n"; 
    s += "module.exports = {\n"; 
    s += "\t'@tags': ['"+env.name+"','"+site.name+"','"+login.name+"','"+adultType.name+"','"+paymentType.name+"','"+cardType.name+"'],\n"; 
    s += "\t'"+testName+"' : function (browser) {\n"; 
    s += template; 

    fs.writeFile('./tests/'+env.name+'-'+login.name+'/'+testName+'.js', s, function (err) { 
     if (err) return console.log(err); 
     console.log('s > '+env.name+'/'+testName+'.js'); 
    }); 

       }); 
      }); 
     }); 
    }); 
}); 

它也有助於建立一個腳本文件來自動創建,我需要的所有測試然後運行我想要的測試的夜班。

所以基本上你拉你的節點所需要的數據,將其轉換爲一個格式的測試將很容易理解(... JS,JSON),創造一切必要的測試,並通過設置標籤或運行運行它們測試其中包含所有創建的測試的文件夾。

1

我提供,你可以以這種方式使用的輔助類,解決了這個問題:

  1. 安裝nightwatch數據驅動模塊:

    NPM我nightwatch數據驅動

  2. 導入DataDrivenTest類測試模塊:

    import DataDrivenTest from 'nightwatch-data-driven'

  3. 使用類是這樣的:

    // . Initialize DataDrivenTest with browser and AAA function 
    // and call it for a set of test cases 
    new DataDrivenTest(browser, function(data, name){ 
        // . Arrange 
        browser.logout(); 
        // . Act 
        browser.page.login().loginAndWaitForRedirect(data.email, data.pass); 
        // . Assert 
        browser.page.workspace().assertIsCurrentPage(name); 
    }) 
    .forCases({ 
        "Valid credentials": {email: authConfig.main.EMAIL, pass: authConfig.main.PASS}, 
        "Ignore leading space in email": {email: ' ' + authConfig.main.EMAIL, pass: authConfig.main.PASS}, 
        "Email in upper case": { 
         email: authConfig.main.EMAIL.toUpperCase(), 
         pass: authConfig.main.PASS, 
         disabled: true 
        } 
    }); 
    

Link to Github repository

+0

真好!看起來這是一個很好的解決方案,將嘗試將其適應我的測試!謝謝! – anasarbescu