SlideShare a Scribd company logo
Writing Dumb Tests
Luke Lee
References: http://bit.ly/dumber_tests_pytx2014
Luke Lee
• Scientific Python/Desktop Visualization
• Recovering C developer
• @durden20
• lukelee.me
• codrspace.com/durden
References: http://bit.ly/dumber_tests_pytx2014
The Last Day of a
Sprint
References: http://bit.ly/dumber_tests_pytx2014
The Last Day of a Sprint
References: http://bit.ly/dumber_tests_pytx2014
Testing Woes
References: http://bit.ly/dumber_tests_pytx2014
Smart Tests
• Too many details
• Data
• Too much software
References: http://bit.ly/dumber_tests_pytx2014
Smart Tests
Too Many Details
import collections
entry = collections.namedtuple('entry', ['name', 'value', 'units'])
def lines_to_tuples(filename):
tuples = []
with open(filename, 'r') as file_obj:
for line in file_obj:
fields = line.split()
tuples.append(entry(*fields))
return tuples
References: http://bit.ly/dumber_tests_pytx2014
Smart Tests
Too Many Details
def test_lines_to_tuples_1():
# Test.txt contains:
# Height 60 in
# Length 30 in
filename = 'test.txt'
test_tuples = lines_to_tuples(filename)
with open(filename, 'r') as file_obj:
for line, test_tuple in zip(file_obj, test_tuples):
fields = line.split()
assert entry(*fields) == test_tuple
References: http://bit.ly/dumber_tests_pytx2014
Smart Tests
Too Many Details
"We've fallen into a trap of testing that the code does what the
code says it does, rather than testing functional behavior we care
about."
-- Daniel Pope, "Every mock.patch is a little smell"
References: http://bit.ly/dumber_tests_pytx2014
Smart Tests
Data
Your data is clean, users' data is gold standard
References: http://bit.ly/dumber_tests_pytx2014
Random Data
References: http://bit.ly/dumber_tests_pytx2014
Random Data
Fails sometimes
References: http://bit.ly/dumber_tests_pytx2014
Smart Tests
Too Much Software
• Too easy to change
• Too much cognitive overhead
References: http://bit.ly/dumber_tests_pytx2014
import unittest
class TestSequenceFunctions(unittest.TestCase):
def setUp(self):
self.seq = range(10)
def test_shuffle(self):
# make sure the shuffled sequence does not lose any elements
random.shuffle(self.seq)
self.seq.sort()
self.assertEqual(self.seq, range(10))
# should raise an exception for an immutable sequence
self.assertRaises(TypeError, random.shuffle, (1,2,3))
def test_sample(self):
with self.assertRaises(ValueError):
random.sample(self.seq, 20)
for element in random.sample(self.seq, 5):
self.assertTrue(element in self.seq)
References: http://bit.ly/dumber_tests_pytx2014
import pytest
@pytest.fixture(scope="module",
params=["merlinux.eu", "mail.python.org"])
def smtp(request):
smtp = smtplib.SMTP(request.param)
def fin():
print ("finalizing %s" % smtp)
smtp.close()
request.addfinalizer(fin)
return smtp
References: http://bit.ly/dumber_tests_pytx2014
Bugs hide in
complexity
References: http://bit.ly/dumber_tests_pytx2014
Saved by the Tests
References: http://bit.ly/dumber_tests_pytx2014
Smart enough to find bugs
but dumb enough to
DEBUGReferences: http://bit.ly/dumber_tests_pytx2014
Dumb Tests
• Doctests
• Data over code
• Think goals, not implementation
• Be brave
References: http://bit.ly/dumber_tests_pytx2014
Dumb Tests
import doctest
• Limited means simple
References: http://bit.ly/dumber_tests_pytx2014
Dumb Tests
Data over code
• Commit examples with real data
• numpy.savetxt
• StringIO
References: http://bit.ly/dumber_tests_pytx2014
Dumb Tests
Data over code
• difflib
• filecmp
• binary data
References: http://bit.ly/dumber_tests_pytx2014
Dumb Tests
Goals, not implementation
• Docs guide testing
• Postpone code coverage
References: http://bit.ly/dumber_tests_pytx2014
Dumb Tests
Goals, not implementation
def test_lines_to_tuples_2():
# Test.txt contains:
# Height 60 in
# Length 30 in
filename = 'test.txt'
correct_tuples = []
correct_tuples.append(entry(name='Height', value='60', units='in'))
correct_tuples.append(entry(name='Length', value='30', units='in'))
test_tuples = lines_to_tuples(filename)
assert correct_tuples == test_tuples
References: http://bit.ly/dumber_tests_pytx2014
Dumb Tests
Goals, not implementation
Embrace the experience of other people, people not schooled
in the details of your implementation, you can learn how to
make your work easier to absorb, and therefore more effective
at what it's designed to do.
-- Dave Winer, Early author of RSS software
References: http://bit.ly/dumber_tests_pytx2014
Be Brave!
References: http://bit.ly/dumber_tests_pytx2014
Dumb Tests
Be Brave!
import pytest
@pytest.mark.parametrize("input,expected", [
("3+5", 8),
("2+4", 6),
("6*9", 42),
])
def test_eval(input, expected):
assert eval(input) == expected
References: http://bit.ly/dumber_tests_pytx2014
Use asserts
References: http://bit.ly/dumber_tests_pytx2014
Conclusion
1. Uses real world data
2. Focuses on goals not implementation details
3. Lowers cognitive oveheard with brave, simple code
References: http://bit.ly/dumber_tests_pytx2014
Write Boring Tests
References: http://bit.ly/dumber_tests_pytx2014
@durden20
www.lukelee.me
codrspace.com/durden
References: http://bit.ly/dumber_tests_pytx2014

