如何设计Python代码以便于第三方添加/定制
我现在正在测试硬件和软件。为了遵循我们的流程,我需要准备一份“测试场景规范”和“测试用例规范文档”,并根据“测试用例规范”准备一份测试脚本/代码,以验证硬件和软件 测试场景规范示例: 测试用例规范示例: 在编码/测试期间,我发现我们需要更新“测试场景”和“测试用例”规范。这很容易出错。另一点是,一旦更新了一个文档,就必须更新其余的文档 所以我想出了一个想法,创建一个框架来简化我的生活,并用Python编写所有内容。我需要注释我的代码,所以我会使用源代码、注释、描述等来生成文档 架构简介:如何设计Python代码以便于第三方添加/定制,python,unit-testing,architecture,frameworks,Python,Unit Testing,Architecture,Frameworks,我现在正在测试硬件和软件。为了遵循我们的流程,我需要准备一份“测试场景规范”和“测试用例规范文档”,并根据“测试用例规范”准备一份测试脚本/代码,以验证硬件和软件 测试场景规范示例: 测试用例规范示例: 在编码/测试期间,我发现我们需要更新“测试场景”和“测试用例”规范。这很容易出错。另一点是,一旦更新了一个文档,就必须更新其余的文档 所以我想出了一个想法,创建一个框架来简化我的生活,并用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以避免重新发明轮子。也许这就是路。该框架本身是针对技术人员的。我想让我和其他人从准备几个不同的文档中解脱出来,在后台只维护一个带有框架的源代码。