Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用javascript自动化测试更改javascript文件中的url_Javascript_Automation_Stubbing - Fatal编程技术网

如何使用javascript自动化测试更改javascript文件中的url

如何使用javascript自动化测试更改javascript文件中的url,javascript,automation,stubbing,Javascript,Automation,Stubbing,我正在尝试在自动化测试中修改javascript文件中的URL。这样我就可以指出一个服务的存根版本。我用于测试的框架是Serenity js(使用量角器) 在我的HTML DOM中,我有: main.js var DataService = (function () { function DataService(http) { this.http = http; } DataService.prototype.getStudentDetails = fu

我正在尝试在自动化测试中修改javascript文件中的URL。这样我就可以指出一个服务的存根版本。我用于测试的框架是Serenity js(使用量角器)

在我的HTML DOM中,我有:

main.js

var DataService = (function () {
    function DataService(http) {
        this.http = http;
    }
    DataService.prototype.getStudentDetails = function (id) {
        var parcel = this.http
            .get('http://127.0.0.1/endpoint/' + id)
            .map(function (res) {
            return __WEBPACK_IMPORTED_MODULE_2__student_model__["a"].createStudent(res.json());
        });
        return student;
    };
    return DataService;
}());
我需要更改的部分是
127.0.0.1/endpoint


我知道我使用
$.document.write
$()冷更改HTML DOM。append
但不知道如何更改/覆盖DOM元素。

这很简单,但有很多方法可以做到

  • 在运行测试之前,作为安装阶段的一部分,您可以使用
    sed
    awk
    脚本预处理
    main.js
    文件,并用其他内容替换所有出现的
    127…
    字符串
  • 将生产系统中的代码更改为从包含所有url端点的配置变量读取。然后,您可以在测试脚本中更改该对象
  • 使用测试脚本将函数替换为其他函数。这是@alok在注释中的建议,但是注释缺少
    prototype
    ,并且该方法也不应该被调用,因此代码应该如下所示:
  • #3的示例:

    当然,您可以用任何给定的函数替换
    DataService.prototype.getStudentDetails
    ,因为您可以完全控制它(除非它隐藏在闭包中)


    另外,试图通过使javascript更难被篡改来保护您的系统,这只是通过模糊性实现的安全性——这是不真实的。任何攻击者都可以读取网络请求,然后在
    curl
    或Postman中重放它们。

    这很简单,但是有很多方法可以做到这一点

  • 在运行测试之前,作为安装阶段的一部分,您可以使用
    sed
    awk
    脚本预处理
    main.js
    文件,并用其他内容替换所有出现的
    127…
    字符串
  • 将生产系统中的代码更改为从包含所有url端点的配置变量读取。然后,您可以在测试脚本中更改该对象
  • 使用测试脚本将函数替换为其他函数。这是@alok在注释中的建议,但是注释缺少
    prototype
    ,并且该方法也不应该被调用,因此代码应该如下所示:
  • #3的示例:

    当然,您可以用任何给定的函数替换
    DataService.prototype.getStudentDetails
    ,因为您可以完全控制它(除非它隐藏在闭包中)


    另外,试图通过使javascript更难被篡改来保护您的系统,这只是通过模糊性实现的安全性——这是不真实的。任何攻击者都可以读取网络请求,然后在
    curl
    或Postman中重播它们。

    您可以使用JS变量或“input hidden”字段。main.JS文件是现有的生产系统。我宁愿不更改源代码,因为它可能会打开其他用户的漏洞。我宁愿尝试改变“在飞行中”的现状。啊!你就是从那里来的!很抱歉,我完全误解了。另外,我能想到的唯一方法是调用
    var functionString=DataService.getStudentDetails(id).toString()
    。然后可以更改字符串并执行
    新函数(functionString)
    。请参见此处:您可以使用JS变量或“input hidden”字段。main.JS文件是一个现有的生产系统。我宁愿不更改源代码,因为它可能会打开其他用户的漏洞。我宁愿尝试改变“在飞行中”的现状。啊!你就是从那里来的!很抱歉,我完全误解了。另外,我能想到的唯一方法是调用
    var functionString=DataService.getStudentDetails(id).toString()
    。然后可以更改字符串并执行
    新函数(functionString)
    。看这里:@AndrewEvans很高兴听到。“你在三种方法中选择了哪一种?”安德烈·韦万斯很高兴听到。三种方法中你选择哪一种?
     const newFnString = DataService.prototype.getStudentDetails.toString()
                             .replace("127.0.0.1", "something.com");
     DataService.prototype.getStudentDetails = new Function(newFnString);