More Related Content

What's hot

CouchDB Day NYC 2017: Mango
CouchDB Day NYC 2017: MangoCouchDB Day NYC 2017: Mango
CouchDB Day NYC 2017: Mango
IBM Cloud Data Services
 
JDO 2019: Serverless Hype Driven Development - Grzegorz Piotrowski
JDO 2019: Serverless Hype Driven Development - Grzegorz Piotrowski JDO 2019: Serverless Hype Driven Development - Grzegorz Piotrowski
JDO 2019: Serverless Hype Driven Development - Grzegorz Piotrowski
PROIDEA
 
From Promises & async/await to Async Algebraic Data Types
From Promises & async/await to Async Algebraic Data TypesFrom Promises & async/await to Async Algebraic Data Types
From Promises & async/await to Async Algebraic Data Types
Robert Pearce
 
Ring
RingRing
Digital RSE: automated code quality checks - RSE group meeting
Digital RSE: automated code quality checks - RSE group meetingDigital RSE: automated code quality checks - RSE group meeting
Digital RSE: automated code quality checks - RSE group meeting
Henry Schreiner
 
A Path to Point-Free JavaScript
A Path to Point-Free JavaScriptA Path to Point-Free JavaScript
A Path to Point-Free JavaScript
Robert Pearce
 
Some Functional Programming in JavaScript and Ramda.js
Some Functional Programming in JavaScript and Ramda.jsSome Functional Programming in JavaScript and Ramda.js
Some Functional Programming in JavaScript and Ramda.js
Robert Pearce
 
Level Up Your Git and GitHub Experience by Jordan McCullough and Brent Beer
Level Up Your Git and GitHub Experience by Jordan McCullough and Brent BeerLevel Up Your Git and GitHub Experience by Jordan McCullough and Brent Beer
Level Up Your Git and GitHub Experience by Jordan McCullough and Brent Beer
ZeroTurnaround
 
Building social network with Neo4j and Python
Building social network with Neo4j and PythonBuilding social network with Neo4j and Python
Building social network with Neo4j and Python
Andrii Soldatenko
 
Building Event-Based Systems for the Real-Time Web
Building Event-Based Systems for the Real-Time WebBuilding Event-Based Systems for the Real-Time Web
Building Event-Based Systems for the Real-Time Web
pauldix
 
Continuous Integration for Pharo Smalltalk Part 2 (Smalltalk and Travis CI)
Continuous Integration for Pharo Smalltalk Part 2 (Smalltalk and Travis CI)Continuous Integration for Pharo Smalltalk Part 2 (Smalltalk and Travis CI)
Continuous Integration for Pharo Smalltalk Part 2 (Smalltalk and Travis CI)
Sho Yoshida
 
