首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中按名称重用方法

在python中按名称重用方法
EN

Stack Overflow用户
提问于 2015-12-11 15:52:20
回答 3查看 44关注 0票数 1

我使用python来执行一些没有测试框架的自动化测试活动(REST测试)。它只是普通的python脚本,不使用OO方法。

因此,我运行了400个测试,但假设我有20个端点,每个端点都会被不同参数击中20次。

现在,我已经将每个“测试”创建为一个函数,这意味着我拥有:

代码语言:javascript
复制
def test1():
   pass
def test2():
   pass
...
def test20():
   pass

然后我用一个接一个的方法来称呼他们:

代码语言:javascript
复制
test1()
test2()
...
test20()

有没有办法给方法一个“别名”的名字?我知道这听起来很疯狂,但这是QA世界的共同需求。

例如,我希望有一个参数数组“测试”,我可以这样说:

代码语言:javascript
复制
tests = [2,4,5-7]

然后只运行:

代码语言:javascript
复制
test2()
test4()
test5()
test6()
test7()

我目前正在进行注释,在特定的时刻不需要注释行,但是我有更大的测试,前面有100个“测试”,注释60-70行是很疯狂的。

什么是避免注释的最佳方法,但只执行代码的某些部分。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-12-11 16:08:08

有几种方法可以做到这一点。最简单的可能是:

代码语言:javascript
复制
testDict = {1:test1,
           2:test2,
           3:test2,
           ..
           }

test = [2,4,5,6,7]

for testNum in tests:
   testDict[testNum]()
票数 2
EN

Stack Overflow用户

发布于 2015-12-11 16:10:26

您可以使用inspect.getmembers(<Class name>,inspect.ismethod)从类中检索方法的列表。

然后创建一个循环来检索那些以' test*‘开头的函数,最后创建一个函数来循环每个要运行的test*函数。要做到这一点,就需要构建字符串'test‘,并运行eval():eval('test<num>')()

稍后,如果您感兴趣,我可以给您发送一个工作代码。

相同的

票数 0
EN

Stack Overflow用户

发布于 2015-12-11 16:15:30

您可以准备一个函数名列表,然后检索相应的对象并调用它们。

概念证明:

代码语言:javascript
复制
import sys 

def test1():
    print("T1")
def test2():
    print("T2")
def test3():
    print("T3")
def test5():
    print("T5")

run_tests = [1,3,2,4]

this_module = sys.modules[__name__]
for test in run_tests:
    func_name = "test{}".format(test)
    try:
        func = getattr(this_module, func_name)
    except AttributeError:
        # no such function
        continue
    try:
        func()
    except TypeError:
        # not a function
        pass
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34227500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档