如何设计Python代码以便于第三方添加/定制

如何设计Python代码以便于第三方添加/定制,python,unit-testing,architecture,frameworks,Python,Unit Testing,Architecture,Frameworks,我现在正在测试硬件和软件。为了遵循我们的流程,我需要准备一份“测试场景规范”和“测试用例规范文档”,并根据“测试用例规范”准备一份测试脚本/代码,以验证硬件和软件 测试场景规范示例: 测试用例规范示例: 在编码/测试期间,我发现我们需要更新“测试场景”和“测试用例”规范。这很容易出错。另一点是,一旦更新了一个文档,就必须更新其余的文档 所以我想出了一个想法,创建一个框架来简化我的生活,并用Python编写所有内容。我需要注释我的代码,所以我会使用源代码、注释、描述等来生成文档 架构简介: 测

我现在正在测试硬件和软件。为了遵循我们的流程,我需要准备一份“测试场景规范”和“测试用例规范文档”,并根据“测试用例规范”准备一份测试脚本/代码,以验证硬件和软件

测试场景规范示例:

测试用例规范示例:

在编码/测试期间,我发现我们需要更新“测试场景”和“测试用例”规范。这很容易出错。另一点是,一旦更新了一个文档,就必须更新其余的文档

所以我想出了一个想法,创建一个框架来简化我的生活,并用Python编写所有内容。我需要注释我的代码,所以我会使用源代码、注释、描述等来生成文档

架构简介:
测试框架类-容纳0-x个测试场景
测试场景类-容纳0-x个测试用例
测试用例类-包含0-x个测试步骤
测试步骤类-该类表示测试用例规范中描述的要执行的单个步骤。

我已经决定为这个步骤使用一个类,因为我需要保存关于预期结果的信息+我需要在测试执行后存储实际结果,并且我需要对每个步骤都有访问这些变量的权限

所有内容(框架、场景、测试用例)对于每个测试都应该是不变的和通用的,但是,为每个测试用例执行的“测试步骤”是不同的,并且是根据需要添加的。因此,该代码可以被视为第三方/个人代码,不属于框架的一部分

问题是,如何设计这样的东西?需要添加的代码。

我提出了以下架构:
1) 使用construtor创建测试场景实例
2) 调用附加测试用例方法
-此方法需要/需要模块名
-用户为每个测试用例创建一个新模块(new file.py)

3) 带有给定模块的append方法导入模块并读取/存储其内部-名称、描述和步骤

4) 用户创建一个框架实例,其中包含迭代所有注册场景和测试用例的方法,并自动运行所有测试等

5) 用户必须注册场景

模块结构:

    name = "Undervoltage simulation during stop mode"
    description = "This test verifies undervoltage during stop mode..."

    #The user defines a single method for every step:
    def step1(*args, **kwargs):
       ...

    def step2(*args, **kwargs):
       ...
代码段:

    import tfw
    import tscenario
    import tcase
    import tstep

    test_setup = tfw.TestFramework()

    ts1 = tscenario.TScenario('TS0003', 'Requirement1', 'WPT undervoltage simulation')
    ts1.append_test_case('test_case_module_1')

    ts2 = tscenario.TScenario('TS0004', 'Requirement2', 'WPT overvoltage simulation')
    ts2.append_test_case('test_case_module_2')

    test_setup.register_scenarios([ts1, ts2])

    test_setup.generate_scenario_spec('C:/Test/wch65w_test_scenario_spec.xlsx')
    test_setup.generate_test_case_spec('C:/Test/wch65w_test_case_spec.xlsx')

    test_setup.execute()
一切都按预期进行,但是,我对设计的感觉不太好——这是正确的方法

我不想为你想执行的每一步创建一个“测试步骤”对象,把它放到一个列表中,这是你在append\u Test\u case()方法中的输入等等来打扰用户。我想把用户从这些事情中抽象出来

然而,这是我唯一想到的。我也是Python的初学者,所以我对Python提供的所有概念没有太多经验


感谢您的提示和想法。

对于那些非技术人员参与测试过程的情况,行为驱动开发(BDD)是存在的

我建议您去看看,对我来说,这是一个具有更好的BDD实现的测试库。从他们的Github项目描述中:

行为驱动开发(BDD)是一种敏捷的软件开发 鼓励开发人员,QA软件项目中的非技术或业务参与者

Behave使用功能文件,其中记录了软件应如何工作。您团队中的非技术人员应该编写此规范。我将添加一个非常简单的示例:

Feature: Supported voltage

  Scenario: Plug a device in a 110 socket
    Given we have a device
     When we plug it into a 110 socket
     Then the devices does not explode

  Scenario: Plug a device in a 220 socket
    Given we have a device
     When we plug it into a 220 socket
     Then the device dies miserably
给定的然后行被称为步骤,您可以将它们中的每一行与Python函数关联,Python函数必须测试定义的语句是否正确

from behave import given, when, then, step

@given('we have a device')
def setup_device(context):
    pass

@when('we plug it into a {voltage:d} socket')
def plug_to_socket(context, voltage):
   # your code

@then('behave will test them for us!')
def step_impl(context):
    # test what happens
请注意第二个函数
plug to_socket
,当我们将其插入110插座时,它可以动态处理步骤
,当我们将其插入220插座时,它可以动态处理步骤
,因为它定义了一个变量
电压
,该变量可以取整数

因此,该库可以帮助您避免重复代码,并创建一个灵活的框架,非技术人员可以在其中定义产品(软件/硬件)的工作方式


我帮不上什么忙,因为我不了解你们软件的业务逻辑,所以我不能举一个更好的例子。但我认为这是一个起点,您必须阅读Behave的文档才能熟悉它。

嗨,味噌,谢谢您的帖子,尽管它没有直接回答我的问题。:-)我一定会看一看Behave以避免重新发明轮子。也许这就是路。该框架本身是针对技术人员的。我想让我和其他人从准备几个不同的文档中解脱出来,在后台只维护一个带有框架的源代码。