Automated Testing in Python with pytest, tox, and GitHub Actions
Vložit
- čas přidán 4. 07. 2024
- 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 - Věda a technologie
Finally someone discussing project setup, directory structure, git workflows etc. There needs to be more videos like this.
Very welcome! Thanks for watching.
superb!
@@mCoding incredible work son.
totally agree!
Please, more videos on this!
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 CZcams growth). Thanks for making this. I'll be recommending it to coworkers.
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!
@@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!
Amazing! I'm so glad I was able to help. Thanks for sharing 👍
CZcams 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.
Glad I could help! Thanks for sharing.
The perfect amount of info to get started with automated testing. Thank you!
Glad you enjoyed it! Thanks so much for the kind words!
This is great, I agree, finally someone talking about how to package a python project
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
Great to hear I was able to help (again?)! 😀
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.
You're welcome! Noted on those suggestions. I have a huge list of stuff to get to ... eventually 😀
This will be a great reference video, somewhat like a good stack overflow answer you keep referring :)
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 !
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!
@@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!
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.
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
Thanks for your kind words. Glad you found my video useful!
The quality of this content *Chef's kiss*
Thanks!!
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!
I will probably use it as a reference for myself in the future 😉
one of the most important python tutorials I have ever seen. It covers a wide range of daily problems as python programmer.
Wow thank you! Glad you enjoyed 😀
I was originally only looking for CZcams 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 ... 👍👍👍
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.
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 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!
You're welcome, and thanks for the kind words.
best video on distilling all the different configuration files and why they are all needed - thanks for this!
Good God...
So many config files
Remember when Python was supposed to be simple and high level? Lol, what a mess
Enjoy ;)
Example code should be exemplary. I think you've done a good job.
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.
Thank you very much i appreciate the recommendation!
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 !
You're welcome! Glad you enjoyed it.
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!
Happy to help! Thanks for watching!
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.
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!
Great to hear! Best of luck at your new company!
I have been a month looking for this video. Thanks for explaining how to properly create and install a package.
You are very welcome! I'm glad it was useful to you.
Really solid and easy to follow walkthrough, I really enjoy your clear and concise style.
Thanks so much for the kind words!
This is a great guide. I've done parts and pieces of this before, but this really helped put it all together.
Awesome so happy to help!
This is one of the most important python-related videos on the internet. Please do more long tutorials covering complex topics
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.
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
We're on our way! Tell your friends and coworkers 😀
That was a lot of pure content. Just perfect! Subscribed: D
Good luck, I believe in you ;)
Truly great and quality content.
There should be more videos about this kind of topics.
Please, more on this! Thanks
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.
Thanks very much!
wow, you simplified a lot this complicated topic. Many thanks!
Holy shoot! Sooo many Nuggets in here! Thanks a lot! Very much appreciated!
You're very welcome!
Great video! This is one of those topics many people have wondered about but haven't explored themselves.
Glad you enjoyed it!
Exactly what I needed. Detailed & concise
Thanks so much!
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.
This video is gonna give me a raise. Absolute gold!
If you get a raise from this video be sure to become a Patron, I think deserve it at that point 😉
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 :-)
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.
Thank you so much. This is precisely the video I was looking for.
This is a great guideline for getting started! Thanks a lot!
You're welcome thanks for watching!
Absolutely bookmarking this for the future. You just saved future me probably weeks of work
I still go back and watch it myself from time to time! Always good to write things down!
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.
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!
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!
Wow thank you so much for pulling these topics all together
You are very welcome!
Excellent video man, so clear and thorough.
Thank you very much, glad you enjoyed!
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
Very glad I could provide some help!
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.
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!
Very informative tutorial and glad to know I've been implementing these processes in my current projects with effectiveness 😅
This is exactly what I needed. Thanks so much !
Great to hear you found it useful! 😀
Great video. A good amount of substance in under 30m... Deep enough without going too deep.
Thanks for a video! All of your videos are awesome! Keep making it.
You're very welcome and thank you for your kind words!
Thats amazing man... thanks for the tutorial!
Awesome! So understandable and straightforward
Glad to hear you liked it! Thanks for watching!
This guide helped a lot and was very well done. Thanks!
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
You're a star as always, eagerly waiting for you new videos
OMG, this is going to make my life is much easier, thank you.
You're very welcome!
Lost count of how many times I referenced, searched and shared this video with other people.
Thank you, very useful!
You're welcome!
Amazing tutorial - comprehensive coverage and clear explanations. Thank you sir.
Very welcome!
This is insanely good OMG
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.
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)
Awesome thanks for sharing!
Extremely helpful video thank you, your channel is a goldmine for me.
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.
Amazing content as always!
Your videos are simply great!!! Congratulations!!
Thank you!
Amazing walkthrough!
Thanks! It might be about time to update it... !
Great video, this will be my resource for setting up any project automation
Perfect amount of information.
Amazing work, keep it up.
Awesome, thank you!
Last time I was this early, my tests were still failing.
Yey nice work! Thank you
This video has a lot of useful content which is very rare these days
Many thanks!
Thanks. I used `unittest` but this guide worked well enough.
Awesome video, we need more videos about good software development practices
This was very good, many thanks!
This is very useful information. Thank you. It would be great to also see automated documentation via sphinx or another alternative.
this was so clear and comprehensive...
Thanks!
Great content, I liked it! I have been looking for CZcams videos with pytest for unit tests in ML as part of the project setup. Thanks!
This was awesome. Thank you!
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.
Good job mCoding.. more like this on pytest, hypothesis, asyncio, flask etc.. punchy, high signal to noise ratio. Well done. Have subscribed.
Awesome material!
Great tutorial! So much information.
Awesome video, thanks a lot !
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 :)
Thank you very much! Async has been on the horizon for a long time, I'm thinking about it!
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.
Great tutorial.
Thanks 👍👍👍
This video is a gem 💎 congratulations
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.
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.
This video is excellent :) Hope you make more like this!
Thank you! Will do!
The video was super useful so I SLAPPED LIKE NOW!
Thanks!
Great, tnx! Please more about pytest)
awesome video! thanks!
I saw your poll about this being long. Long was the right choice
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).