Python unittest中如何在一个测试类中调用另一个类的测试方法
实现方案
有两种常用的实现方式,可根据你的项目实际情况选择:
方案1:调整继承关系(最推荐,改动最小适配最好)
你只要把ContentTest加到AppTest的父类继承列表中,就能直接调用对应方法,修改后代码如下:
import pytest import unittest # 记得先导入ContentTest所在模块的类 from 你的模块名 import ContentTest @pytest.mark.usefixtures('beforeClass', 'beforeMethod') # 把ContentTest加到继承列表最前面即可 class AppTest(ContentTest, ContentAdTest, unittest.TestCase): def test_app_install_ad(self): # 直接通过self调用目标方法 self.test_recycler_view_ad() self.cad.click_on_app()
这种方式不需要额外处理上下文,ContentTest依赖的fixture、属性都会和AppTest的现有逻辑自动适配。
方案2:不修改继承结构直接调用
如果你的项目不允许调整AppTest的继承关系,可以直接调用类方法,把当前实例作为参数传入即可:
import pytest import unittest from 你的模块名 import ContentTest @pytest.mark.usefixtures('beforeClass', 'beforeMethod') class AppTest(ContentAdTest, unittest.TestCase): def test_app_install_ad(self): # 直接调用ContentTest的方法,将当前self作为实例传入 ContentTest.test_recycler_view_ad(self) self.cad.click_on_app()
注意:使用该方案需要确保
AppTest实例已经初始化好了test_recycler_view_ad依赖的所有属性(比如示例中的cad对象),否则会出现属性不存在的报错。
优化建议
如果这个操作逻辑后续会在多个地方复用,更合理的做法是把公共逻辑从test开头的用例方法中抽离出来,避免直接调用测试用例方法导致混淆:
# 先修改ContentTest类 class ContentTest(unittest.TestCase): # 抽离为独立的公共工具方法 def handle_recycler_view_ad(self): self.cad.navigate_back_to_screen() self.cad.click_on_recycle() def test_basic_content_ad(self): self.cad.click_on_ad() self.cad.click_on_ex_ad() def test_recycler_view_ad(self): self.handle_recycler_view_ad()
后续所有需要用到该逻辑的地方直接调用self.handle_recycler_view_ad()即可,也不会出现pytest把工具方法识别成测试用例执行的问题。
内容的提问来源于stack exchange,提问作者ankit Sharma
相关产品推荐
相关产品推荐

