pytest - simulate network failure
I am attempting an integration test using pytest for my application developed in python3.7 and asyncio. The application is supposed to connect to a remote server and if the network fails, my application should detect this and attempt to reconnect at a specified interval. Typically, in my integration test, I have my remote server already running and listening on a TCP port. My application should connect to that port and I will check that the connection was successful. Then I need to simulate a network outage in which application looses connection to the server and test the behaviour of the application while the network is not operational and then I need to bring the network back online and confirm that the app will properly reconnect and perform it's tasks. For the purposes of my integration testing all this stuff is running on my localhost.
Does pytest already have something for this usecase or should I build some sort of proxy server myself? How would I go about doing this?
python tcp pytest
add a comment |
I am attempting an integration test using pytest for my application developed in python3.7 and asyncio. The application is supposed to connect to a remote server and if the network fails, my application should detect this and attempt to reconnect at a specified interval. Typically, in my integration test, I have my remote server already running and listening on a TCP port. My application should connect to that port and I will check that the connection was successful. Then I need to simulate a network outage in which application looses connection to the server and test the behaviour of the application while the network is not operational and then I need to bring the network back online and confirm that the app will properly reconnect and perform it's tasks. For the purposes of my integration testing all this stuff is running on my localhost.
Does pytest already have something for this usecase or should I build some sort of proxy server myself? How would I go about doing this?
python tcp pytest
This question would benefit from some sample code (MVCE). If it's a web request, responses is ideal. If not, the @patch decorator is helpful. In either case, isolating your network code to an easily-mocked class is a good idea. Then you can unit test the network code and mock it out elsewhere to keep your code suite less fragile. I'd put this in an answer, but the question isn't specific enough yet.
– Jim Stewart
Nov 3 '18 at 13:32
add a comment |
I am attempting an integration test using pytest for my application developed in python3.7 and asyncio. The application is supposed to connect to a remote server and if the network fails, my application should detect this and attempt to reconnect at a specified interval. Typically, in my integration test, I have my remote server already running and listening on a TCP port. My application should connect to that port and I will check that the connection was successful. Then I need to simulate a network outage in which application looses connection to the server and test the behaviour of the application while the network is not operational and then I need to bring the network back online and confirm that the app will properly reconnect and perform it's tasks. For the purposes of my integration testing all this stuff is running on my localhost.
Does pytest already have something for this usecase or should I build some sort of proxy server myself? How would I go about doing this?
python tcp pytest
I am attempting an integration test using pytest for my application developed in python3.7 and asyncio. The application is supposed to connect to a remote server and if the network fails, my application should detect this and attempt to reconnect at a specified interval. Typically, in my integration test, I have my remote server already running and listening on a TCP port. My application should connect to that port and I will check that the connection was successful. Then I need to simulate a network outage in which application looses connection to the server and test the behaviour of the application while the network is not operational and then I need to bring the network back online and confirm that the app will properly reconnect and perform it's tasks. For the purposes of my integration testing all this stuff is running on my localhost.
Does pytest already have something for this usecase or should I build some sort of proxy server myself? How would I go about doing this?
python tcp pytest
python tcp pytest
asked Nov 3 '18 at 13:18
Liviu
3571518
3571518
This question would benefit from some sample code (MVCE). If it's a web request, responses is ideal. If not, the @patch decorator is helpful. In either case, isolating your network code to an easily-mocked class is a good idea. Then you can unit test the network code and mock it out elsewhere to keep your code suite less fragile. I'd put this in an answer, but the question isn't specific enough yet.
– Jim Stewart
Nov 3 '18 at 13:32
add a comment |
This question would benefit from some sample code (MVCE). If it's a web request, responses is ideal. If not, the @patch decorator is helpful. In either case, isolating your network code to an easily-mocked class is a good idea. Then you can unit test the network code and mock it out elsewhere to keep your code suite less fragile. I'd put this in an answer, but the question isn't specific enough yet.
– Jim Stewart
Nov 3 '18 at 13:32
This question would benefit from some sample code (MVCE). If it's a web request, responses is ideal. If not, the @patch decorator is helpful. In either case, isolating your network code to an easily-mocked class is a good idea. Then you can unit test the network code and mock it out elsewhere to keep your code suite less fragile. I'd put this in an answer, but the question isn't specific enough yet.
– Jim Stewart
Nov 3 '18 at 13:32
This question would benefit from some sample code (MVCE). If it's a web request, responses is ideal. If not, the @patch decorator is helpful. In either case, isolating your network code to an easily-mocked class is a good idea. Then you can unit test the network code and mock it out elsewhere to keep your code suite less fragile. I'd put this in an answer, but the question isn't specific enough yet.
– Jim Stewart
Nov 3 '18 at 13:32
add a comment |
1 Answer
1
active
oldest
votes
Pytest doesn't have any feature to simulate network failure because it's just test runner.
You need to use external mock-server that can emulate connection failure or long response time. For this purpose I use and recommend mock-server Mountebank: http://www.mbtest.org/
With Mountebank you will be able to emulate any response from remote server. You can manage Mountebank behavior directly by API or use client libraries: http://www.mbtest.org/docs/clientLibraries
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53131726%2fpytest-simulate-network-failure%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Pytest doesn't have any feature to simulate network failure because it's just test runner.
You need to use external mock-server that can emulate connection failure or long response time. For this purpose I use and recommend mock-server Mountebank: http://www.mbtest.org/
With Mountebank you will be able to emulate any response from remote server. You can manage Mountebank behavior directly by API or use client libraries: http://www.mbtest.org/docs/clientLibraries
add a comment |
Pytest doesn't have any feature to simulate network failure because it's just test runner.
You need to use external mock-server that can emulate connection failure or long response time. For this purpose I use and recommend mock-server Mountebank: http://www.mbtest.org/
With Mountebank you will be able to emulate any response from remote server. You can manage Mountebank behavior directly by API or use client libraries: http://www.mbtest.org/docs/clientLibraries
add a comment |
Pytest doesn't have any feature to simulate network failure because it's just test runner.
You need to use external mock-server that can emulate connection failure or long response time. For this purpose I use and recommend mock-server Mountebank: http://www.mbtest.org/
With Mountebank you will be able to emulate any response from remote server. You can manage Mountebank behavior directly by API or use client libraries: http://www.mbtest.org/docs/clientLibraries
Pytest doesn't have any feature to simulate network failure because it's just test runner.
You need to use external mock-server that can emulate connection failure or long response time. For this purpose I use and recommend mock-server Mountebank: http://www.mbtest.org/
With Mountebank you will be able to emulate any response from remote server. You can manage Mountebank behavior directly by API or use client libraries: http://www.mbtest.org/docs/clientLibraries
edited Nov 20 '18 at 12:15
answered Nov 20 '18 at 12:06
Andrey Glazkov
5421613
5421613
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53131726%2fpytest-simulate-network-failure%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
This question would benefit from some sample code (MVCE). If it's a web request, responses is ideal. If not, the @patch decorator is helpful. In either case, isolating your network code to an easily-mocked class is a good idea. Then you can unit test the network code and mock it out elsewhere to keep your code suite less fragile. I'd put this in an answer, but the question isn't specific enough yet.
– Jim Stewart
Nov 3 '18 at 13:32