匿名职言 web 自动化 selenium+unittest+python,加了 ddt 数据驱动后不能运行单个用例的测试为啥,有大佬解答一下吗

萧智辉 · 2024年01月18日 · 最后由 萧智辉 回复于 2024年01月19日 · 3479 次阅读

系统是 ubuntu,工具是 pycharm 社区版
这里单独运行 test_login_001 为什么会报错,有 ddt 数据驱动

test2_null_user_login,单独运行就能成功,没有 ddt 数据驱动

运行 if name == 'main',就都能运行三个用例不会报错

加新用例后,想进行调试都要运行这个文件,或者注释掉其他的用例

共收到 8 条回复 时间 点赞
import os
import unittest
from ddt import ddt, file_data
from framework.browser_engine import BrowserEngine
from framework.browser_info import Browser_Info
from page_objects.test_login_logout.test_login import Login_And_Logout_Page
from framework.logger import Logger
logger = Logger(logger='测试结果').get_log()
get_browser_info = Browser_Info()
project_path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
data_path = os.path.join(project_path, 'data', 'account.json')  # 指定JSON文件的路径

@ddt
class TestRegister(unittest.TestCase):
    """
    测试注册模块
    """

    def setUp(self):
        """
        测试固件的setUp()的代码,主要是测试的前提准备工作
        """
        browser = BrowserEngine(self)
        self.driver = browser.open_browser(self)

    def tearDown(self):
        """
        测试结束后的操作,这里基本上都是关闭浏览器
        """
        # self.driver.close()
        self.driver.quit()

    # 拿到json里的数据进行数据驱动测试
    @file_data(data_path)
    def test_login_001(self, **kwargs):
        """
        admin账号登录
        """
        print(data_path)
        name = kwargs.get('name')
        password = kwargs.get('password')
        captcha = kwargs.get('captcha')
        register_page = Login_And_Logout_Page(self.driver)
        result = register_page.get_login_result(name, password, captcha)
        if result:
            self.assertTrue(result, logger.info("登录用例执行成功."))

        else:
            self.assertTrue(result, logger.error("登录用例执行失败!"))

    def test2_null_user_login(self):
        """
        空用户名登录
        """
        register_page = Login_And_Logout_Page(self.driver)
        result = register_page.get_null_user_login()
        if result:
            self.assertTrue(result, logger.info("空用户名登录用例执行成功."))

        else:
            self.assertTrue(result, logger.error("空用户名登录用例执行失败!"))
if __name__ == '__main__':
    unittest.main()

网上说的把光标放外面什么的,都不行

看报错是找不到对应的用例,ddt 是修改了用例名称的。你可以试试其他方法加载用例

unittest 不会像 pytest 那样自动发现执行用例,得你自己指定测试方法到测试套件中

谭鹏 回复

运行的时候 test_login_001 名称已经被修改了,所以找不到对应的 test_login_001 用例。

谭鹏 回复

这样吗,明天看看 ddt 文档研究一下

姜鹏涛 回复

已经发现用例了的,就是加了 ddt 数据驱动会报错,不加 ddt 数据驱动就能跑起来

萧智辉 回复

ddt 数据驱动下的该测试方法会动态生成一系列测试用例,每个数据集就是一个,你不能用 pycharm 自带去发现执行,得将这测试方法加到 TestSuite,用 unittest 去执行

算了,要调试的时候去掉 ddt

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册