Pytest是我首选的Python测试库。它使简单的测试非常容易编写,它拥有许多高级的功能 (和众多插件),有助于更高级的测试方案。 为了演示基本功能,我打算使用py.test演示在测试驱动风格下解决cryptopals challenges的第一集合的第一题。
安装和第一个测试安装
第一个挑战要求我们把一个十六进制编码的字符串转化为Base64编码。我先编写测试,代表所面临的挑战。 py.test默认检查以test_*.py命名的文件名,在文件内部查找以test_打头的方法或函数,并执行它们。 所以我创建文件test_set1.py
然而,这只是演示了Pytest的简单部分,测试的只是以test_打头的函数或方法,仅仅使用了简单的assert语句,而不是一系列断言方法(assertEqual, assertNotEqual, assertAlmostEqual)。 接下来是更真实的测试情况来看一个更完整的示例,第二个挑战是要实现一个函数,异或两个固定长度的缓冲区。我会先写以下测试用例
conventions for Python test discovery。 现在我主要来演示什么是失败的测试。在cryptopals.py中:
我喜欢这种高亮显示测试失败行的方式,并且显示了断言语句运行的值。 一旦我写了正确的代码(在这里忽略继续挑战的精神吧),应该会看到以下输出: 尝试更高级的pytest:参数化测试函数对于最后一个例子,来看一下pytest稍微复杂的应用。我想写更多的测试来检查我的fixed_xor函数作用于不同长度的bytestrings。这个挑战只是说此函数应该使用两个相同长度的缓冲区,,但并没有指定当两个缓冲区长度不同时会发生什么。所以,我决定这种情况下结果应该是长度最短的bytestring(主要是因为这使函数写起来简单些)。 为了正确的验证,我测试以下几种不同场景:bs1长度小于 bs2即len(bs2) |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|