美文网首页
Python+Selenium+Unittest+Ddt+HTM

Python+Selenium+Unittest+Ddt+HTM

作者: 蜀山客e | 来源:发表于2020-08-22 14:45 被阅读0次

基于Python3+Selenium3+Unittest分布式数据驱动自动化测试框架结构

1、Business:公共业务模块,如登录模块,可以把登录模块进行封装供调用

------login_business.py

from Page_Object.Common_Page.login_page import Login_Page
from HTMLReport import logger
import time


def login(driver, username, password):
    """
    登录业务
    :param driver:浏览器驱动
    :param username:用户名
    :param password:密码
    :return:None
    """
    logger().info(f"使用用户名:{username},密码:{password}进行登陆")
    login_page = Login_Page(driver)
    login_page.send_username(username)
    login_page.send_password(password)
    login_page.submit()
    time.sleep(2)

----Base_url.py:对应的url地址

2、Common:与业务无关的公共模块,如对Selenium的二次封装,方便后期的调用,还有一些工具类,如在读取数据时需要对读取文件进行封装

3、PageOBject:这个就应该不用多说了,页面元素的封装,这个根据自己公司系统的业务去做分层封装(不做过多解释)

— loginpage.py

from selenium.webdriver.common.by import By
from Common.selenium_library import SeleniumBase


class Login_Page(SeleniumBase):
    """登录页面"""
    loc_user = (By.NAME, "account")
    loc_psw = (By.NAME, "password")
    loc_sub=(By.CLASS_NAME,"el-button")

    def send_username(self, username):
        self.logger.info(f"输入用户名{username}")
        self.send_keys(self.loc_user, username)

    def send_password(self, password):
        self.logger.info(f"输入密码{password}")
        self.send_keys(self.loc_psw, password)

    def submit(self):
        self.logger.info("点击登录按钮")
        self.click_element(self.loc_sub)

4、report:测试报告

5、TestCase:测试用例层,下面以logincase为例子

—logincase.py

import unittest
from Business.Base_url import url_index
import ddt
from Common.tools.read_txt import read_txt
from HTMLReport import logger
from Page_Object.Common_Page.index_page import Index_Page
from Common.selenium_library import SeleniumBase
from Business.login_business import login


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

    def setUp(self):
        self.driver = SeleniumBase().get_web_driver()

    def tearDown(self):

        SeleniumBase(self.driver).quit()

    @ddt.unpack
    @ddt.data(*read_txt('TestData/login_user_password.txt'))
    def test_login(self, username, password, assert_type):
        se = SeleniumBase(self.driver)
        se.get(url_index)
        login(self.driver, username, password)
        se.add_page_screen_shot()

        if assert_type == '1':
            logger().info("断言登陆成功")
            text = Index_Page(self.driver).login_success()

            self.assertIn("测试", text, '登陆成功断言')

        elif assert_type == "2":
            text = self.driver.find_element_by_id("submit").text
            self.assertIn("立即登录", text, '登陆失败断言')

        elif assert_type == "3":
            text = self.driver.find_element_by_id("submit").text
            self.assertIn("立即登录", text, '登陆失败断言')

        elif assert_type == "4":
            text = self.driver.find_element_by_id("submit").text
            self.assertIn("立即登录", text, '登陆失败断言')

        else:
            logger().info(f"未知断言类型{assert_type}")
            self.assertTrue(False, "未知断言类型")

6、TestData:测试数据,对应用例的数据都是在这里去取

7、TestSuite:测试套件,以登录套件为例

—loginsuite.py

import unittest

from TestCase.LoginCase import login_case


def return_suite():
    suite=unittest.TestSuite()

    loader=unittest.TestLoader()

    suite.addTests(loader.loadTestsFromTestCase(login_case.Test_login))

    return suite

8、browser.ini:浏览器配置文件

[local]
local_browser = False
wait_time = 10

[browser]
name = chrome
;name = firefox
;name = ie
window_width =
window_height =

[grid]
command_executor = http://127.0.0.1:4444/wd/hub
headless = False
proxy =

9、run.py:整体运行文件,框架结构如图


点赞关注~~加入我们,了解更多。642830685。群内免费领取最新软件测试大厂面试资料和Python自动化、接口、框架搭建学习资料!技术大牛解惑答疑,同行一起交流。

相关文章

网友评论

      本文标题:Python+Selenium+Unittest+Ddt+HTM

      本文链接:https://www.haomeiwen.com/subject/kkyejktx.html