01. 实现登录功能的UI自动化测试脚本

在软件开发过程中,登录功能是一个非常重要且常见的功能。为了确保登录功能的稳定性和正确性,我们可以利用UI自动化测试来自动验证登录流程。本文将介绍如何编写一个登录功能的UI自动化测试脚本,并通过使用Selenium和pytest库实现自动化测试。

技术栈

  • Python编程语言
  • Selenium库
  • pytest测试框架

准备工作

在编写自动化测试脚本之前,我们需要进行一些准备工作。以下是准备工作的步骤:

  1. 安装Python:访问Python官方网站(https://www.python.org/),下载并安装最新版本的Python解释器。
  2. 安装依赖库:使用pip命令安装Selenium和pytest库。
Copy code
pip install selenium pytest
  1. 下载浏览器驱动程序:根据你使用的浏览器类型,下载相应的浏览器驱动程序,并将其添加到系统的环境变量中。

自动化项目录

ui_project/
  |-- tests/
  |     |-- test_module1.py
  |     |-- test_module2.py
  |     |-- ...
  |
  |-- pages/
  |     |-- page_module1.py
  |     |-- page_module2.py
  |     |-- ...
  |
  |-- utils/
  |     |-- utility_module1.py
  |     |-- utility_module2.py
  |     |-- ...
  |
  |-- data/
  |     |-- test_data1.json
  |     |-- test_data2.csv
  |     |-- ...
  |
  |-- reports/
  |     |-- report1.html
  |     |-- report2.html
  |     |-- ...
  |
  |-- config/
  |     |-- config.py
  |
	|-- error_images
	|     |--1.png
      	|--2.png
  |-- conftest.py
  |-- requirements.txt

简要说明:

  • tests/: 这个目录用于存放测试代码,每个测试模块(或测试套件)对应一个测试文件。
  • pages/: 这个目录包含了页面对象模式(Page Object Pattern)的实现,每个页面对象对应一个模块文件,用于封装页面的元素定位和操作。
  • utils/: 这个目录用于存放测试过程中使用的实用工具、辅助函数或自定义的测试工具库。
  • data/: 这个目录包含测试所需的数据文件,如测试数据、配置文件等。
  • reports/: 这个目录用于存放测试报告,可以是HTML报告、JUnit XML报告或其他格式的报告文件。
  • config/: 这个目录包含测试配置文件,如URL、数据库连接信息、日志级别等。
  • conftest.py 文件在测试运行过程中会被自动识别并加载,因此可以在其中定义多个 fixture,这些 fixture 可以被测试用例或其他文件引用和共享。通过定义 fixture,可以实现一些常见的测试准备和清理操作,例如创建和销毁测试环境、初始化和清理测试数据等。
  • requirements.txt: 这个文件列出了项目所依赖的外部库和版本号,用于创建和管理虚拟环境。
  • error_images:错误截图存放地址

这是我项目目录
image.png

编写测试脚本

这里自动胡脚本使用PO设计思想:
即:

  1. 以web页面为对象,页面里面的操作为方法
  2. 页面属性+页面行为组成page_object
分析页面

以“柠檬班”商城为例
image.png

1. 用户名输入框
find_element_by_xpath('//input[@placeholder="用户名"]')
2. 密码输入框
find_element_by_xpath('//input[@placeholder="密码"]')
3. 验证码输入框
find_element_by_xpath('//input[@placeholder="验证码"]')
4.登录按钮
find_element_by_xpath('//input[@value="登录"]')
编写登录页面
import time

from selenium import webdriver


class LoginPage():
    def __init__(self,driver):
        self.driver=driver

    def manage_login(self, username, password):
        # 1. 用户名输入框
        self.driver.find_element_by_xpath('//input[@placeholder="用户名"]').send_keys(username)
        # 2. 密码输入框
        self.driver.find_element_by_xpath('//input[@placeholder="密码"]').send_keys(password)
        # 3. 验证码输入框
        code = self.driver.find_element_by_xpath('//input[@placeholder="验证码"]')
        code.send_keys('lemon')
        # 4. 登录按钮
        login_btn = self.driver.find_element_by_xpath('//input[@value="登录"]')
        login_btn.click()
        self.driver.implicitly_wait(5)
        user = self.driver.find_element_by_xpath('//div[@class="el-dropdown"]/span[text()="student"]')
        assert user.text == username
        print(user.text)


if __name__ == '__main__':
    dr = webdriver.Chrome()#创建了一个 Chrome WebDriver 实例,用于控制 Chrome 浏览器。
    dr.get("http://mall.lemonban.com/admin/#/login")#打开了指定的网页
    cl = LoginPage(dr)#创建了一个 LoginPage 的实例,将之前创建的 WebDriver 实例传递给它。
    cl.manage_login("student",'123456a')
    time.sleep(3)
    dr.quit()#关闭了 WebDriver 实例,即关闭 Chrome 浏览器。

通过上述代码,我们就可以实现UI登录了

编写测试用例
import pytest
from selenium import webdriver

from page.manage.page3_add_product import LoginPage
class TestManageLogin:
    @pytest.mark.usefixtures('setup_tear_down')
    def test_manage_login(self,setup_tear_down):
        driver=setup_tear_down
        cl=LoginPage(driver)
        cl.manage_login(username='student',password='123456a')

定义了一个测试类 TestManageLogin,并在其中定义了一个测试方法 test_manage_login。该方法使用 @pytest.mark.usefixtures 装饰器指定了前面定义的 setup_tear_down fixture。
在测试方法中,首先通过参数 setup_tear_down 获取了 WebDriver 实例,并将其传递给 LoginPage 的构造函数来创建一个 LoginPage 对象。然后调用 manage_login 方法,传递了用户名 “student” 和密码 “123456a”,执行登录操作。

使用conftest.py文件来存放fixture前后置条件
定义了一个 fixture,用于创建和关闭 WebDriver 实例,而 test1_manage_login.py 文件包含了测试类和测试方法,通过使用 fixture 获取 WebDriver

@pytest.fixture(scope='class')
def setup_tear_down():
    driver = webdriver.Chrome()
    driver.get('http://mall.lemonban.com/admin/#/login')
    yield driver
    driver.quit()
执行测试用例
import pytest

if __name__ == '__main__':
    pytest.main(["-sv", "tests/test1_manage_login.py"]
)

"""
-s:表示输入出所有的print语句
-v:表示输入详细的测试结果信息

"""
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值