控制台应用程序测试仪。

contest的Python项目详细描述


比赛

生成状态

aconsole applicationtester

简介

contest是一个测试应用程序,它使用配置好的输入来运行程序,然后使用一些预期的内容检查输出。简单地说,contest是一个驱动程序,它有助于向特定可执行文件提供输入和验证输出。竞赛本身并不是非常健壮,而是让开发人员根据需要实现所需内容。

安装

pip install contest

您可以从此repo安装、克隆并简单地:

python setup.py install

动机

我写这篇文章是为了给我教的一门帮助评分的课。考虑到它的配置驱动特性(测试框架/工具还应该如何工作?)竞赛允许我为特定程序(作业)定义多个测试用例,这样不仅对我来说评分更容易,而且我可以将作业集成到评分管道中,这样我可以尽可能少地做工作,我的学生可以立即获得提交的反馈。

工作原理

概述

出于几个原因,yaml是contest的首选输入,但最显著的原因是它易于遵循语法和允许多行字符串(抱歉的json)。contest使用一个输入文件,该文件指定至少一个可执行文件,然后使用提供的任何附加信息。查看下面的测试框架以了解可以指定的内容;主要的是输入和输出流stdoutstderr,以及stderr和cli输入argv。您可以指定希望创建的新生成的文件,甚至可以进一步指定自定义测试(如pythonfiles),这些测试涵盖了简单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!

让我们详细说明一下这是什么:

  1. 要运行的可执行文件名为
    hello_world.exe
    
  2. 我们有一个名为
    standard
    
  3. 我们将输入定义为stdin,这是一个条目:
    Lnk2past
    
  4. 我们将输出定义为stdout,即:
    Hello! What is your name?
    Welcome to the world, Lnk2past!
    
  5. < > >

    这实际上相当于在某些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您就可以做任何您喜欢的事情来过滤您的测试!

    待办事项

    • 为文件输出添加配置选项
    • 改进测试
      • 添加更多测试用例
      • 测试自定义测试示例

    欢迎加入QQ群-->: 979659372 Python中文网_新手群

    推荐PyPI第三方库


热门话题
无法在Netbeans 8.2 JDK8u231中创建java Maven项目(Web应用程序)   java如何以设定的时间间隔生成随机数?   java从socket和inputStream的慢速读取   spring SCORM:Java中基于Web的SCORM播放器   Java将函数传递给方法   java绑定通用服务及其实现和子类型   java如何在运行时从选择列表框中动态选择选项?爪哇硒   java Selenium WebDriver什么是“Selenium客户端和WebDriver语言绑定”   elasticsearch需要elasticsearch高级Java客户端更新ByQueryRequest API帮助   JAVA哈希表查找最大值   WSDL操作中的java soapAction属性为空   java访问封闭类或父类方法的一般方法   eclipse在java中运行带有SeleneTestCase的ANT。lang.NoClassDefFoundError   java Hazelcast不会在节点启动时填充ReplicatedMap   如何在Java中从excel中读取特定行?   html JAVA将本地时间(GMT+8)转换为UTC时间   java将自定义端点添加到Spring数据REST存储库中,并以大摇大摆的方式显示   java计算未来位置