Python 3.7 + Selenium UI 自动化测试简单实例

时间:2022-07-28
本文章向大家介绍Python 3.7 + Selenium UI 自动化测试简单实例,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

本篇主要应用Django搭建学生管理平台,使用Python + Selenium 模拟用户注册登录场景简单实例。Django实战部分往后可能和大家见面,目前还在学习,对于一些异常处理和业务模型还在摸索。

Django学生管理平台仓库地址: https://github.com/A-HUAN/Django-courseSelectionSystem

实际项目中用python脚本简单实现UI测试的步骤:

1.被测环境测试数据预清理 -> 2.访问网页-> 3.定位元素 -> 4.模拟人工操作 -> 5.对比数据是否与预期一致 -> 6.测试数据清理

一.分析

打开学生管理平台,浏览登录&注册页面查看其源代码,定位想要的元素 —— 导航栏,输入框,按钮。

然后我们通过定位的元素对于人工操作流程进行还原,模拟学生注册场景。

二.实现

from selenium import webdriver
import time
import pymysql

1.被测环境测试数据预清理&测试后数据清理

首先,因为UI脚本一般都是定期执行的,以注册情景来说,重复测试数据会影响测试的结果,所以就需要先对测试环境的测试数据进行清理 。

def dbClear(username):
    # --- 环境清理 ---#
    # 打开数据库连接
    db = pymysql.connect("127.0.0.1","courseSelectionSystem","123456789","courseSelectionSystem")
    # 创建游标对象
    cursor = db.cursor()
    # SQL
    sql_1 = "select * from sjjh_channel.system_user WHERE name = %s"
    sql_2 = "select * from sjjh_channel.system_student WHERE studentName = %s"
    sql_3 = "delete from sjjh_channel.system_student WHERE studentName = %s"
    sql_4 = "delete from sjjh_channel.system_user WHERE name = %s"
    try:
    # 执行SQL语句
        cursor.execute(sql_2,username)
        data2 = cursor.fetchone()
        if data2 == None:
            print('学生表测试数据为空', data2)
        else:
            print('学生表测试数据存在', data2)
            cursor.execute(sql_3,username)   # 执行删除SQL语句
    # 执行SQL语句
        cursor.execute(sql_1,username)
        # 获取单条查询数据
        data = cursor.fetchone()
        if data == None:
            print('用户表测试数据为空',data)
        else:
            print('用户表测试数据存在',data)
            cursor.execute(sql_4,username)  # 执行删除SQL语句
    # 提交事务
        db.commit()
        print('测试数据清理成功')
    except:
        # 发生错误回滚
        db.rollback()
        print("测试数据清理失败")
    db.close()

2.访问网页定位元素,模拟人工操作,对比生成数据是否与预期一致。

接下来开始设计流程模拟用户注册&登录场景

