<p>正如@Kie所提到的,<code>configure_endpoint</code>实现是不够的,如果您要在Selenium Python代码中存根整个服务器端的话。您需要一个web服务器或任何通过HTTP响应测试环境中的请求的服务器。在</p>
<p>看来问题的一部分是关于客户端代码的测试。我看到的是,您试图对客户端逻辑进行单元测试,但是使用集成测试套件来检查这个逻辑(这很奇怪)。在</p>
<p>主要思路如下。在</p>
<p>您正在尝试测试客户端代码。所以,让我们也在客户端进行mocks!因为这部分代码完全与客户端相关。在</p>
<p>如果您真的想要mock,而不是stub(注意这里的区别:<a href="https://stackoverflow.com/a/3459491/882187">https://stackoverflow.com/a/3459491/882187</a>),那么在Javascript代码中模拟HTTP请求是一种更好的方法。只是因为您测试的是客户端代码,而不是服务器端逻辑的某些部分。在</p>
<p>将它与服务器端隔离开来是一个很好的主意,当你的项目变得越来越大,而越来越多的端点将会出现时,你会喜欢的。在</p>
<p>例如,可以使用以下方法:</p>
<pre><code>var restResponder = function() { // the original responder your client-side app will use
this.getCurrentPresident = function(successCallback) {
$.get('/presidents/current', callback);
}
};
var createMockResponder = function(president, party){ // factory that creates mocks
var myPresident = president;
var myParty = party;
return function() {
this.getCurrentPresident = function (successCallback) {
successCallback({"name": myPresident, "party": myParty});
}
};
}
// somewhere swap the original restResponder with new mockResponder created by 'createMockResponder'
// then use it in your app:
function drawColor(restResponder, backgroundEl) {
restResponder.getCurrentPresident(function(data){
if (data.party == "Democrat") $(backgroundEl).style('background-color', 'blue')
else if (data.party == "Republican") $(backgroundEl).style('background-color', 'red')
else console.info('Some strange response from server... Nevermind...');
});
}
</code></pre>
<p>实际上,这个实现取决于你在客户端有什么作为框架。如果<code>jQuery</code>,那么我的示例就足够了,但是它看起来非常冗长。如果你有更高级的东西,比如<code>AngularJS</code>,你可以用2-3行代码来做同样的事情:</p>
^{pr2}$
<p>查看文档:<a href="https://docs.angularjs.org/api/ngMock/service/" rel="nofollow noreferrer">https://docs.angularjs.org/api/ngMock/service/</a>$httpBackend</p>
<p>如果您仍然坚持这个想法,请在Selenium测试中使用mocks
试试这个项目:<a href="https://turq.readthedocs.io/en/latest/" rel="nofollow noreferrer">https://turq.readthedocs.io/en/latest/</a></p>
<p>它与Python DSL一起用于描述REST响应程序。
使用<code>turq</code>您的模拟将如下所示:</p>
<pre><code>path('/presidents/current').json({'name':'Barack Obama', 'party': 'Democrat'}, jsonp=False)
</code></pre>
<p>另外,我建议尝试stub而不是mock,并使用以下Python模块:<code>mock-server</code><a href="https://pypi.python.org/pypi/mock-server/0.3.7" rel="nofollow noreferrer">https://pypi.python.org/pypi/mock-server/0.3.7</a>
您需要创建包含相应的预填充JSON响应的目录布局,并添加一些样板代码,以便使<code>mock-server</code>响应为'本地主机:8080'. 示例的目录布局如下所示:</p>
<pre><code>stub_obama/
presidents/
current/
GET_200.json # will contain {"name": "Barack Obama", "party": "Democrat"}
stub_trump/
presidents/
current/
GET_200.json # will contain {"name": "Donald Trump", "party": "Republican"}
</code></pre>
<p>但是<code>mock_server</code>是基于Tornado的,我认为它对于在测试中使用是非常沉重的解决方案。在</p>
<p>我希望,我的回答是有益的和信息丰富的。欢迎讨论!我用Selenium做了大量的项目,大大小小的测试,测试了客户端和服务器端。在</p>