python自动化测试脚本的简单实例_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:\Python37\python.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.场景截图

你可能感兴趣的:(python自动化测试脚本的简单实例_Python 3.7 + Selenium UI 自动化测试简单实例)