如何为pytest创建可继承的BaseTest基类,解决运行时空套件报错问题
问题根因
你遇到的Empty suite报错核心有两个问题:
- 测试基类
BaseTest自定义了__init__构造方法,pytest实例化测试类时默认不会传入任何参数,会直接导致类实例化失败,pytest就会忽略整个测试类,最终识别不到任何用例 - 就算绕过了实例化问题,
__init__执行时chrome_driver_initfixture还没运行,self.driver还未被注入,初始化页面对象时也会报属性不存在的错误
解决方法
把BaseTest里的__init__替换为pytest自带的setup_method方法即可,该方法会在每个测试用例执行前、fixture注入完成后自动运行,此时self.driver已经被成功赋值,可以正常初始化页面对象。
修改后的base_test.py代码:
import pytest # 补充你自己的页面对象导入路径 from xxx import LoginPage, HomePage, DetailsPage @pytest.mark.usefixtures('chrome_driver_init') class BaseTest: def setup_method(self): self.login_page = LoginPage(self.driver) self.home_page = HomePage(self.driver) self.details_page = DetailsPage(self.driver)
test_login.py和conftest.py无需任何修改,直接运行pytest即可正常识别到测试用例。
额外注意事项
- pytest的所有测试类(包括基类)都禁止自定义构造方法,所有初始化逻辑请通过
setup_method(每个用例前执行)/setup_class(整个测试类仅执行一次)或者fixture实现 - 确认测试文件命名符合
test_*.py或*_test.py规则,测试类中的用例方法命名符合test_*规则,你当前提供的命名符合要求无需调整
内容的提问来源于stack exchange,提问作者cdub
相关产品推荐
相关产品推荐

