完整demo请参看:https://github.com/niununu/k2p_web_test
本文以修改用户名密码单元为案例,编写测试脚本。完成修改用户名密码模块单元测试。
(ps.这个demo中登陆密码为“admin”)
1. 打开浏览器,访问p.to
# 1. 打开浏览器,访问p.to
driver = webdriver.Chrome()
def openDriver():
driver.get("http://p.to")
driver.maximize_window()
2. 登陆
登陆这动作传入的参数只有一个“用户密码”
需要执行的操作有两个:1. 向输入框输入密码 2. 点击确定
需要注意的是在登陆的时候可能出现页面还没有加载出来,我们的程序就开始填写表单的情况。
为了防止异常出现,编写了函数waitandSendkeys和waitandClick来处理异常。(后面将会介绍异常处理函数)
class loginClass(object):
"""docstring for login"""
def __init__(self, arg):
self.login_pwd = arg
def login(self):
waitandSendkeys('//*[@id="Pwd"]', self.login_pwd)
waitandClick('//*[@id="Save"]')
3. 修改管理员密码
需要传入的参数有两个:1.旧密码 2. 新密码
要注意的是由于修改管理员密码是一个弹窗,所以要判断等弹窗弹出之后再进行操作
class changePwdClass(object):
"""docstring for changePwdClass"""
def __init__(self, pwdNew, pwdOld):
self.pwdNew = pwdNew
self.pwdOld = pwdOld
def changeUserPwd(self):
waitandClick('//*[@id="Con"]/div[1]/ul[2]/li[1]')
waitandClick('//*[@id="Con"]/div[1]/ul[2]/li[1]/ul/li[3]')
waitforDisplay('//*[@id="_Widget"]')
waitandSendkeys('//*[@id="PwdOld"]', self.pwdOld)
waitandSendkeys('//*[@id="PwdNew"]', self.pwdNew)
waitandSendkeys('//*[@id="PwdCfm"]', self.pwdNew)
waitandClick('//*[@id="SavePwd"]')
到这里,我们可以完成修改用户名密码这一动作。后面将进行单元测试。
4. 单元测试数据
修改用户名密码这个功能的防呆规则如下:
输入项 | 允许输入 | 可为空 | 格式规范 | 合法性 | 依赖项 |
---|---|---|---|---|---|
原管理员密码 | 是 | 否 | 字符串 | 长度限制:5-63; 字符集:英文字符集; | 需要与管理员密码相同 |
新管理员密码 | 是 | 否 | 字符串 | 长度限制:5-63; 字符集:英文字符集; | |
确认管理员密码 | 是 | 否 | 字符串 | 需要与新管理员密码相同 |
根据防呆规则可以列出:1.可能出现的错误 2.出现错误时页面应有的提示语
#可能出现的错误
errcode = ['oldPwdErr', 'lenErr', 'charErr', 'matchErr', 'pwdSameErr',\
'oldPwdBlankErr', 'newPwdBlankErr']
#出现错误时页面应有的提示语
errTips = {
'oldPwdErr' :'原密码错误',
'lenErr' : '新密码长度应为5~63位',
'charErr' : "新密码包含非法字符",
'matchErr' : '两次密码输入不一致',
'pwdSameErr' : '新密码与原密码相同,请重新输入',
'oldPwdBlankErr' : '请输入原密码',
'newPwdBlankErr' : '请输入新密码'
}
5. 检查输入的数据合法性
需要输入的数据为要检查的data和登陆密码
def checkData(data, loginPwd):#检查顺序跟页面顺序相同
pwd = loginPwd
#'oldPwdBlankErr'
if data['pwdOld'] == "":
return errcode[5]
#newPwdBlankErr
if data['pwdNew'] == "":
return errcode[6]
#charErr
strTmp = data['pwdNew']
for x in xrange(0,len(data['pwdNew'])):
if ord(strTmp[x]) < 33 or ord(strTmp[x]) > 127:#ASCII表示范围:32-127
return errcode[2]
#lenErr
if len(data['pwdNew']) > 63 or len(data['pwdNew']) < 5:
return errcode[1]
#oldPwdErr
if