Coder Social home page Coder Social logo

Comments (3)

darrenburns avatar darrenburns commented on June 5, 2024 1

Perhaps I'm misunderstanding but the observed behaviour is what I would expect.

Here's the output explained line by line, from my understanding:

The parent Ward process collects the 1 test:

Ward collected 1 tests in 0.17 seconds.

The fork now happens, meaning there are now two Python processes running Ward, and both parent and child processes refer to the same single test.

The SIGINT is received by the parent process, which cancels the run in that process only. When this happens, the parent process prints the following message to the terminal:

[WARD] Run cancelled - results for tests that ran shown below.

NO_TESTS_FOUND in 1.18 seconds

(The NO_TESTS_FOUND message should probably be NO_TESTS_RUN, because in this case the test was found, but was cancelled before it was run).

The child process is still running at this point, and execution enters the if pid == 0 block, eventually hitting expect(True).equals(True), which results in a passing test. In turn, the child process prints:

 PASS  test_SSH:69: My test that forks                                                                                                                                                        

..............................................................................................................................................................................................
 
SUCCESS in 1.24 seconds [ 1 passed ]

Note that the parent process exits with a non-zero exit code, because from its perspective no tests were run.

I also performed the same test using pytest and got the same outcome:

image

Do you have a specific use-case for using os.fork in a test?

from ward.

drakes00 avatar drakes00 commented on June 5, 2024

I agree that the behavior seems rational given the fork.
I wish I could tell ward to only treat one of the processes in order to only have the right output.
One solution I just though may be to change SIGINT to SIGKILL in order to stop the father's ward. Yet, it feels quite dirty.

The point of the forked test was to run some kind of sockerserver.TCPServer().server_forever() and in parallel, make GET requests. I managed to avoid the fork with some refactoring.

Thanks

from ward.

darrenburns avatar darrenburns commented on June 5, 2024

@drakes00 Glad to hear you managed to sort it.

I don't know what approach you've taken, but for that sort of thing, I'd recommend defining a fixture that starts the server in a separate process (look at multiprocessing module), and tears it down after.

The Teardown Code section of the following page may be useful: https://wardpy.com/guide/fixtures

from ward.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.