按名称重用python中的方法

时间:2015-12-11 15:52:20

标签: python testing automated-tests

我正在使用python执行一些没有测试框架的自动化测试活动(REST API测试)。它只是不使用OO方法的常规python脚本。

因此,我正在进行400次测试,但是假设我有20个端点,每个端点在不同参数下被击中20次。

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

def test1():
   pass
def test2():
   pass
...
def test20():
   pass

然后我一个接一个地在main方法中调用它们:

test1()
test2()
...
test20()

有没有办法给方法一个“别名”名称?我知道这可能听起来很疯狂,但这在QA世界中是常见的需求。

所以,例如,我想要一个参数数组“测试”我可以说:

tests = [2,4,5-7]

然后才会运行:

test2()
test4()
test5()
test6()
test7()

我目前正在评论,并且在特定时刻不需要注释线条,但我在我面前进行了100次“测试”的更大测试,并且评论60-70行是疯狂的。

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

3 个答案:

答案 0 :(得分:2)

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

testDict = {1:test1,
           2:test2,
           3:test2,
           ..
           }

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

for testNum in tests:
   testDict[testNum]()

答案 1 :(得分:0)

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

然后你创建一个循环只检索那些以'test *'开头的循环,最后你创建一个函数来遍历你想要运行的每个test *函数。为此,您需要构建字符串'test'并运行eval():eval('test<num>')()

稍后,如果您有兴趣,我可以向您发送有效的代码。

萨姆

答案 2 :(得分:0)

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

概念证明:

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