Simple ETL in python 3.5+ with Bonobo - PyParis 2017
Simple ETL in python 3.5+ with Bonobo - PyParis 2017Simple ETL in python 3.5+ with Bonobo - PyParis 2017
Simple ETL in python 3.5+ with Bonobo - PyParis 2017
Romain Dorgueil
 
HOW 2019: A complete reproducible ROOT environment in under 5 minutes
HOW 2019: A complete reproducible ROOT environment in under 5 minutesHOW 2019: A complete reproducible ROOT environment in under 5 minutes
HOW 2019: A complete reproducible ROOT environment in under 5 minutes
Henry Schreiner
 

What's hot (13)

CouchDB Day NYC 2017: Mango
CouchDB Day NYC 2017: MangoCouchDB Day NYC 2017: Mango
CouchDB Day NYC 2017: Mango
 
JDO 2019: Serverless Hype Driven Development - Grzegorz Piotrowski
JDO 2019: Serverless Hype Driven Development - Grzegorz Piotrowski JDO 2019: Serverless Hype Driven Development - Grzegorz Piotrowski
JDO 2019: Serverless Hype Driven Development - Grzegorz Piotrowski
 
From Promises & async/await to Async Algebraic Data Types
From Promises & async/await to Async Algebraic Data TypesFrom Promises & async/await to Async Algebraic Data Types
From Promises & async/await to Async Algebraic Data Types
 
Ring
RingRing
Ring
 
Digital RSE: automated code quality checks - RSE group meeting
Digital RSE: automated code quality checks - RSE group meetingDigital RSE: automated code quality checks - RSE group meeting
Digital RSE: automated code quality checks - RSE group meeting
 
A Path to Point-Free JavaScript
A Path to Point-Free JavaScriptA Path to Point-Free JavaScript
A Path to Point-Free JavaScript
 
Some Functional Programming in JavaScript and Ramda.js
Some Functional Programming in JavaScript and Ramda.jsSome Functional Programming in JavaScript and Ramda.js
Some Functional Programming in JavaScript and Ramda.js
 
Level Up Your Git and GitHub Experience by Jordan McCullough and Brent Beer
Level Up Your Git and GitHub Experience by Jordan McCullough and Brent BeerLevel Up Your Git and GitHub Experience by Jordan McCullough and Brent Beer
Level Up Your Git and GitHub Experience by Jordan McCullough and Brent Beer
 
Building social network with Neo4j and Python
Building social network with Neo4j and PythonBuilding social network with Neo4j and Python
Building social network with Neo4j and Python
 
Building Event-Based Systems for the Real-Time Web
Building Event-Based Systems for the Real-Time WebBuilding Event-Based Systems for the Real-Time Web
Building Event-Based Systems for the Real-Time Web
 
Continuous Integration for Pharo Smalltalk Part 2 (Smalltalk and Travis CI)
Continuous Integration for Pharo Smalltalk Part 2 (Smalltalk and Travis CI)Continuous Integration for Pharo Smalltalk Part 2 (Smalltalk and Travis CI)
Continuous Integration for Pharo Smalltalk Part 2 (Smalltalk and Travis CI)
 
Simple ETL in python 3.5+ with Bonobo - PyParis 2017
Simple ETL in python 3.5+ with Bonobo - PyParis 2017Simple ETL in python 3.5+ with Bonobo - PyParis 2017
Simple ETL in python 3.5+ with Bonobo - PyParis 2017
 
HOW 2019: A complete reproducible ROOT environment in under 5 minutes
HOW 2019: A complete reproducible ROOT environment in under 5 minutesHOW 2019: A complete reproducible ROOT environment in under 5 minutes
HOW 2019: A complete reproducible ROOT environment in under 5 minutes
 

Viewers also liked

