从零开始学习软件测试-第37天笔记

web自动化

生成HTML测试报告

import unittest
# 导入第三方模块
from HTMLTestRunner import HTMLTestRunner

if __name__ == '__main__':
   allCase = unittest.defaultTestLoader.discover("./scripts", pattern="test*.py")
   with open("./report/report.html", "wb") as f:
        # 操作步骤 1.文件 2.控制台输出级别 3.文件的标题 4.注释
        HTMLTestRunner(f, 2, "报告标题", "备注").run(allCase)

po模式

po模式里包含三个包base,page,script 以及一个main方法

案例:使用po模式封装,自动化测试QQ邮箱,登录失败case。

创建一个base包,base里创建一个base_action的文件,该文件主要封装的是webdriver里定位元素和操作元素的方法。

from selenium.webdriver.support.wait import WebDriverWait


class BaseAction(object):
    # 调用浏览器驱动的方法
    def __init__(self, driver):
        self.driver = driver

    # 添加显式等待,并定位元素的方法
    def find_element(self, stamp, time=10, poll=0.1):
        return WebDriverWait(self.driver, time, poll).until(lambda x: x.find_element(*stamp))

    # 定位并点击元素的方法
    def click(self, stamp, time=50, poll=0.1):
        self.find_element(stamp, time, poll).click()

    # 定位输入框,并输入数据的方法
    def send_keys(self, stamp, text, time=10, poll=0.1):
        self.find_element(stamp, time, poll).send_keys(text)

    # 定位元素,并返回属性值的方法
    def get_attribute(self, stamp, text, time=10, poll=0.1):
        return self.find_element(stamp, time, poll).get_attribute(text)
    
    # 定位元素,并返回文本内容的方法
    def get_text(self, stamp, time=10, poll=0.1):
        return self.find_element(stamp, time, poll).text
    
    # 转换frame的方法
    def switch_frame(self, text):
        self.driver.switch_to.frame(text)

创建一个page包,page里创建一个文件login_QQ_page,该文件继承BaseAction,创建一个类,创建类属性,根据属性调用base里的方法。

from selenium.webdriver.common.by import By

from base.base_action import BaseAction


class LoginQQ(BaseAction):
    # 元素特征
    click_password_login = By.XPATH, '//*[@id="switcher_plogin"]'  # 密码登录
    user_name = By.ID, 'u'  # 账号
    pass_word = By.ID, 'p'  # 密码
    login_click = By.ID, 'login_button'  # 登录按钮
    check_label = By.XPATH, '//*[@id="newVcodeArea"]/div[1]/div/div[2]'  # 断言 “安全注册”
    frame1_label = By.CSS_SELECTOR, '#QQMailSdkTool_login_loginBox_qq>iframe'  # frame1
    frame2_label = By.ID, 'ptlogin_iframe'  # frame2

    # 切换到frame1
    def frameLabel1(self):
        self.switch_frame(self.find_element(self.frame1_label))

    # 切换到frame2
    def frameLabel2(self):
        self.switch_frame(self.find_element(self.frame2_label))

    # 点击密码登录
    def clickPaLogin(self):
        self.click(self.click_password_login)

    # 输入账号
    def userName(self, text):
        self.send_keys(self.user_name, text)

    # 输入密码
    def passWord(self, text):
        self.send_keys(self.pass_word, text)

    # 点击登录按钮
    def loginClick(self):
        self.click(self.login_click)

    # 断言
    def checking(self):
        return self.get_text(self.check_label)

创建一个scripts包,里面创建一个文件test_login_QQEmail,该文件中创建一个测试类,并实例化page的对象,去调用page里的方法。

import unittest
from selenium import webdriver
from time import sleep
from page.login_QQ_page import LoginQQ


class TestLoginQQ(unittest.TestCase):
    # 初始化方法
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.get('https://mail.qq.com/')
        self.driver.maximize_window()
        # 实例化page对象
        self.login_QQ = LoginQQ(self.driver)

    # 结束方法
    def tearDown(self):
        sleep(3)
        self.driver.quit()

    # QQ邮箱登录功能用例
    def test_login_QQ(self):
        self.login_QQ.frameLabel1()
        self.login_QQ.frameLabel2()
        self.login_QQ.clickPaLogin()
        self.login_QQ.userName('666666')
        self.login_QQ.passWord('123456')
        self.login_QQ.loginClick()
        assert self.login_QQ.checking() == '安全验证'

在项目里创建一个main文件,该文件去执行测试用例和生成HTML报告。

import unittest
from HTMLTestRunner import HTMLTestRunner

if __name__ == '__main__':
    allCase = unittest.defaultTestLoader.discover('./scripts', 'test_login_QQEmail.py')
    with open('./report/report.html', 'wb') as f:
        HTMLTestRunner(f, 2, 'QQ邮箱登录功能测试报告', '请在windows系统和Chrome上运行此脚本').run(allCase)

你可能感兴趣的:(web自动化,软件测试,Python,学习,笔记,python,自动化)