Automated Testing in Python with pytest, tox, and GitHub Actions
Ғылым және технология
Take your Python project to the next level of professionalism.
Automated testing in Python is an important way to take your Python project to the next level of dependability and professionalism. There are a lot of steps, but it's not too difficult to setup your tests to run automatically across multiple different operating systems and versions of Python whenever you push a commit or receive a pull request on your repository. We show you the entire process, step by step, to take a plain old project and turn it into an installable package with automated tests that run when you push to GitHub. We use pytest, mypy, and flake8 for testing, type checking, and code linting. Then we use tox to run all of these commands in isolated virtual environments. Finally, we use GitHub actions to run tox on a push or a pull request. Automated testing is the first and most important step in the more general world of continuous integration (CI), and continuous delivery or continuous deployment (CD). In this video we focus on automated testing, not on general CI/CD, as there is already PLENTY of material to cover.
― mCoding with James Murphy (mcoding.io)
Source code: github.com/mCodingLLC/SlapTha...
Other code: github.com/mCodingLLC/VideosS...
pytest docs: docs.pytest.org/en/latest/
mypy docs: mypy.readthedocs.io/en/stable...
flake8 docs: flake8.pycqa.org/en/latest/
setuptools (setup py and setup cfg) docs: setuptools.readthedocs.io/en/...
tox docs: tox.readthedocs.io/en/latest/
GitHub Actions docs: docs.github.com/en/actions
tox-gh-actions repo: github.com/ymyzk/tox-gh-actions
SUPPORT ME ⭐
---------------------------------------------------
Patreon: / mcoding
Paypal: www.paypal.com/donate/?hosted...
Other donations: mcoding.io/donate
Top patrons and donors: Laura M, Jameson, John Martin, Dragos C, Vahnekie, Pieter G, Sigmanificient, Casey G
BE ACTIVE IN MY COMMUNITY 😄
---------------------------------------------------
Discord: / discord
Github: github.com/mCodingLLC/
Reddit: / mcoding
Facebook: / james.mcoding
CHAPTERS
---------------------------------------------------
0:00 Intro
1:21 Overview of the video
2:56 Structuring your project
8:35 Pytest, mypy, flake8
10:58 Pytest features
18:34 Test multiple envs with tox
21:18 Test on commit with GH Actions
25:22 Readme badge
26:34 Thanks
Пікірлер: 350
Finally someone discussing project setup, directory structure, git workflows etc. There needs to be more videos like this.
@mCoding
2 жыл бұрын
Very welcome! Thanks for watching.
@syinx2301
2 жыл бұрын
superb!
@mandyokpoji8787
2 жыл бұрын
@@mCoding incredible work son.
@soyciro4623
2 жыл бұрын
totally agree! Please, more videos on this!
@jeevan1016
Жыл бұрын
True! need more videos on this topic
I've been blindly pattern matching for spinning up repos for awhile now and it's nice to see explanations for a lot of those choices. I also didn't realize all the pytest functionality I was missing. I like this longer/more detailed style too - it's necessary for training strong engineers. (Though, not sure if it's the best choice for KZread growth). Thanks for making this. I'll be recommending it to coworkers.
@mCoding
2 жыл бұрын
We'll see how this one performs. I already have a pretty sophisticated audience so maybe they'll love it! If not I'm fine with a video tanking now and again, I know some people will still find it useful. Thanks for watching as always!
@alexandergazo6064
2 жыл бұрын
@@mCoding man you are the only one with real content, with the aim to teach beyond basics. your structure is awesome. the editing style is top notch. keep it up please. you are great
Utterly brilliant walkthrough! Our company is currently implementing automated testing for a new project and all config requirements have worried me that I have no clue what's going on and would have no clue if stuff went wrong! This is so clearly explained and motivated, I feel perfectly equipped to ensure we can implement it all and know all our tests are run!
@mCoding
2 жыл бұрын
Amazing! I'm so glad I was able to help. Thanks for sharing 👍
The quality of this content *Chef's kiss*
@mCoding
2 жыл бұрын
Thanks!!
Project name: "Slap that like button" *with a characteristic look at the viewer LOL. You have really good oration. And good video, having recently implemented a lot of CI/CD stuff including this within the company I work for, it is great to see great tutorials on how to do this for others. Also, the great thing about fixtures is you can also return functions and classes and pass the parameters into that function inside the fixture by calling the fixture like fixture_name(args for the inner function of the fixture) or with a class you can also do fixture_name(args).method
@mCoding
2 жыл бұрын
Thanks for your kind words. Glad you found my video useful!
KZread is my Netflix when it comes to content related to programming, databases and DevOps, so I go through a ton of content regularly. but this video was one of THE most informative pieces of content I've ever watched. As a lower-intermediate Python programmer, making python apps installable has always been a head-scratcher for me and it hasn't been easy to find content which address almost all aspects of the process with clear guidelines. You just made my life MUCH easier and I thank you for that.
@mCoding
2 жыл бұрын
Glad I could help! Thanks for sharing.
Outstanding video. The only people that say package management is the worst part of python are those that haven’t tried to decipher the topics you cover in this video. Might be time to revisit as the landscape is changing quickly. Also, more of this is welcome!
This will be a great reference video, somewhat like a good stack overflow answer you keep referring :)
@mCoding
2 жыл бұрын
Thanks for the kind words!
This is by far your most advanced tutorial. Too much info in a single video but still super helpful. Thanks !
@mCoding
2 жыл бұрын
Don't feel like you have to watch it all at once. I see this very much as reference material that you can go back to over and over to get the bits you need. Thanks for watching!
@raffe01fu
2 жыл бұрын
@@mCoding I think this is great, that is just how i have / is currently using it. I have a small library mostly for internal use and can only fit in some time here and there for doing work on it. So this tutorial has taken a few weeks to test out and implement. But now i will feel much better doing changes to the library as i can much easier catch if (when) i break something. Cheers!
The perfect amount of info to get started with automated testing. Thank you!
@mCoding
2 жыл бұрын
Glad you enjoyed it! Thanks so much for the kind words!
one of the most important python tutorials I have ever seen. It covers a wide range of daily problems as python programmer.
@mCoding
2 жыл бұрын
Wow thank you! Glad you enjoyed 😀
Thank you for this great resource into the current mess of python packaging. It's something I've spent many hours trying to figure out, and now I know I missed a bunch. And with you handing a test setup on a silver platter, I now have no excuse to bring with formal testing. Once again, thank you. I really liked the longer format (when required) and am happy you didn't chop it up into parts. I would be really interested in similar in-depth videos on the things you mention in the video overview for example. If you could make a video on how to create a Python wrapper for a C library, I would be ecstatic.
@mCoding
2 жыл бұрын
You're welcome! Noted on those suggestions. I have a huge list of stuff to get to ... eventually 😀
This is great, I agree, finally someone talking about how to package a python project
Good God... So many config files
@danielgysi5729
2 жыл бұрын
Remember when Python was supposed to be simple and high level? Lol, what a mess
@mCoding
2 жыл бұрын
Enjoy ;)
Example code should be exemplary. I think you've done a good job.
Please make more videos like this. I've been having a lot of trouble when it comes to creating a github project. It's hard to find resources on project structure, git workflow, package structure, versioning, etc. If possible, it would be nice if you could create a series showing how to create and maintain a github repo. I want to understand how to increase versions, how to review pull requests and issues, how to write a good commit message, how to create tags/releases, how to create a documentation, and much more.
This essentially was my experience doing this for work, except I didn't have this video explaining everything and had to rely on the python documentation. Thanks a bunch!
@mCoding
2 жыл бұрын
I will probably use it as a reference for myself in the future 😉
Was literally trying to figure out testing for the past week, its like you know exactly what I'm struggling on! Great video as always
@mCoding
2 жыл бұрын
Great to hear I was able to help (again?)! 😀
The discussion on the project structure was fantastic, really insightful. It such an important aspect of a Python project, yet you don't see much information on it.
This is one of the best and most complete python test setup guide I have ever seen in text or video form. While I knew about all the things mentioned here, your clear and incremental explanation has definitely helped me refresh everything and their interconnections. I am going to point every newbie (to testing) to this video hereafter. Thank you.
@mCoding
2 жыл бұрын
Thank you very much i appreciate the recommendation!
I was originally only looking for KZread videos on pytest. With this video I found much more and it answered many questions that I have had regarding tox and GitHub integrations. Great video ... 👍👍👍
I was looking on Udemy for some python testing courses. Then I found your video on youtube - I do not need Udemy anymore :D Thanks for the great video.
I recently moved to a new company that uses Python for it's automated tests suites. I've had to spin up very quickly and your videos have been very helpful. Thank you for making these!
@mCoding
2 жыл бұрын
Great to hear! Best of luck at your new company!
Lost count of how many times I referenced, searched and shared this video with other people.
This video needs to be at millions of views this is the subtle additions to projects that add more depth to any code base and more to talk about during interviews and help you in sdnet QA and even site infrastructure developer
@mCoding
9 ай бұрын
We're on our way! Tell your friends and coworkers 😀
This is what I was looking for. Many thanks for covering these topics. I was specifically looking for how to install local package in current env, finally someone explained.
thanks a lot for this video. 4:14 & 7:37 > _"For automated testing, tests should run"_ [regardless the location of our source. Which's achieved by installing the project itself as a package.] i didn't understand the "import" part of the test_*.py files before, and got stuck there when i tried on my own several months ago. but this above part clears soo many things and i finally got my python pytests to work. thanks a lottttt again. i came here from binge watching ur latest video on python debugging. it just so happened that i was just restarting my python devt journey this time & was actually searching for some resource on pytest myself as the official doc didn't help at all. so, thanks for tooting this video there too.
@yash1152
Ай бұрын
not to self: * for applications using CLI arguments, do NOT use sys.argv directly. * use it via the formal parameter to the function (and set that to None by default). * this is similar to how c/java have `String[] args` as their formal parameter. oh lol, yet another approach combined from c. * this would allow that function to be called programmatically. * ... which makes writing tests for it easier and running 'em _much much_ faster.
best video on distilling all the different configuration files and why they are all needed - thanks for this!
wow, you simplified a lot this complicated topic. Many thanks!
I love this subject and I love this video. I'm glad this guy happened to make it a week ago, because it happens to be just what I need, when I need it. I'm stubbornly committing to TDD best-practices in my projects as I currently polish a template for my pytests.
This is pretty incredibly actually. I've done some very basic tests in the past, but never as complete or solid as this, not even close, thanks for this!
@mCoding
2 жыл бұрын
You're welcome, and thanks for the kind words.
Thank you very much, the video is clear, it goes through multiples subject deep enough to be useful, but not deep enough to get a too long video. Also, the rythm is very cool, you don't get bored, you go point by point, and it's a good pace. Again, thanks !
@mCoding
2 жыл бұрын
You're welcome! Glad you enjoyed it.
This is one of the most important python-related videos on the internet. Please do more long tutorials covering complex topics
@mCoding
Жыл бұрын
Thank you for noticing! This is probably my most useful video (so far) in my opinion, but preparing and recording takes forever! Feel free to suggest other topics you are interested in.
Really solid and easy to follow walkthrough, I really enjoy your clear and concise style.
@mCoding
2 жыл бұрын
Thanks so much for the kind words!
That was a lot of pure content. Just perfect! Subscribed: D Good luck, I believe in you ;)
Thank you for this video, goes exactly at the right pace and gives the right amount of info. I've been struggling to setup this "testing" while coding setup (coding is not my specialty, but in mechanical engineering it's becoming unavoidable nowadays to automate more and more parts of our job). You've given me a much clearer picture of what to do and how to do it. Will definitely share this to my colleagues, great job!
@mCoding
2 жыл бұрын
Happy to help! Thanks for watching!
Truly great and quality content. There should be more videos about this kind of topics. Please, more on this! Thanks
Excellent walkthrough! 😊 Thanks for describing the current state of affairs and where things are headed. I hope we don't end up in a situation where this gets so complex that it drives new comers away from Python. I am already on the fence when it comes to the type hint craziness.
Thanks a lot, this helped me in many ways. I'm currently working as a software developer but new to this field. And I did slap that like button.
@mCoding
2 жыл бұрын
Thanks very much!
Great video. A good amount of substance in under 30m... Deep enough without going too deep.
This is a great guide. I've done parts and pieces of this before, but this really helped put it all together.
@mCoding
2 жыл бұрын
Awesome so happy to help!
This video has a lot of useful content which is very rare these days
@mCoding
Жыл бұрын
Many thanks!
Thank you, very useful!
@mCoding
2 жыл бұрын
You're welcome!
Thank you so much. This is precisely the video I was looking for.
the setup cfg work that allows you to traverse across different directories to get & apply code had been so difficult for me to find concise information on (I didn't want to do any os.dir nonsense, just wanted to make my project into a recognizable package) you explained it so well & so quickly, that's more than I could've asked for
@mCoding
Жыл бұрын
Very glad I could provide some help!
Thanks. I used `unittest` but this guide worked well enough.
Very informative tutorial and glad to know I've been implementing these processes in my current projects with effectiveness 😅
I have been a month looking for this video. Thanks for explaining how to properly create and install a package.
@mCoding
2 жыл бұрын
You are very welcome! I'm glad it was useful to you.
Excellent video. I would love to see more content explaining things like setting up your longest_increasing_subsequence repository as well. Keep up the great content!
Exactly what I needed. Detailed & concise
@mCoding
2 жыл бұрын
Thanks so much!
This was very good, many thanks!
Thats amazing man... thanks for the tutorial!
This is a great guideline for getting started! Thanks a lot!
@mCoding
2 жыл бұрын
You're welcome thanks for watching!
Great tutorial. Thanks 👍👍👍
This guide helped a lot and was very well done. Thanks!
Really awesome video! Great great job. The only thing I think would be nice to add is that is a good practice to check your test fails first, then make it work. Moreover few words about the test-driven development would've been good, but I understand would've opened a way bigger topic.
I saw your poll about this being long. Long was the right choice
@mCoding
2 жыл бұрын
Thanks, I imagined a few ways of cutting it up but they just didn't make as much sense to me. I'm glad I went with this version (even though it's probably not going to get as many views, I think it's worth it).
Great video! This is one of those topics many people have wondered about but haven't explored themselves.
@mCoding
2 жыл бұрын
Glad you enjoyed it!
Thank you a lot @mCoding, it was a well-structured tutorial. It would be very fantastic if you make an additional tutorial that covers automated testing on Gitlab.
Holy shoot! Sooo many Nuggets in here! Thanks a lot! Very much appreciated!
@mCoding
Жыл бұрын
You're very welcome!
Amazing walkthrough!
@mCoding
2 ай бұрын
Thanks! It might be about time to update it... !
This video is gonna give me a raise. Absolute gold!
@mCoding
2 жыл бұрын
If you get a raise from this video be sure to become a Patron, I think deserve it at that point 😉
Thanks for this very nice tutorial! I wanna also learn all the things that you mentioned that you're not gonna discuss them in this video.
This is very cool and interesting. As a physics student I mainly just plug and play but good to know about all of this, especially that it seems just as 'fiddly' as using a makefile or cmake with C/C++ and external libraries.
Excellent video man, so clear and thorough.
@mCoding
Жыл бұрын
Thank you very much, glad you enjoyed!
Great tutorial! So much information.
I am very grateful for this video because this is when all the setuptools pyproject.toml setup.py setup.cfg etc. finally made sense to me, aside from the actual automated testing :-)
Amazing tutorial - comprehensive coverage and clear explanations. Thank you sir.
@mCoding
2 жыл бұрын
Very welcome!
Great video and I have made a lot of use of it setting up tests for my company, so thank you deeply - I would have spent many weeks trying to learn these concepts without this resource. If I could recommend one follow up video, it would be on storing secrets in your github environment and accessing them in your code as this is the only missing link that would make this presentation whole. Thank you again!
Wow thank you so much for pulling these topics all together
@mCoding
2 жыл бұрын
You are very welcome!
i had to cobble this knowledge together from documentation of all the features piece by piece over the course of a day and you just did it in half an hour (less, since i actually already had unittests) :D
Extremely helpful video thank you, your channel is a goldmine for me.
Absolutely bookmarking this for the future. You just saved future me probably weeks of work
@mCoding
2 жыл бұрын
I still go back and watch it myself from time to time! Always good to write things down!
OMG, this is going to make my life is much easier, thank you.
@mCoding
2 жыл бұрын
You're very welcome!
You're a star as always, eagerly waiting for you new videos
Your videos are simply great!!! Congratulations!!
@mCoding
2 жыл бұрын
Thank you!
Awesome! So understandable and straightforward
@mCoding
2 жыл бұрын
Glad to hear you liked it! Thanks for watching!
Amazing content as always!
This video is a gem 💎 congratulations
Good job mCoding.. more like this on pytest, hypothesis, asyncio, flask etc.. punchy, high signal to noise ratio. Well done. Have subscribed.
Great content, I liked it! I have been looking for KZread videos with pytest for unit tests in ML as part of the project setup. Thanks!
Awesome material!
Awesome video, we need more videos about good software development practices
Awesome video, thanks a lot !
Thanks for a video! All of your videos are awesome! Keep making it.
@mCoding
2 жыл бұрын
You're very welcome and thank you for your kind words!
awesome video! thanks!
Thank you very much! It is very informative video. It helps
An excellent companion video would be a docker file that includes the repo in this package and talks to a docker postgresql instance. I currently use a Makefile to document commands and make development easier. Such as mounting a local directory for daily development.
This is insanely good OMG
this was so clear and comprehensive...
@mCoding
2 жыл бұрын
Thanks!
This is exactly what I needed. Thanks so much !
@mCoding
2 жыл бұрын
Great to hear you found it useful! 😀
This was awesome. Thank you!
Excellent video, really well done for discussing how to do automated testing. But for tox, apparently it can be sped up. Instead of using tox without arguments you do tox -p -p is for parallelisation. In the case of my project it completed in about ~50 seconds compared to ~130 seconds(or 2 minutes and ~18 seconds). Ofc people's projects vary, but kinda wanna noted it
@mCoding
2 ай бұрын
Thanks and great tip!
Yey nice work! Thank you
Great, tnx! Please more about pytest)
Great video, this will be my resource for setting up any project automation Perfect amount of information. Amazing work, keep it up.
@mCoding
2 жыл бұрын
Awesome, thank you!
Your content is incredibly valuable and packed with useful information. Thank you. My humble wish: a video on asynchronous python with your excellent explanation would be great :)
@mCoding
2 жыл бұрын
Thank you very much! Async has been on the horizon for a long time, I'm thinking about it!
@sorvex9
2 жыл бұрын
Until that happens, i can recommend Sebastiaan Mathôt video on async python. It's short, to the point and he is very good at explaining things in simple manners.
I am only suscribing because of the comment "Its kind of a touchy subject for the python community but that's the state of affairs right now"
thanks to this, im finally feeling confident enough to release this one project I've been working on for reading binary data for fun. I've also just now realized how tedious getting testing to work can be, 14 commits later it works on all devices (3.8+ though because i guess Literal types are pretty new)
@mCoding
2 жыл бұрын
Awesome thanks for sharing!
Very impressive! SLAPP LIKE NOW