Fgxpress brasil loucura!!! novo plano explosivo de carreira! (brasil - port...
Fgxpress brasil   loucura!!! novo plano explosivo de carreira! (brasil - port...Fgxpress brasil   loucura!!! novo plano explosivo de carreira! (brasil - port...
Fgxpress brasil loucura!!! novo plano explosivo de carreira! (brasil - port...
Raoni Claro
 
Juego practico de scratch
Juego practico de scratchJuego practico de scratch
Juego practico de scratch
calderonskate
 
Jenni e isa
Jenni e isaJenni e isa
Jenni e isa
escolacaldas
 
Fgxpress brasil loucura!!! novo plano explosivo de carreira! (brasil - port...
Fgxpress brasil   loucura!!! novo plano explosivo de carreira! (brasil - port...Fgxpress brasil   loucura!!! novo plano explosivo de carreira! (brasil - port...
Fgxpress brasil loucura!!! novo plano explosivo de carreira! (brasil - port...
Raoni Claro
 
Aida & bianca
Aida & biancaAida & bianca
Aida & bianca
escolacaldas
 
What To Anticipate When You Go Off To University
What To Anticipate When You Go Off To UniversityWhat To Anticipate When You Go Off To University
What To Anticipate When You Go Off To University
truculentdirect4
 
Erika stefani
Erika stefaniErika stefani
Erika stefani
escolacaldas
 
Eduarda marilia
Eduarda mariliaEduarda marilia
Eduarda marilia
escolacaldas
 
Luan ,thais e hellen
Luan ,thais e hellenLuan ,thais e hellen
Luan ,thais e hellen
escolacaldas
 
@Daniel juliano
@Daniel juliano@Daniel juliano
@Daniel juliano
escolacaldas
 
@Gabi @ana
@Gabi @ana @Gabi @ana
@Gabi @ana
escolacaldas
 
тц пятница в районные сми
тц пятница в районные смитц пятница в районные сми
тц пятница в районные сми
Inessa Foteva
 
Che do ke toan doanh nghiep nho va vua
Che do ke toan doanh nghiep nho va vuaChe do ke toan doanh nghiep nho va vua
Che do ke toan doanh nghiep nho va vua
Saitep90
 
Juego Tipos de Mercado
Juego Tipos de MercadoJuego Tipos de Mercado
Juego Tipos de Mercado
Karol Anne
 
Windows 1 y windows 2 (1)
Windows 1 y windows 2 (1)Windows 1 y windows 2 (1)
Windows 1 y windows 2 (1)
Gerson Justo Xivir
 
Introducción a la informática massanet y flamarique1
Introducción a la informática massanet y flamarique1Introducción a la informática massanet y flamarique1
Introducción a la informática massanet y flamarique1
COLEGIO PADRE CLARET
 
Fichas
Fichas Fichas
Edge cutter nozles
Edge cutter nozlesEdge cutter nozles
Edge cutter nozles
Abhi Industrial Corporation
 
159 2015 - il corretto impiego dei prodotti fitosanitari
159   2015 - il corretto impiego dei prodotti fitosanitari159   2015 - il corretto impiego dei prodotti fitosanitari
159 2015 - il corretto impiego dei prodotti fitosanitari
http://www.studioingvolpi.it
 
Las sociedades y los espacios geográficos finallllll
Las sociedades y los espacios geográficos finallllllLas sociedades y los espacios geográficos finallllll
Las sociedades y los espacios geográficos finallllll
tefigonzalez87
 

Viewers also liked (20)

Fgxpress brasil loucura!!! novo plano explosivo de carreira! (brasil - port...
Fgxpress brasil   loucura!!! novo plano explosivo de carreira! (brasil - port...Fgxpress brasil   loucura!!! novo plano explosivo de carreira! (brasil - port...
Fgxpress brasil loucura!!! novo plano explosivo de carreira! (brasil - port...
 
Juego practico de scratch
Juego practico de scratchJuego practico de scratch
Juego practico de scratch
 
Jenni e isa
Jenni e isaJenni e isa
Jenni e isa
 
Fgxpress brasil loucura!!! novo plano explosivo de carreira! (brasil - port...
Fgxpress brasil   loucura!!! novo plano explosivo de carreira! (brasil - port...Fgxpress brasil   loucura!!! novo plano explosivo de carreira! (brasil - port...
Fgxpress brasil loucura!!! novo plano explosivo de carreira! (brasil - port...
 
Aida & bianca
Aida & biancaAida & bianca
Aida & bianca
 
What To Anticipate When You Go Off To University
What To Anticipate When You Go Off To UniversityWhat To Anticipate When You Go Off To University
What To Anticipate When You Go Off To University
 
Erika stefani
Erika stefaniErika stefani
Erika stefani
 
Eduarda marilia
Eduarda mariliaEduarda marilia
Eduarda marilia
 
Luan ,thais e hellen
Luan ,thais e hellenLuan ,thais e hellen
Luan ,thais e hellen
 
@Daniel juliano
@Daniel juliano@Daniel juliano
@Daniel juliano
 
@Gabi @ana
@Gabi @ana @Gabi @ana
@Gabi @ana
 
тц пятница в районные сми
тц пятница в районные смитц пятница в районные сми
тц пятница в районные сми
 
Che do ke toan doanh nghiep nho va vua
Che do ke toan doanh nghiep nho va vuaChe do ke toan doanh nghiep nho va vua
Che do ke toan doanh nghiep nho va vua
 
Juego Tipos de Mercado
Juego Tipos de MercadoJuego Tipos de Mercado
Juego Tipos de Mercado
 
Windows 1 y windows 2 (1)
Windows 1 y windows 2 (1)Windows 1 y windows 2 (1)
Windows 1 y windows 2 (1)
 
Introducción a la informática massanet y flamarique1
Introducción a la informática massanet y flamarique1Introducción a la informática massanet y flamarique1
Introducción a la informática massanet y flamarique1
 
Fichas
Fichas Fichas
Fichas
 
Edge cutter nozles
Edge cutter nozlesEdge cutter nozles
Edge cutter nozles
 
159 2015 - il corretto impiego dei prodotti fitosanitari
159   2015 - il corretto impiego dei prodotti fitosanitari159   2015 - il corretto impiego dei prodotti fitosanitari
159 2015 - il corretto impiego dei prodotti fitosanitari
 
Las sociedades y los espacios geográficos finallllll
Las sociedades y los espacios geográficos finallllllLas sociedades y los espacios geográficos finallllll
Las sociedades y los espacios geográficos finallllll
 

Similar to Writing dumb tests

Open Source Tools for Leveling Up Operations FOSSET 2014
Open Source Tools for Leveling Up Operations FOSSET 2014Open Source Tools for Leveling Up Operations FOSSET 2014
Open Source Tools for Leveling Up Operations FOSSET 2014
Mandi Walls
 
Updated non-lab version of Level Up. Delivered at LOPSA-East, May 3, 2014.
Updated non-lab version of Level Up. Delivered at LOPSA-East, May 3, 2014.Updated non-lab version of Level Up. Delivered at LOPSA-East, May 3, 2014.
Updated non-lab version of Level Up. Delivered at LOPSA-East, May 3, 2014.
Mandi Walls
 
Software development practices in python
Software development practices in pythonSoftware development practices in python
Software development practices in python
Jimmy Lai
 
Our Puppet Story (GUUG FFG 2015)
Our Puppet Story (GUUG FFG 2015)Our Puppet Story (GUUG FFG 2015)
Our Puppet Story (GUUG FFG 2015)
DECK36
 
DWX 2022 - DevSecOps mit GitHub
DWX 2022 - DevSecOps mit GitHubDWX 2022 - DevSecOps mit GitHub
DWX 2022 - DevSecOps mit GitHub
Marc Müller
 
Gcrc talk
Gcrc talkGcrc talk
Gcrc talk
Tejas Dinkar
 
Play framework: lessons learned
Play framework: lessons learnedPlay framework: lessons learned
Play framework: lessons learned
Peter Hilton
 
(CMP310) Data Processing Pipelines Using Containers & Spot Instances
(CMP310) Data Processing Pipelines Using Containers & Spot Instances(CMP310) Data Processing Pipelines Using Containers & Spot Instances
(CMP310) Data Processing Pipelines Using Containers & Spot Instances
Amazon Web Services
 
Steamlining your puppet development workflow
Steamlining your puppet development workflowSteamlining your puppet development workflow
Steamlining your puppet development workflow
Tomas Doran
 
Puppet Camp New York 2014: Streamlining Puppet Development Workflow
Puppet Camp New York 2014: Streamlining Puppet Development Workflow Puppet Camp New York 2014: Streamlining Puppet Development Workflow
Puppet Camp New York 2014: Streamlining Puppet Development Workflow
Puppet
 
Accessing File-Specific Attributes on Steroids - EuroPython 2008
Accessing File-Specific Attributes on Steroids - EuroPython 2008Accessing File-Specific Attributes on Steroids - EuroPython 2008
Accessing File-Specific Attributes on Steroids - EuroPython 2008
Dinu Gherman
 
Introduction to GitHub Actions - How to easily automate and integrate with Gi...
Introduction to GitHub Actions - How to easily automate and integrate with Gi...Introduction to GitHub Actions - How to easily automate and integrate with Gi...
Introduction to GitHub Actions - How to easily automate and integrate with Gi...
All Things Open
 
I don't know what I'm Doing: A newbie guide for Golang for DevOps
I don't know what I'm Doing: A newbie guide for Golang for DevOpsI don't know what I'm Doing: A newbie guide for Golang for DevOps
I don't know what I'm Doing: A newbie guide for Golang for DevOps
Peter Souter
 
Princeton Wintersession: Software Quality Assurance Tooling
Princeton Wintersession: Software Quality Assurance ToolingPrinceton Wintersession: Software Quality Assurance Tooling
Princeton Wintersession: Software Quality Assurance Tooling
Henry Schreiner
 
Introduction to GitHub Actions
Introduction to GitHub ActionsIntroduction to GitHub Actions
Introduction to GitHub Actions
All Things Open
 
PyCon AU 2012 - Debugging Live Python Web Applications
PyCon AU 2012 - Debugging Live Python Web ApplicationsPyCon AU 2012 - Debugging Live Python Web Applications
PyCon AU 2012 - Debugging Live Python Web Applications
Graham Dumpleton
 
PuppetCamp SEA 1 - Use of Puppet
PuppetCamp SEA 1 - Use of PuppetPuppetCamp SEA 1 - Use of Puppet
PuppetCamp SEA 1 - Use of Puppet
OlinData
 
PuppetCamp SEA 1 - Use of Puppet
PuppetCamp SEA 1 - Use of PuppetPuppetCamp SEA 1 - Use of Puppet
PuppetCamp SEA 1 - Use of Puppet
Walter Heck
 
Puppet getting started by Dirk Götz
Puppet getting started by Dirk GötzPuppet getting started by Dirk Götz
Puppet getting started by Dirk Götz
NETWAYS
 
Reproducible research
Reproducible researchReproducible research
Reproducible research
C. Tobin Magle
 

Similar to Writing dumb tests (20)

Open Source Tools for Leveling Up Operations FOSSET 2014
Open Source Tools for Leveling Up Operations FOSSET 2014Open Source Tools for Leveling Up Operations FOSSET 2014
Open Source Tools for Leveling Up Operations FOSSET 2014
 
Updated non-lab version of Level Up. Delivered at LOPSA-East, May 3, 2014.
Updated non-lab version of Level Up. Delivered at LOPSA-East, May 3, 2014.Updated non-lab version of Level Up. Delivered at LOPSA-East, May 3, 2014.
Updated non-lab version of Level Up. Delivered at LOPSA-East, May 3, 2014.
 
Software development practices in python
Software development practices in pythonSoftware development practices in python
Software development practices in python
 
Our Puppet Story (GUUG FFG 2015)
Our Puppet Story (GUUG FFG 2015)Our Puppet Story (GUUG FFG 2015)
Our Puppet Story (GUUG FFG 2015)
 
DWX 2022 - DevSecOps mit GitHub
DWX 2022 - DevSecOps mit GitHubDWX 2022 - DevSecOps mit GitHub
DWX 2022 - DevSecOps mit GitHub
 
Gcrc talk
Gcrc talkGcrc talk
Gcrc talk
 
Play framework: lessons learned
Play framework: lessons learnedPlay framework: lessons learned
Play framework: lessons learned
 
(CMP310) Data Processing Pipelines Using Containers & Spot Instances
(CMP310) Data Processing Pipelines Using Containers & Spot Instances(CMP310) Data Processing Pipelines Using Containers & Spot Instances
(CMP310) Data Processing Pipelines Using Containers & Spot Instances
 
Steamlining your puppet development workflow
Steamlining your puppet development workflowSteamlining your puppet development workflow
Steamlining your puppet development workflow
 
Puppet Camp New York 2014: Streamlining Puppet Development Workflow
Puppet Camp New York 2014: Streamlining Puppet Development Workflow Puppet Camp New York 2014: Streamlining Puppet Development Workflow
Puppet Camp New York 2014: Streamlining Puppet Development Workflow
 
Accessing File-Specific Attributes on Steroids - EuroPython 2008
Accessing File-Specific Attributes on Steroids - EuroPython 2008Accessing File-Specific Attributes on Steroids - EuroPython 2008
Accessing File-Specific Attributes on Steroids - EuroPython 2008
 
Introduction to GitHub Actions - How to easily automate and integrate with Gi...
Introduction to GitHub Actions - How to easily automate and integrate with Gi...Introduction to GitHub Actions - How to easily automate and integrate with Gi...
Introduction to GitHub Actions - How to easily automate and integrate with Gi...
 
I don't know what I'm Doing: A newbie guide for Golang for DevOps
I don't know what I'm Doing: A newbie guide for Golang for DevOpsI don't know what I'm Doing: A newbie guide for Golang for DevOps
I don't know what I'm Doing: A newbie guide for Golang for DevOps
 
Princeton Wintersession: Software Quality Assurance Tooling
Princeton Wintersession: Software Quality Assurance ToolingPrinceton Wintersession: Software Quality Assurance Tooling
Princeton Wintersession: Software Quality Assurance Tooling
 
Introduction to GitHub Actions
Introduction to GitHub ActionsIntroduction to GitHub Actions
Introduction to GitHub Actions
 
PyCon AU 2012 - Debugging Live Python Web Applications
PyCon AU 2012 - Debugging Live Python Web ApplicationsPyCon AU 2012 - Debugging Live Python Web Applications
PyCon AU 2012 - Debugging Live Python Web Applications
 
PuppetCamp SEA 1 - Use of Puppet
PuppetCamp SEA 1 - Use of PuppetPuppetCamp SEA 1 - Use of Puppet
PuppetCamp SEA 1 - Use of Puppet
 
PuppetCamp SEA 1 - Use of Puppet
PuppetCamp SEA 1 - Use of PuppetPuppetCamp SEA 1 - Use of Puppet
PuppetCamp SEA 1 - Use of Puppet
 
Puppet getting started by Dirk Götz
Puppet getting started by Dirk GötzPuppet getting started by Dirk Götz
Puppet getting started by Dirk Götz
 
Reproducible research
Reproducible researchReproducible research
Reproducible research
 

Recently uploaded

9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
saastr
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
Brandon Minnick, MBA
 
High performance Serverless Java on AWS- GoTo Amsterdam 2024
High performance Serverless Java on AWS- GoTo Amsterdam 2024High performance Serverless Java on AWS- GoTo Amsterdam 2024
High performance Serverless Java on AWS- GoTo Amsterdam 2024
Vadym Kazulkin
 
The Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptxThe Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptx
operationspcvita
 
Must Know Postgres Extension for DBA and Developer during Migration
Must Know Postgres Extension for DBA and Developer during MigrationMust Know Postgres Extension for DBA and Developer during Migration
Must Know Postgres Extension for DBA and Developer during Migration
Mydbops
 
Session 1 - Intro to Robotic Process Automation.pdf
Session 1 - Intro to Robotic Process Automation.pdfSession 1 - Intro to Robotic Process Automation.pdf
Session 1 - Intro to Robotic Process Automation.pdf
UiPathCommunity
 
Introduction of Cybersecurity with OSS at Code Europe 2024
Introduction of Cybersecurity with OSS  at Code Europe 2024Introduction of Cybersecurity with OSS  at Code Europe 2024
Introduction of Cybersecurity with OSS at Code Europe 2024
Hiroshi SHIBATA
 
"$10 thousand per minute of downtime: architecture, queues, streaming and fin...
"$10 thousand per minute of downtime: architecture, queues, streaming and fin..."$10 thousand per minute of downtime: architecture, queues, streaming and fin...
"$10 thousand per minute of downtime: architecture, queues, streaming and fin...
Fwdays
 
"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota
Fwdays
 
Christine's Supplier Sourcing Presentaion.pptx
Christine's Supplier Sourcing Presentaion.pptxChristine's Supplier Sourcing Presentaion.pptx
Christine's Supplier Sourcing Presentaion.pptx
christinelarrosa
 
Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
Jakub Marek
 
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
Fwdays
 
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectorsConnector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
DianaGray10
 
AppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSFAppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSF
Ajin Abraham
 
Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
Jason Packer
 
A Deep Dive into ScyllaDB's Architecture
A Deep Dive into ScyllaDB's ArchitectureA Deep Dive into ScyllaDB's Architecture
A Deep Dive into ScyllaDB's Architecture
ScyllaDB
 
"Scaling RAG Applications to serve millions of users", Kevin Goedecke
"Scaling RAG Applications to serve millions of users",  Kevin Goedecke"Scaling RAG Applications to serve millions of users",  Kevin Goedecke
"Scaling RAG Applications to serve millions of users", Kevin Goedecke
Fwdays
 
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
DanBrown980551
 
Y-Combinator seed pitch deck template PP
Y-Combinator seed pitch deck template PPY-Combinator seed pitch deck template PP
Y-Combinator seed pitch deck template PP
c5vrf27qcz
 
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
Jason Yip
 

Recently uploaded (20)

9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
 
High performance Serverless Java on AWS- GoTo Amsterdam 2024
High performance Serverless Java on AWS- GoTo Amsterdam 2024High performance Serverless Java on AWS- GoTo Amsterdam 2024
High performance Serverless Java on AWS- GoTo Amsterdam 2024
 
The Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptxThe Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptx
 
Must Know Postgres Extension for DBA and Developer during Migration
Must Know Postgres Extension for DBA and Developer during MigrationMust Know Postgres Extension for DBA and Developer during Migration
Must Know Postgres Extension for DBA and Developer during Migration
 
Session 1 - Intro to Robotic Process Automation.pdf
Session 1 - Intro to Robotic Process Automation.pdfSession 1 - Intro to Robotic Process Automation.pdf
Session 1 - Intro to Robotic Process Automation.pdf
 
Introduction of Cybersecurity with OSS at Code Europe 2024
Introduction of Cybersecurity with OSS  at Code Europe 2024Introduction of Cybersecurity with OSS  at Code Europe 2024
Introduction of Cybersecurity with OSS at Code Europe 2024
 
"$10 thousand per minute of downtime: architecture, queues, streaming and fin...
"$10 thousand per minute of downtime: architecture, queues, streaming and fin..."$10 thousand per minute of downtime: architecture, queues, streaming and fin...
"$10 thousand per minute of downtime: architecture, queues, streaming and fin...
 
"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota
 
Christine's Supplier Sourcing Presentaion.pptx
Christine's Supplier Sourcing Presentaion.pptxChristine's Supplier Sourcing Presentaion.pptx
Christine's Supplier Sourcing Presentaion.pptx
 
Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
 
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
 
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectorsConnector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
 
AppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSFAppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSF
 
Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
 
A Deep Dive into ScyllaDB's Architecture
A Deep Dive into ScyllaDB's ArchitectureA Deep Dive into ScyllaDB's Architecture
A Deep Dive into ScyllaDB's Architecture
 
"Scaling RAG Applications to serve millions of users", Kevin Goedecke
"Scaling RAG Applications to serve millions of users",  Kevin Goedecke"Scaling RAG Applications to serve millions of users",  Kevin Goedecke
"Scaling RAG Applications to serve millions of users", Kevin Goedecke
 
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
 
Y-Combinator seed pitch deck template PP
Y-Combinator seed pitch deck template PPY-Combinator seed pitch deck template PP
Y-Combinator seed pitch deck template PP
 
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
 

Writing dumb tests