pytest - simulate network failure












0














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?










share|improve this question






















  • 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
















0














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?










share|improve this question






















  • 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














0












0








0







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?










share|improve this question













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






share|improve this question













share|improve this question











share|improve this question




share|improve this question










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


















  • 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












1 Answer
1






active

oldest

votes


















0














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






share|improve this answer























    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
    });


    }
    });














    draft saved

    draft discarded


















    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









    0














    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






    share|improve this answer




























      0














      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






      share|improve this answer


























        0












        0








        0






        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






        share|improve this answer














        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







        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Nov 20 '18 at 12:15

























        answered Nov 20 '18 at 12:06









        Andrey Glazkov

        5421613




        5421613






























            draft saved

            draft discarded




















































            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.




            draft saved


            draft discarded














            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





















































            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







            Popular posts from this blog

            "Incorrect syntax near the keyword 'ON'. (on update cascade, on delete cascade,)

            Alcedinidae

            Origin of the phrase “under your belt”?