背景
在利用unittest组织UI脚本时,可能需要在执行时实时传递一些参数到case中,比如设备id、用户账号、密码等等;
但在unittest原测试类中,只可传递一个method参数,不方便传递。
解决方法
可以在测试类B上层添加一个父类A,类A继承unittest.TestCase,同时类A重写__init__构造函数,添加需要的额外参数。
# unittest正常调用
import unittest
class MyTestCase(unittest.TestCase):
def setUp(self):
print("执行case前")
def test_my_first_case(self):
print("case执行中")
def tearDown(self):
print("执行case后")
if __name__ == "__main__":
suit = unittest.TestSuite()
suit.addTest(MyTestCase("test_my_first_case"))
runner = unittest.TextTestRunner()
runner.run(suit)
# 执行结果
"""
执行case前
case执行中
执行case后
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
"""
补充父类,重写构造方法
import unittest
class ParameterTest(unittest.TestCase):
# 重写init方法,补充额外参数
# 接受参数定义为对象属性
def __init__(self, method, deviceid, account):
# 复用父类 unittest.TestCase init方法
super(ParameterTest, self).__init__(method)
self.deviceid = deviceid
self.account = account
class MyTestCase(ParameterTest):
def setUp(self):
print("执行case前")
def test_my_first_case(self):
# case中可正常操作外面传递的参数
print(f"需要额外参数{self.deviceid}")
print("case执行中")
print(f"需要额外参数{self.account}")
def tearDown(self):
print("执行case后")
if __name__ == "__main__":
suit = unittest.TestSuite()
# 此时添加case时,就可以传递额外参数了
suit.addTest(MyTestCase("test_my_first_case", "KFTKYH7PRC85TKDA", "18222112211"))
runner = unittest.TextTestRunner()
runner.run(suit)
# 执行结果
"""
执行case前
需要额外参数KFTKYH7PRC85TKDA
case执行中
需要额外参数18222112211
执行case后
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
"""