Date: Mon, 24 May 2021 20:00:00 -0400
<div class="wp-block-jetpack-markdown"><h2>Summary</h2> <p>Unit tests are an important tool to ensure the proper functioning of your application, but writing them can be a chore. Stephan Lukasczyk wants to reduce the monotony of the process for Python developers. As part of his PhD research he created the Pynguin project to automate the creation of unit tests. In this episode he explains the complexity involved in generating useful tests for a dynamic language, how he has designed Pynguin to address the challenges, and how you can start using it today for your own work.</p> <h2>Announcements</h2> <ul> <li>Hello and welcome to Podcast.__init__, the podcast about Python and the people who make it great.</li> <li>When you’re ready to launch your next app or want to try a project you hear about on the show, you’ll need somewhere to deploy it, so take a look at our friends over at Linode. With the launch of their managed Kubernetes platform it’s easy to get started with the next generation of deployment and scaling, powered by the battle tested Linode platform, including simple pricing, node balancers, 40Gbit networking, dedicated CPU and GPU instances, and worldwide data centers. Go to <a href="https://www.pythonpodcast.com/linode?utm_source=rss&utm_medium=rss">pythonpodcast.com/linode</a> and get a $100 credit to try out a Kubernetes cluster of your own. And don’t forget to thank them for their continued support of this show!</li> <li>We’ve all been asked to help with an ad-hoc request for data by the sales and marketing team. Then it becomes a critical report that they need updated every week or every day. Then what do you do? Send a CSV via email? Write some Python scripts to automate it? But what about incremental sync, API quotas, error handling, and all of the other details that eat up your time? Today, there is a better way. With Census, just write SQL or plug in your dbt models and start syncing your cloud warehouse to SaaS applications like Salesforce, Marketo, Hubspot, and many more. Go to <a href="https://www.pythonpodcast.com/census?utm_source=rss&utm_medium=rss">pythonpodcast.com/census</a> today to get a free 14-day trial.</li> <li>Are you bored with writing scripts to move data into SaaS tools like Salesforce, Marketo, or Facebook Ads? Hightouch is the easiest way to sync data into the platforms that your business teams rely on. The data you’re looking for is already in your data warehouse and BI tools. Connect your warehouse to Hightouch, paste a SQL query, and use their visual mapper to specify how data should appear in your SaaS systems. No more scripts, just SQL. Supercharge your business teams with customer data using Hightouch for Reverse ETL today. Get started for free at <a href="https://www.pythonpodcast.com/hightouch?utm_source=rss&utm_medium=rss">pythonpodcast.com/hightouch</a>.</li> <li>Your host as usual is Tobias Macey and today I’m interviewing Stephan Lukasczyk about Pynguin, the PYthoN General UnIt test geNerator</li> </ul> <h2>Interview</h2> <ul> <li>Introductions</li> <li>How did you get introduced to Python?</li> <li>Can you describe what Pynguin is and the story behind it?</li> <li>What are the problems that Pynguin is designed to solve?</li> <li>What other projects are you drawing inspiration from?</li> <li>What are some of the use cases for automatic test generation?</li> <li>How is Pynguin implemented? <ul> <li>What are the challenges that the dynamic nature of Python introduces?</li> <li>What are some of the packages and libraries that have been most helpful while building Pynguin?</li> </ul> </li> <li>Can you talk through the workflow of using Pynguin to generate tests for a project? <ul> <li>What are some of the limitations on what kinds of projects Pynguin can be used for?</li> <li>What are some design or implementation strategies in the code that you are generating tests for that will help make Pynguin’s job easier?</li> </ul> </li> <li>Once a test suite has been created, what are the next steps?</li> <li>What are some of the initial assumptions or goals of the project that have been revised or challenged once you began implementing it?</li> <li>What are the most interesting, innovative, or unexpected ways that you have seen Pynguin used?</li> <li>What are the most interesting, unexpected, or challenging lessons that you have learned while working on Pynguin?</li> <li>When is Pynguin the wrong choice?</li> <li>What do you have planned for the future of Pynguin?</li> </ul> <h2>Keep In Touch</h2> <ul> <li>Related to Pynguin: best via <a href="https://github.com/se2p/pynguin?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">GitHub</a></li> <li>Find me on <a href="https://twitter.com/erdmaennchen42?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Twitter</a></li> </ul> <h2>Picks</h2> <ul> <li>Tobias <ul> <li><a href="https://concourse-ci.org/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Concourse CI</a></li> </ul> </li> <li>Stephan <ul> <li><a href="https://tourism.passau.de/leisure-sports/cycling/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Cycling</a></li> <li>Take care of your health</li> </ul> </li> </ul> <h2>Closing Announcements</h2> <ul> <li>Thank you for listening! Don’t forget to check out our other show, the <a href="https://feeds.fireside.fm/pythonpodcast/rss">Data Engineering Podcast</a> for the latest on modern data management.</li> <li>Visit the <a href="https://www.pythonpodcast.com?utm_source=rss&utm_medium=rss">site</a> to subscribe to the show, sign up for the mailing list, and read the show notes.</li> <li>If you’ve learned something or tried out a project from the show then tell us about it! Email <a href="mailto:hosts@podcastinit.com">hosts@podcastinit.com</a>) with your story.</li> <li>To help other people find the show please leave a review on <a href="https://itunes.apple.com/us/podcast/podcast.-init/id981834425?mt=2&uo=6&at=&ct=&utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">iTunes</a> and tell your friends and co-workers</li> <li>Join the community in the new Zulip chat workspace at <a href="https://www.pythonpodcast.com/chat?utm_source=rss&utm_medium=rss">pythonpodcast.com/chat</a></li> </ul> <h2>Links</h2> <ul> <li><a href="https://github.com/se2p/pynguin?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Pynguin</a></li> <li><a href="https://www.uni-passau.de?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">University of Passau</a></li> <li><a href="https://www.passau.de?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Passau, Germany</a></li> <li><a href="https://www.evosuite.org/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Evosuite</a></li> <li><a href="https://hypothesis.works/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Hypothesis</a> <ul> <li><a href="https://www.pythonpodcast.com/episode-52-hypothesis-with-david-maciver/?utm_source=rss&utm_medium=rss">Podcast Episode</a></li> </ul> </li> <li><a href="https://astor.readthedocs.io/en/latest/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Astor</a></li> <li><a href="https://www.python.org/dev/peps/pep-0572/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Walrus Operator</a></li> <li><a href="http://www.mypy-lang.org/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">MyPy</a> <ul> <li><a href="https://www.pythonpodcast.com/episode-65-mypy-with-david-fisher-and-greg-price/?utm_source=rss&utm_medium=rss">Podcast Episode</a></li> </ul> </li> <li><a href="https://pytest.org?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Pytest</a> <ul> <li><a href="https://www.pythonpodcast.com/episode-16-holger-krekel-on-py-test/?utm_source=rss&utm_medium=rss">Podcast Episode</a></li> </ul> </li> <li><a href="https://docs.python.org/3/library/unittest.html?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">UnitTest</a></li> <li><a href="https://bytecode.readthedocs.io/en/latest/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Bytecode library</a></li> <li><a href="https://google.github.io/pytype/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Pytype</a></li> <li><a href="https://github.com/instagram/MonkeyType?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Monkeytype</a> <ul> <li><a href="https://www.pythonpodcast.com/monkeytype-with-carl-meyer-and-matt-page-episode-146/?utm_source=rss&utm_medium=rss">Podcast Episode</a></li> </ul> </li> <li><a href="https://github.com/google/atheris?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Atheris</a> from Google – coverage-guided fuzzing</li> <li>Blog series about “Python behind the scenes”: <a href="https://tenthousandmeters.com/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">Ten thousand meters by Victor Skvortsov</a></li> </ul> <p>The intro and outro music is from Requiem for a Fish <a href="http://freemusicarchive.org/music/The_Freak_Fandango_Orchestra/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">The Freak Fandango Orchestra</a> / <a href="http://creativecommons.org/licenses/by-sa/3.0/?utm_source=rss&utm_medium=rss" rel="noopener" target="_blank">CC BY-SA</a></p> </div> <img alt="" height="0" src="https://analytics.boundlessnotions.com/piwik.php?idsite=1&rec=1&url=https%3A%2F%2Fwww.pythonpodcast.com%2Fpynguin-automatic-python-unit-tests-episode-316%2F&action_name=Automatically+Generate+Your+Unit+Tests+From+Scratch+With+Pynguin+-+Episode+316&urlref=https%3A%2F%2Fwww.pythonpodcast.com%2Ffeed%2F&utm_source=rss&utm_medium=rss" style="border: 0; width: 0; height: 0;" width="0" />