按名称重用 python 中的方法
Reusing methods in python by name
我正在使用 python 执行一些没有测试框架的自动化测试活动(REST API 测试)。它只是不使用 OO 方法的常规 python 脚本。
因此,我 运行 进行了 400 次测试,但假设我有 20 个端点,然后每个端点都被不同的参数命中 20 次。
现在,我将每个 "test" 创建为一个函数,这意味着我有:
def test1():
pass
def test2():
pass
...
def test20():
pass
然后我在main方法中一个接一个地调用它们:
test1()
test2()
...
test20()
有没有办法给方法一个 "alias" 名称?我知道这听起来可能很疯狂,但这是 QA 领域的普遍需求。
例如,我想要一个参数数组 "tests",我可以在其中说:
tests = [2,4,5-7]
这将 运行 只有:
test2()
test4()
test5()
test6()
test7()
我目前正在注释掉,并且在特定时刻取消注释不需要的行,但我有更大的测试,前面有 100 "tests",注释 60-70 行是疯狂的。
避免注释但只执行代码的某些部分的最佳方法是什么。
有几种方法可以做到这一点。可能最简单的是:
testDict = {1:test1,
2:test2,
3:test2,
..
}
test = [2,4,5,6,7]
for testNum in tests:
testDict[testNum]()
您可以使用 inspect.getmembers(<Class name>,inspect.ismethod)
从您的 class 中检索方法列表。
然后你做一个循环来只检索以 'test*' 开头的那些,最后你创建一个函数来循环你想要 运行 的每个测试*函数。为此,您构建字符串 'test' 并 运行 eval(): eval('test<num>')()
.
稍后,如果你有兴趣,我可以发给你一个工作代码。
山姆
您可以准备一个函数名称列表,然后检索相应的对象并调用它们。
概念证明:
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
我正在使用 python 执行一些没有测试框架的自动化测试活动(REST API 测试)。它只是不使用 OO 方法的常规 python 脚本。
因此,我 运行 进行了 400 次测试,但假设我有 20 个端点,然后每个端点都被不同的参数命中 20 次。
现在,我将每个 "test" 创建为一个函数,这意味着我有:
def test1():
pass
def test2():
pass
...
def test20():
pass
然后我在main方法中一个接一个地调用它们:
test1()
test2()
...
test20()
有没有办法给方法一个 "alias" 名称?我知道这听起来可能很疯狂,但这是 QA 领域的普遍需求。
例如,我想要一个参数数组 "tests",我可以在其中说:
tests = [2,4,5-7]
这将 运行 只有:
test2()
test4()
test5()
test6()
test7()
我目前正在注释掉,并且在特定时刻取消注释不需要的行,但我有更大的测试,前面有 100 "tests",注释 60-70 行是疯狂的。
避免注释但只执行代码的某些部分的最佳方法是什么。
有几种方法可以做到这一点。可能最简单的是:
testDict = {1:test1,
2:test2,
3:test2,
..
}
test = [2,4,5,6,7]
for testNum in tests:
testDict[testNum]()
您可以使用 inspect.getmembers(<Class name>,inspect.ismethod)
从您的 class 中检索方法列表。
然后你做一个循环来只检索以 'test*' 开头的那些,最后你创建一个函数来循环你想要 运行 的每个测试*函数。为此,您构建字符串 'test' 并 运行 eval(): eval('test<num>')()
.
稍后,如果你有兴趣,我可以发给你一个工作代码。
山姆
您可以准备一个函数名称列表,然后检索相应的对象并调用它们。
概念证明:
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