如何设计Python代码以便第三方轻松添加/定制
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何设计Python代码以便第三方轻松添加/定制相关的知识,希望对你有一定的参考价值。
我正在测试硬件和软件。为了遵循我们的流程,我需要准备一个“测试场景规范”和“测试用例规范文档”,并根据“测试用例规范”准备一个测试脚本/代码来验证硬件和软件。
测试用例规范示例:
在编码/测试期间,我发现我们需要更新“测试场景”和“测试用例”规范。这很容易出错。另一点是,一旦更新了一个文档,就会被迫更新剩余的文档。
所以我想出了一个创建框架来简化我的生活并用Python编写所有内容的想法。无论如何我需要评论我的代码,所以我会使用源代码,它的注释,描述等来生成文档。
简要架构描述: 测试框架类 - 保存0 - x测试场景 测试场景类 - 保存0 - x测试用例 测试用例类 - 保持0 - x测试步骤 测试步骤类 - 此类表示要执行的单个步骤,如测试用例规范中所述。
我决定使用一个类来执行该步骤,因为我需要保存有关预期结果的信息+我需要在测试执行后存储实际结果,并且我需要访问每个步骤的那些变量。
所有的东西(框架,场景,测试用例)应该保持不变并且每个测试都是通用的,但是,为每个测试用例执行的“测试步骤”有所不同,并根据需要等添加。所以这段代码可以被认为是第三派对/人员代码左右不属于框架的一部分。
问题是,如何设计这样的东西?需要添加的代码。
我提出了以下架构: 1)使用construtor创建测试场景实例 2)调用追加测试用例方法 - 此方法需要/需要模块名称 - 用户为每个测试用例创建一个新模块(new file.py)
3)给定模块的append方法导入模块并读取/存储它的内部 - 名称,描述,步骤。
4)用户创建一个Framework实例,其中包含迭代所有已注册方案和测试用例的方法,并自动运行所有测试等。
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_test_case()方法等的输入。我想从这些东西中抽象出用户。
然而,这是我想出的唯一一件事。我也是Python的初学者,所以我对Python提供的所有概念都没有太多经验。
感谢您的提示和想法。
那么,对于非技术人员参与测试过程的情况,存在行为驱动的开发(或BDD)。
我建议你看看Behave,这对我来说是测试库,它有更好的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
给定的,when和then的行称为步骤,并且您可以将它们中的每一个与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
,它可以动态处理步骤When we plug it into a 110 socket
和When we plug it into a 220 socket
,因为它定义了一个变量voltage
,它可以取一个整数。
因此,这个库可以帮助您避免重复的代码并创建一个灵活的框架,非技术人员可以定义产品(SW / HW)应该如何工作。
我无能为力,因为我不知道你的软件的业务逻辑,所以我不能提出一个更好的例子。但我认为这是一个起点,您必须阅读Behave的文档以熟悉它。
以上是关于如何设计Python代码以便第三方轻松添加/定制的主要内容,如果未能解决你的问题,请参考以下文章
软件系统定制定做学生管理系统软件定制开发代做学生管理软件系统管理软件定制开发
定做logo设计请人设计原创商标代设计品牌公司企业VI代设计卡通图标志定制定做logo海报代做平面包装宣传单宣传