控制台应用程序测试仪。
contest的Python项目详细描述
比赛
acon
sole applicationtest
er
简介
contest
是一个测试应用程序,它使用配置好的输入来运行程序,然后使用一些预期的内容检查输出。简单地说,contest
是一个驱动程序,它有助于向特定可执行文件提供输入和验证输出。竞赛本身并不是非常健壮,而是让开发人员根据需要实现所需内容。
安装
pip install contest
您可以从此repo安装、克隆并简单地:
python setup.py install
动机
我写这篇文章是为了给我教的一门帮助评分的课。考虑到它的配置驱动特性(测试框架/工具还应该如何工作?)竞赛
允许我为特定程序(作业)定义多个测试用例,这样不仅对我来说评分更容易,而且我可以将作业集成到评分管道中,这样我可以尽可能少地做工作,我的学生可以立即获得提交的反馈。
工作原理
概述
出于几个原因,yaml是contest
的首选输入,但最显著的原因是它易于遵循语法和允许多行字符串(抱歉的json)。contest
使用一个输入文件,该文件指定至少一个可执行文件,然后使用提供的任何附加信息。查看下面的测试框架以了解可以指定的内容;主要的是输入和输出流stdout
,stderr
,以及stderr
和cli输入argv
。您可以指定希望创建的新生成的文件,甚至可以进一步指定自定义测试(如python
files),这些测试涵盖了简单I/O比较所不涉及的内容。
测试骨架
executable:test-cases:standard:executable:returncode:argv:[]stdin:|stdout:|stderr:|ofstreams:-base-file:test-file:extra-tests:[]
开发环境
我编写这个代码是为了使用最新的python。我对向后兼容性没有兴趣。虽然早期的版本和标准现在可能可以工作,但我不保证会有任何进展。我不会为了支持老的东西而阻碍发展。考虑到目前我可以使用的开发环境的范围,有一点兼容性。
我目前有一些主要的开发环境,因此您可以期望至少支持以下内容:
- python 3.5.3和gcc 6.3.0(raspbian)
- python 3.6.7和gcc 7.3.0(ubuntu 18.04.2)
- <强> Python 3.68和MSVC V1916(Windows 10,Visual C++ 2017(15.9)) < < > > >强> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
基本用法
给定一些配置,您可以使用以下命令运行竞赛:
contest <path to configuration file>
这将解析配置并运行指定的测试cas。在配置文件中,每个测试用例都在配方中的测试用例
节点下定义;只需根据需要添加一个新的部分。您只需要确保每个测试的名称都是唯一的。下面是一个测试配方的示例(取自exampels/native_console_a p p
):
executable: hello_world.exe
test-cases:
standard:
stdin: |
Lnk2past
stdout: |
Hello! What is your name?
Welcome to the world, Lnk2past!
让我们详细说明一下这是什么:
- 要运行的可执行文件名为
hello_world.exe
- 我们有一个名为
standard
- 我们将输入定义为
stdin
,这是一个条目:Lnk2past
- 我们将输出定义为
stdout
,即:Hello! What is your name? Welcome to the world, Lnk2past!
< > > - 为文件输出添加配置选项
- 改进测试
- 添加更多测试用例
- 测试自定义测试示例
这实际上相当于在某些shell环境中:
pip install contest
0
这意味着当运行可执行文件时,我们可以期望步骤3中的输入在步骤4中产生输出。比赛
为您做这个比较!这允许您编写反映可执行文件实际用例的测试。添加尽可能多的测试来覆盖程序中的各种路径,并覆盖程序可能遇到的各种错误。
查看examples
目录下的其他示例。
测试目录
contest
将在单独的目录中运行每个测试用例,并在包含测试配方的同一目录中创建这些目录。这确保了测试用例之间的冲突最小化。例如,如果测试配方包含测试"foo"和"bar",并且位于"c:\ users\lnk2past\myproject"中,则可以导出以下目录结构:
pip install contest
1
即使测试用例在磁盘上没有输出,也会创建测试输出目录。
过滤测试
你可以过滤你的测试配方,只运行一些精选的。在调试期间,这可能很有用,只运行新的测试,而不需要运行整个测试配方。您可以通过--filter
选项执行此操作。这需要筛选一些正则表达式。例如,我们只能通过执行以下操作来测试那些名称中标有特定关键字的测试,例如"跟踪":
pip install contest
2
同样,如果特定的测试有问题或者您正在关注其他测试,则可以按顺序排除这些测试。简而言之,只需使用--exclude过滤器
或--exclude
。只要您知道regex
您就可以做任何您喜欢的事情来过滤您的测试!