量角器中的数据驱动测试

时间:2016-07-06 10:07:59

标签: json testing automation protractor data-driven-tests

我是量角器的新手。任何人都可以指导我使用量角器进行数据驱动测试。下面是代码,配置文件和testdata.json文件。

'use strict';

var testData = require('../example/Test Data/Test.json');

describe('LoginPage', function() {

var loginData = require('../example/Test Data/Test.json');

testData.forEach(function (data) {
    it("data.description", function (data) {
        browser.get("http://127.0.0.1:8080/#/login");
element(by.model("username")).sendKeys(data.username);
element(by.model("password")).sendKeys(data.passwordField); 
element(by.buttonText("Authenticate")).click();

});
});
});  

配置文件:

 // An example configuration file.
exports.config = {
directConnect: true,

//seleniumAddress: 'http://localhost:4444/wd/hub',
// Capabilities to be passed to the webdriver instance.
capabilities: {
'browserName': 'chrome'

},

// Framework to use. Jasmine is recommended.
framework: 'jasmine',

// Spec patterns are relative to the current working directory when
// protractor is called.
specs: ['Testpage.js'],

// Options to be passed to Jasmine.
jasmineNodeOpts: {
defaultTimeoutInterval: 30000
}
};

Json文件:

[
{
 "username": "admin",
 "passwordField": "admin"
},

{
"username": "admin1",
"passwordField": "admin2"
}
]

问题是,它不是在获取数据,而是在所有输入框中编写未定义的内容。请帮忙

5 个答案:

答案 0 :(得分:5)

我们有jasmine-data-provider软件包,它将帮助我们使用Protractor进行数据驱动测试。

Code Snippet:

var using = require(‘jasmine-data-provider);
var loginData = require('../example/Test Data/Test.json');


 describe('Data driven test spec', function () { /*define sets of input data as array in method called arrayOfData*/
     function arrayOfData() {
       return [
              {
                "username": "admin",
                "passwordField": "admin"
              },

             {
              "username": "admin1",
              "passwordField": "admin2"
              }
          ]
         //or return loginData json object here
   } /*below one will loop the test case based on data size and pass single data set every time till complete the end of array*/

using(arrayofData, function (inputData) {
    it('test case logic to be executed for each set of data', function () {
        browser.get("http://127.0.0.1:8080/#/login");
        element(by.model("username")).sendKeys(inputData.username);
        element(by.model("password")).sendKeys(inputData.passwordField); 
        element(by.buttonText("Authenticate")).click();
    });
  });
 });

注意:如果您的计算机上尚未安装jasmine-data-provider软件包,请在运行测试脚本之前通过运行以下命令进行安装。

 npm install jasmine-data-provider

答案 1 :(得分:3)

我假设它是一个对象数组,你可以迭代每个数组元素并直接访问它的内容而你不需要testdata.forEach(),你可以试试这样的东西 -

 'use strict';

var testData = require('../example/Test Data/Test.json');

describe('LoginPage', function() {

it("data.description", function () {
    browser.get("http://127.0.0.1:8080/#/login");
    element(by.model("username")).sendKeys(testData[0].username);
    element(by.model("password")).sendKeys(testData[0].passwordField); 
    element(by.buttonText("Authenticate")).click();

   });
  });
 });  

我还没有测试过上面的代码,您应该使用页面对象,而不是在测试中直接使用它们。

答案 2 :(得分:1)

使用map函数的一种更简单的方法:

var testParams = testConfig.testArray;
testParams.map(function(testdata) {
        it('write your test here', function() {
          console.log('Username: ', testData.username);
         });
 });

答案 3 :(得分:0)

我认为你的方法很合理。您未定义的原因是因为您将数据放入“完成”状态。参数。它将数据设置为“完成”。 ' it'传递的对象。函数调用你定义的函数。

testData.forEach(function (data) { it("data.description", function (data) {

应该是

testData.forEach(function (data) { it("data.description", function () {

答案 4 :(得分:0)

第二个答案更为突出。仅在此处添加一下,如果您想从Excel工作表中读取数据然后执行数据驱动测试,那么此视频非常有用: https://www.youtube.com/watch?v=vzvC4dYE84Q