python - 在 Python 中对整个应用程序进行回归测试

标签 python unit-testing testing python-3.x regression-testing

我有一个小型命令行应用程序(大约 6k 行)。它没有单元测试,因为我不知道如何编写它们;但我现在正在追溯添加一些。我读了this tutorial但是我对如何使用这个模块测试整个应用程序感到困惑;事实上,我什至不确定我想做的是否称为“单元测试”。

具体来说,如果我使用某些参数运行我的应用程序,它应该会生成某些输出文件。我想确保这些输出文件没有改变。

即,我的应用程序的以下命令行调用:

main.py config1.txt 100 15
main.py config2.txt def 10 qa
etc.....

创建一些小的输出文本文件(每个< 10 MB)并将它们放入单独的文件夹(每次调用一个),命名如下:

output/config1.100.15.201202011733/
output/config2.def.10.qa.201202011733/
etc...

每个文件夹都包含一些小文本文件(每个<10MB)。每次代码更改迭代后,我想使用几十个命令行参数运行我的应用程序,并记录输出文件不同的任何情况。 (理想情况下,我想做的不止于此;例如,对于某些输出文件,将它们作为制表符分隔的表与某个主键进行比较,这样如果行顺序发生变化,它们仍然会被评估为相等;但事实并非如此关键)。

设置它的好方法是什么?

最佳答案

第 1 步。将您的应用分成两部分。

  1. 使用optparse(或argparse)解析命令行选项的部分。

  2. 真正起作用的部分。

您的“主要”脚本然后执行第 1 部分以获取所有选项并调用第 2 部分来完成实际工作。

这被称为“可测试性设计”,是单元测试中比较重要的部分。

第 2 步。一旦你有了两个部分,测试真正起作用的部分。

编写单元测试脚本from the_app import the_function_or_class_that_does_real_work

测试那个函数或类或任何真正起作用的东西。

class Test_With_File( TestCase ):
    def assertFileMatches( self, expected, actual, error=None ):
        # use difflib or whatever to compare the two files.

class TestMain_Sample_File1( Test_With_File ):
    def test_should_produce_known_output( self ):
        with open("temp","w") as target:
            the_function_that_does_real_work( 'config1.txt', arg2=100, arg3=15, out=target )
        self.assertFileMatches( "output/config1.100.15.201202011733", "temp" )

您可以在“TestMain_Sample_File1”类上编写变体,以涵盖您感兴趣的尽可能多的测试用例。

关于python - 在 Python 中对整个应用程序进行回归测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9106251/

相关文章:

python - WebDriver异常: Message: The command 'GET/session/7.../displayed' was not found while Explicit Wait with safaridriver and Selenium 3. 13.0

unit-testing - 我应该测量 GUI 测试的代码覆盖率吗?

c# - 单元测试后面的 "intent"- 我应该瞄准什么?

java - 是否可以在没有 @DirtiesContext 的情况下测试 Spring REST Controller ?

node.js - 了解 'integration' 测试中的 Mocha 语法

php - mock 如何断言类实例

Python 在压缩大文件时使用 ZIP64 扩展名

Python - 网页抓取 - 多线程 - 线程限制?

c++ - 将测试代码构建为库还是可执行文件?

python - 运行时修改函数(拉出局部变量)