基于登录的自动化测试

登录正向和反向用例如何区分

1、思路:在测试用例中添加一个标识正向案例和逆向案例的标记:False,True

步骤:

  • 调用登录方法(输入,点击登录)

  • 判断是否正向用例:

    • 判断安全退出是否存在

    • 点击安全退出

    • 点击登录链接

  • 否则:

    • 获取登录异常信息

    • 断言操作

    • 点击异常提示框

  • base

    • 基类

      • page页面的一些公共的方法

        • 点击方法

        • 输入方法

        • 获取文本方法

        • 截图方法

        • 判断元素是否找到

    • 方法以base开头

    • 可以用于下一个项目的

  • page

    • 页面对象

      • 一个页面封装一个对象

        • 继承Base

    • 实现

      • 1、模块名:Page+实际操作模块名称

        • page_login.py

      • 2、页面对象名

        • 以打驼峰方法将模块名抄一遍,去掉下划线

      • 3、方法

        • 涉及到元素,将每个元素单独封装成一个方法

      • 4、组装

        • 根据需求组装以上步骤

    • 登录:

      • 点击登录链接

      • 输入用户名

      • 输入密码

      • 输入验证码

      • 点击登录按键

      • 成功:跳转页面,可以找到退出信息

        • 点击安全退出

        • 并点击登录链接

      • 失败:提示信息弹出

        • 获取提示信息,断言

        • 点击确认

        • 注意有无iframe嵌套以及页面切换

  • 测试脚本

    • 使用夹具,每一次测试用例执行之前初始化driver,点击登录链接

    • 结束后,关闭驱动

Base基类

'''
基类
点击方法
输入方法
获取信息方法
截图方法
提高复用率
'''
import os
os.environ['SE_DRIVER_MIRROR_URL'] = 'https://cdn.npmmirror.com/binaries/chrome-for-testing'
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
class Base:
    def __init__(self):
        self.driver = webdriver.Chrome()
        self.driver.get('http://192.168.174.181/')
​
​
    #查找元素
    def base_find_lement(self,loc,timeout=30,pol=0.5):
        #loc为变量
        return WebDriverWait(self.driver, timeout, pol).until(lambda x:x.find_element(*loc))
​
    #点击
    def base_clik(self,loc):
        self.base_find_lement(loc).click()
    #输入
    def base_input(self,loc,value):
        #查找元素
        ele = self.base_find_lement(loc)
        #清空
        ele.clear()
        #输入元素
        ele.send_keys(value)
    #获取错误信息文本
    def base_get_text(self,loc):
        #查找元素
        return self.base_find_lement(loc).text
        #打印
    #获取截图
    def base_get_image(self):
        self.driver.get_screenshot_as_file('../image/1.png')
        # 判断元素是否存在 方法封装
​
    def base_ele_is_exist(self, loc):
        try:
            self.base_find_lement(loc, timeout=2)
            return True  # 代表元素存在
        except:
            return False  # 代表元素不存在

page类

from selenium.webdriver.common.by import By
from v4 import page
from v4.base.base import Base
​
​
class PageLogin(Base):
    #点击登录链接
    def page_click_login_link(self):
        self.base_clik(page.login_link)
    #输入用户名
    def page_input_usr(self,name):
        self.base_input(page.login_uername,name)
    #输入密码
    def page_input_pwd(self,pwd):
        self.base_input(page.login_pwd,pwd)
    #输入验证码
    def page_input_vrycode(self,code):
        self.base_input(page.login_verify_code,code)
​
    #点击登录
    def page_input_login(self):
        self.base_clik(page.login_link)
    #获取异常信息 确认
    def page_get_erro_info(self):
        self.base_get_text(page.login_err_info)
    def page_click_erro_btn_ok(self):
        self.base_clik(page.login_err_info_ok)
    #截图
    def page_get_screeshot(self):
        self.base_get_image()
​
    #点击安全退出 ---》》推出使用
    def page_click_logout(self):
        self.base_clik(page.login_layout)
    #判断是否登录成功
    def page_is_login_success(self):
        #登录成功,返回True
        #
        return self.base_ele_is_exist(page.login_layout)
​
    #组合业务逻辑(输入+点击登录)
    def  page_login(self,usrname,pwd,verify_code):
        self.page_input_usr(usrname)
        self.page_input_pwd(pwd)
        self.page_input_vrycode(verify_code)
        self.page_input_login()

init.py

from selenium.webdriver.common.by import By
login_link= By.LINK_TEXT,'登录'
login_uername = By.ID,'username'
login_pwd = By.ID,'password'
login_verify_code = By.ID,'verify_code'
login_btn = By.CSS_SELECTOR,'a[class="J-login-submit"]'
login_err_info = By.CSS_SELECTOR,'[class="layui-layer-content layui-layer-padding"]'
login_err_info_ok = By.CSS_SELECTOR,'.layui-layer-btn0'
login_layout = By.CSS_SELECTOR,'[href="/Home/user/logout.html"]'

测试脚本

import unittest
​
from v4.page.page import PageLogin
from parameterized import parameterized
​
def get_data():
    return [('13188888761','12345','8888','验证码错误','False'),
            ('13188888763', '12345', '8888', '验证码错误','False')
            ]
class TestLogin(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        #打开浏览器,初始化driver
​
        cls.login = PageLogin()
        #点击登录链接
        cls.login.page_click_login_link()
​
    @classmethod
    def tearDownClass(cls) -> None:
        #关闭驱动对象
        cls.login.driver.quit()
    @parameterized.expand(get_data())
    def test_login_ok(self,usrname,pwd,verfify_code,expect_result,success):
        #调用登录方法
           if success:
              try:
                  self.assertTrue(self.login.page_is_login_success())
                  self.login.page_click_logout()
              except:
                    self.login.page_get_screeshot()
​
               #判断安全退出是否存在-存在,点击,退出;不存在,
               #获取安全退出
           else:
               self.login.page_login(usrname, pwd, verfify_code)
               # 获取登录提示信息
               msg = self.login.page_get_erro_info()
​
               try:
                   self.assertIn(expect_result, msg)
               except:
                   self.login.page_get_screeshot()
Logo

电商企业物流数字化转型必备!快递鸟 API 接口,72 小时快速完成物流系统集成。全流程实战1V1指导,营造开放的API技术生态圈。

更多推荐