def workFlow(url_1,username,password,real_name,user_id):
    # 设置浏览器的驱动
    driver = webdriver.Chrome()
    # 打开URL
    driver.get(url_1)
    # 点击注册
    driver.find_element_by_xpath('//*[@id="my-nav"]/ul[2]/li[2]/a').click()

    # --- 重置注册场景 ---#
    # 填写信息
    driver.find_element_by_id('id_username').send_keys('111111')
    driver.find_element_by_id('id_password1').send_keys('111111')
    driver.find_element_by_id('id_password2').send_keys('111111')
    driver.find_element_by_id('id_real_name').send_keys('111111')
    driver.find_element_by_id('id_id').send_keys('111111')
    time.sleep(1)
    # 先定位到下拉框
    temp = driver.find_element_by_id('id_kind')
    # 再点击下拉框下的选项
    temp.find_element_by_xpath('//*[@id="id_kind"]/option[2]').click()
    time.sleep(2)
    # 点击重置
    driver.find_element_by_xpath('/html/body/div/div/form/button[1]').click()

    # --- 正常注册场景 ---#
    # 二次填写信息
    driver.find_element_by_id('id_username').send_keys(username)
    driver.find_element_by_id('id_password1').send_keys(password)
    driver.find_element_by_id('id_password2').send_keys(password)
    driver.find_element_by_id('id_real_name').send_keys(real_name)
    driver.find_element_by_id('id_id').send_keys(user_id)
    time.sleep(1)
    # 先定位到下拉框
    temp = driver.find_element_by_id('id_kind')
    # 再点击下拉框下的选项
    temp.find_element_by_xpath('//*[@id="id_kind"]/option[2]').click()
    time.sleep(2)
    # 点击提交按钮
    driver.find_element_by_xpath('/html/body/div/div/form/button[2]').click()
    # 点击登录导航
    driver.find_element_by_xpath('//*[@id="my-nav"]/ul[2]/li[1]/a').click()

    # --- 错误密码场景 ---#
    # 输入账户名/密码
    driver.find_element_by_id("id_username").send_keys(username)
    driver.find_element_by_id("id_password").send_keys('123')
    time.sleep(2)
    # 点击登录按钮
    driver.find_element_by_xpath('/html/body/div/div/form/button[2]').click()
    time.sleep(2)
    driver.get_screenshot_as_file("E:\Python Study\1.png") #截图
    err_1 = driver.find_element_by_xpath("/html/body/div/div/form/div[1]").text
    print('获取错误提示文本信息',err_1)    #打印信息
    time.sleep(1)
    driver.find_element_by_id("id_username").clear()
    driver.find_element_by_id("id_password").clear()

    # --- 错误用户场景 ---#
    # 输入账户名/密码
    driver.find_element_by_id("id_username").send_keys('abc')
    driver.find_element_by_id("id_password").send_keys(password)
    time.sleep(2)
    # 点击登录按钮
    driver.find_element_by_xpath('/html/body/div/div/form/button[2]').click()
    time.sleep(2)
    driver.get_screenshot_as_file("E:\Python Study\2.png") #截图
    err_2 = driver.find_element_by_xpath("/html/body/div/div/form/div[1]").text
    print('获取错误提示文本信息',err_2)    #打印信息
    time.sleep(1)
    driver.find_element_by_id("id_username").clear()
    driver.find_element_by_id("id_password").clear()

    # --- 正确登录场景 ---#
    # 输入账户名/密码
    driver.find_element_by_id("id_username").send_keys(username)
    driver.find_element_by_id("id_password").send_keys(password)
    time.sleep(2)
    # 点击登录按钮
    driver.find_element_by_xpath('/html/body/div/div/form/button[2]').click()
    time.sleep(2)
    driver.get_screenshot_as_file("E:\Python Study\3.png") #截图
    
    # --- 账号登出场景 ---#
    cookie = driver.get_cookies()
    print('登录状态获取sessionid',cookie)
    driver.find_element_by_xpath('//*[@id="my-nav"]/ul[2]/li[2]/a').click()
    time.sleep(1)
    driver.refresh()
    cookie_2 = driver.get_cookies()
    print('登出状态获取sessioid',cookie_2)
    driver.get_screenshot_as_file("E:\Python Study\4.png") #截图
    driver.quit()

3.执行

if __name__ == '__main__':
    username = 'Alon'
    password = '123456'
    real_name = 'Alon'
    user_id = '0001'
    url_1 = "http://127.0.0.1:8000/index/"
    dbClear(username)
    workFlow(url_1,username,password,real_name,user_id)
    dbClear(username)

4.日志输出

C:Python37python.exe "E:/Python Study/20190909.py"
学生表测试数据为空 None
用户表测试数据为空 None
测试数据清理成功
获取错误提示文本信息 密码不正确!
获取错误提示文本信息 用户不存在!
登录状态获取sessionid [{'domain': '127.0.0.1', 'expiry': 1599450092.979737, 'httpOnly': False, 'name': 'csrftoken', 'path': '/', 'secure': False, 'value': 'Vb29UxKCEVaMhPSkps7gGzVGVcgopIUW7u51v95ZnYeIYAUEiOqlH4sKEZ96jNQ6'}, {'domain': '127.0.0.1', 'expiry': 1569210100.862583, 'httpOnly': True, 'name': 'sessionid', 'path': '/', 'secure': False, 'value': '7uhp2y6wpx3vq1s778uvdclapkptr29w'}]
登出状态获取sessioid [{'domain': '127.0.0.1', 'expiry': 1599450092.979737, 'httpOnly': False, 'name': 'csrftoken', 'path': '/', 'secure': False, 'value': 'Vb29UxKCEVaMhPSkps7gGzVGVcgopIUW7u51v95ZnYeIYAUEiOqlH4sKEZ96jNQ6'}]
学生表测试数据存在 (16, '0001', 'Alon', None, None)
用户表测试数据存在 (16, 'Alon', '123456', 'student', datetime.datetime(2019, 9, 9, 11, 41, 21, 337193))
测试数据清理成功

5.场景截图