Python+Selenium框架实战系列003----测试数据分离与ddt技术&断言

发布时间 2023-12-22 21:31:49作者: 搁浅的青木儿

一、测试数据分离

1、新建testData文件夹,新建login_data.py文件,如下所示:

    

2、在login_datas.py文件中存放测试用例数据,如下所示:

# 正常场景
success_data = {"mobile": "17839196010", "pwd": "duhui94619"}

# 异常用例--手机号异常
phone_data = [
    {"mobile": "178391", "pwd": "duhui94619", "check": "请输入正确的邮箱或手机号"},
    {"mobile": "178391960101", "pwd": "duhui94619", "check": "请输入正确的邮箱或手机号"},
    {"mobile": "ssss", "pwd": "duhui94619", "check": "请输入正确的邮箱或手机号"},
    {"mobile": " ", "pwd": "duhui94619", "check": "请输入正确的邮箱或手机号"},
]

3、修改test_login文件,使用ddt进行参数化,并增加断言,如下所示:

import unittest

import ddt as ddt

from framework.browser_engine import BrowserEngine
from pageObjects.login_page import LoginPage as LP
from testDatas import login_datas as LD


@ddt.ddt
class TestLogin(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        """
        测试固件setUpClass(),在每个测试类执行之前运行,基本用于初始化driver和页面对象实例化
        :return:
        """
        browse = BrowserEngine(cls)
        cls.driver = browse.open_browser(cls)
        cls.lp = LP(cls.driver)  # 初始化页面的一个页面对象实例。注意,一定要带cls.driver,不然会报错

    @classmethod
    def tearDownClass(cls):
        """
        测试固件tearDownClass(),测试类结束后的操作,这里基本上都是关闭浏览器
        :return:
        """
        cls.driver.quit()

    '''
    def setUp(self):
        """
        测试固件的setUp(),在每个函数执行前执行,每执行一次test开头的函数,都要执行一次
        :return:
        """
      '''

    def tearDown(self):
        """
        测试固件的setUp(),在每个函数执行结束后执行,此处用于函数执行结束后刷新当前页面
        :return:
        """
        self.driver.refresh()

    # 正常场景
    def test_login_normal(self, doc=""):
        """
        这里一定要test开头,把测试逻辑代码封装到一个test开头的方法里。
        :return:
        """
        doc = "登录_登录_正常登录"
        self.lp.loginLink()  # 调用页面对象中的方法
        self.lp.login(LD.success_data["mobile"], LD.success_data["pwd"])
        self.assertTrue(self.lp.get_exist())
        self.lp.get_windows_img(doc)  # 调用基类的截图方法

    # 异常用例---手机号错误
    @ddt.data(*LD.phone_data)
    def test_login_error(self, data):
        self.lp.loginLink()  # 调用页面对象中的方法
        self.lp.login(data["mobile"], data["pwd"])
        self.assertEqual(self.lp.get_moblie_error(), data["check"])


if __name__ == '__main__':
    unittest.main()