【问题标题】:Pass Json to karate-config.js file将 Json 传递给 karate-config.js 文件
【发布时间】:2018-04-06 10:42:12
【问题描述】:

我有超过 6 个环境,我必须针对这些环境运行相同的一组 rest api 脚本。出于这个原因,我将所有测试数据和端点/资源路径存储在一个 json 文件中。然后我尝试将此 json 文件读入我的 karate-config.js 文件,这是因为我想获取与从命令行 (karate.env) 传递的环境相对应的数据,该环境正在读入我的空手道-config.js 文件

以下是我的 json 文件示例

[
  {
    "qa":{
      "username_cm_on":"test_cm_on_qa",
      "password_cm_on":"Test123$",
      "nonadmin_username_cm_on":"test_non_admin_cm_on_qa",
      "nonadmin_password_cm_on":"Test123$",
      "username_cm_off":"test_cm_off_qa",
      "password_cm_off":"Test123$",
      "nonadmin_username_cm_off":"test_non_admin_cm_off_qa",
      "nonadmin_password_cm_off":"Test123$",
      "zuul_urls":{
        "home-sec-uri":"https://qa.abc.com/qa/home-sec-uri",
        "home-res-uri":"https://qa.abc.com/qa/home-res-uri"
      }
    }
  },
  {
    "uat":{
      "username_cm_on":"test_cm_on_uat",
      "password_cm_on":"Test123$",
      "nonadmin_username_cm_on":"test_non_admin_cm_on_uat",
      "nonadmin_password_cm_on":"Test123$",
      "username_cm_off":"test_cm_off_uat",
      "password_cm_off":"Test123$",
      "nonadmin_username_cm_off":"test_non_admin_cm_off_uat",
      "nonadmin_password_cm_off":"Test123$",
      "zuul_urls":{
        "home-sec-uri":"https://uat.abc.com/qa/home-sec-uri",
        "home-res-uri":"https://uat.abc.com/qa/home-res-uri"
      }
    }
  }
]

下面是我的 karate-config.js 文件

function() {
  // var env = karate.env; // get system property 'karate.env'
  var env = 'qa';
  var cm = 'ON';
  var envData =  call read('classpath:env_data.json'); //require("./env_data.json");
  // write logic to read data from the json file _ Done, need testing

  karate.log('karate.env system property was:', env);

  switch(env) {
    case "qa":
        if(cm === 'ON'){
            config.adminusername_cm_on = getData().username_cm_on;
            config.adminpassword_cm_on = "";
            config.nonadminusername_cm_on = getData().nonadmin_username_cm_on;
            config.nonadminpassword_cm_on = "";
        }else if(cm === "OFF") {
            config.adminusername_cm_off = getData().username_cm_off;
            config.adminpassword_cm_off = "";
            config.nonadminusername_cm_off = getData().nonadmin_username_cm_off;
            config.nonadminpassword_cm_off = "";
        }
        break;
    case "uat":
        break;
    default:
        break;
  }

  // This method will return the data from the env_data.json file
  var getData = function() {
      for(var i = 0; i < obj.length; i++) {
          for(var e in obj[i]){
            var username_cm_on = obj[i][e]['username_cm_on'];
            var nonadmin_username_cm_on = obj[i][e]['nonadmin_username_cm_on'];
            var username_cm_off = obj[i][e]['username_cm_off'];
            var nonadmin_username_cm_off = obj[i][e]['nonadmin_username_cm_off'];
              return {
                username_cm_on: username_cm_on,
                nonadmin_username_cm_on: nonadmin_username_cm_on,
                username_cm_off: username_cm_off,
                nonadmin_username_cm_off: nonadmin_username_cm_off
              }
          }
      }
    }

  var config = {
    env: env,
    data: getData(),
  }

  return config;
}

我尝试了几种方法将 env-data.json 文件加载到 karate-config.js 中,如下所示

var envData =  call read('classpath:env_data.json');

我知道以上内容无效,来自Karate - How to import json dataPeter Thomas 的这个 stackover 流答案Peter Thomas

所以,试试下面的

var envData =  read('classpath:env_data.json');
var envData =  require("./env_data.json");
var envData =  require('./env_data.json');

但是,仍然面临读取 json 文件的问题。感谢您对此的帮助。

【问题讨论】:

    标签: javascript json karate


    【解决方案1】:

    我认为您的 JSON 过于复杂。您只需要一个对象而不需要顶级数组。只需将其用作env_data.json

    {
       "qa":{
          "username_cm_on":"test_cm_on_qa",
          "password_cm_on":"Test123$",
          "nonadmin_username_cm_on":"test_non_admin_cm_on_qa",
          "nonadmin_password_cm_on":"Test123$",
          "username_cm_off":"test_cm_off_qa",
          "password_cm_off":"Test123$",
          "nonadmin_username_cm_off":"test_non_admin_cm_off_qa",
          "nonadmin_password_cm_off":"Test123$",
          "zuul_urls":{
             "home-sec-uri":"https://qa.abc.com/qa/home-sec-uri",
             "home-res-uri":"https://qa.abc.com/qa/home-res-uri"
          }
       },
       "uat":{
          "username_cm_on":"test_cm_on_uat",
          "password_cm_on":"Test123$",
          "nonadmin_username_cm_on":"test_non_admin_cm_on_uat",
          "nonadmin_password_cm_on":"Test123$",
          "username_cm_off":"test_cm_off_uat",
          "password_cm_off":"Test123$",
          "nonadmin_username_cm_off":"test_non_admin_cm_off_uat",
          "nonadmin_password_cm_off":"Test123$",
          "zuul_urls":{
             "home-sec-uri":"https://uat.abc.com/qa/home-sec-uri",
             "home-res-uri":"https://uat.abc.com/qa/home-res-uri"
          }
       }
    }
    

    然后这个karate-config.js 将起作用:

    function() {
      var env = 'qa'; // karate.env
      var temp = read('classpath:env_data.json');
      return temp[env];
    }
    

    您的测试可以更具可读性:

    Given url zuul_urls['home-sec-uri']
    

    如果您无法理解其工作原理,请参阅此答案:https://stackoverflow.com/a/59162760/143475

    【讨论】:

    • 这太棒了,解决了我面临的问题。此外,作为 json 对象而不是 json 数组进行处理的一种更简洁的方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多