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



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

在我的HTML DOM中,我有:

<script type="text/javascript" src="main.js"></script>

主.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$().append冷更改 HTML DOM,但不知道如何更改/覆盖 DOM 元素。

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

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

#3 的例子:

const newFnString = DataService.prototype.getStudentDetails.toString()
.replace("127.0.0.1", "something.com");
DataService.prototype.getStudentDetails = new Function(newFnString);

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

附言:试图通过更难篡改javascript来保护你的系统,这只是通过默默无闻的安全性 - 这不是真实的。任何攻击者都可以读取网络请求,并在curl或Postman中重放它们。

最新更新