用户注册功能
在用户注册页面,用户输入用户名,密码,昵称,图像文件(可以不上传)即可完成注册,但是如果昵称或者用户名被注册过了,就会显示账号或昵称已经存在
使用数据驱动DDT
让测试数据来驱动测试用例代码执行,使用测试套件把注册成功和注册失败的测试用例组织到一起进行一个整体的测试,对注册失败的测试用例进行错误捕捉并保存异常截图
,最后通过HTMLTestRunner生成HTML测试报告
注册成功
注册成功的测试用例
[
{
"username": "12345",
"password": "12345",
"nickname": "孙悟空",
"head": "D:\\photo\\18.jpg"
},
{
"username": "23456",
"password": "23456",
"nickname": "猪八戒",
"head": ""
},
{
"username": "34567",
"password": "34567",
"nickname": "唐三藏",
"head": "D:\\photo\\18.jpg"
},
{
"username": "45678",
"password": "45678",
"nickname": "沙和尚",
"head": "D:\\photo\\16.jpg"
},
{
"username": "abcde",
"password": "abcde",
"nickname": "黑旋风",
"head": "D:\\photo\\18.jpg"
},
{
"username": "bcdef",
"password": "bcdef",
"nickname": "豹子头",
"head": ""
},
{
"username": "cdefg",
"password": "cdefg",
"nickname": "行者",
"head": "D:\\photo\\18.jpg"
}
]
注册成功的自动化测试脚本
from selenium import webdriver
import time
import unittest
from ddt import ddt, unpack, data, file_data
@ddt
class RegisterTestOk(unittest.TestCase):
# 测试固件
def setUp(self):
# 获取谷歌浏览器驱动
self.driver = webdriver.Chrome()
# Web聊天室链接
self.url = "http://82.157.7.147:8080/chatroom/"
# 浏览器最大化
self.driver.maximize_window()
time.sleep(3)
def tearDown(self):
# 关闭浏览器,清除缓存
self.driver.quit()
# 测试用例
@file_data('./registerOkData.json')
def test_RegisterOk(self, username, password, nickname, head):
driver = self.driver
url = self.url
driver.get(url)
# 点击注册
driver.find_element_by_link_text("注册").click()
# 智能等待
driver.implicitly_wait(3)
# 输入注册信息
driver.find_element_by_xpath('//*[@id="app"]/form/div[1]/input').send_keys(username)
driver.find_element_by_xpath('//*[@id="app"]/form/div[2]/input').send_keys(password)
driver.find_element_by_xpath('//*[@id="app"]/form/div[3]/input').send_keys(nickname)
driver.find_element_by_xpath('//*[@id="app"]/form/div[4]/input').send_keys(head)
driver.find_element_by_xpath('//*[@id="app"]/form/div[6]/input').click()
time.sleep(3)
# 注册成功,关闭登陆成功弹窗
driver.switch_to.alert.accept()
time.sleep(3)
if __name__ == '__main__':
unittest.main()
注册失败
注册失败的测试用例
[
{
"username": "12345",
"password": "12345",
"nickname": "孙孙孙",
"head": "D:\\photo\\18.jpg"
},
{
"username": "22222",
"password": "23456",
"nickname": "猪八戒",
"head": "D:\\photo\\16.jpg"
},
{
"username": "34567",
"password": "34567",
"nickname": "唐唐唐",
"head": "D:\\photo\\18.jpg"
},
{
"username": "45678",
"password": "45678",
"nickname": "沙沙沙",
"head": ""
},
{
"username": "ccccc",
"password": "abcde",
"nickname": "黑旋风",
"head": "D:\\photo\\18.jpg"
},
{
"username": "bcdef",
"password": "bcdef",
"nickname": "豹子子",
"head": ""
},
{
"username": "eeeee",
"password": "cdefg",
"nickname": "行者",
"head": "D:\\photo\\16.jpg"
}
]
注册失败的自动化脚本
from selenium import webdriver
import time
import unittest
import os
from ddt import ddt, unpack, data, file_data
@ddt
class RegisterTestFalse(unittest.TestCase):
# 测试固件
def setUp(self):
self.driver = webdriver.Chrome()
self.url = "http://82.157.7.147:8080/chatroom/"
self.driver.maximize_window()
time.sleep(3)
def tearDown(self):
self.driver.quit()
# 保存异常截图
def saveScreenAsPhoto(self, driver, file_name):
if not os.path.exists("./image"):
os.makedirs("./image")
now = time.strftime("%Y%m%d-%H%M%S", time.localtime(time.time()))
driver.get_screenshot_as_file("./image/"+now+"-"+file_name)
time.sleep(2)
# 测试用例
@file_data('./registerFalseData.json')
def test_RegisterFalse(self, username, password, nickname, head):
driver = self.driver
url = self.url
driver.get(url)
driver.find_element_by_link_text("注册").click()
driver.implicitly_wait(3)
driver.find_element_by_xpath('//*[@id="app"]/form/div[1]/input').send_keys(username)
driver.find_element_by_xpath('//*[@id="app"]/form/div[2]/input').send_keys(password)
driver.find_element_by_xpath('//*[@id="app"]/form/div[3]/input').send_keys(nickname)
driver.find_element_by_xpath('//*[@id="app"]/form/div[4]/input').send_keys(head)
driver.find_element_by_xpath('//*[@id="app"]/form/div[6]/input').click()
time.sleep(3)
errorMessage = driver.find_element_by_xpath('//*[@id="app"]/form/div[5]').text
# 异常捕捉并保存错误截图
try:
self.assertFalse(errorMessage, msg="账号或密码已经存在")
except:
self.saveScreenAsPhoto(driver, 'false.png')
time.sleep(3)
if __name__ == '__main__':
unittest.main()
测试套件
使用测试套件组织测试用例一起执行,并生成HTML测试报告
import HTMLTestRunner
import os
import sys
import time
import unittest
from register_test import register_ok
from register_test import register_false
def createSuite():
suit1 = unittest.TestLoader().loadTestsFromTestCase(register_ok.RegisterTestOk)
suit2 = unittest.TestLoader().loadTestsFromTestCase(register_false.RegisterTestFalse)
suit = unittest.TestSuite([suit1, suit2])
return suit
if __name__ == '__main__':
curpath = sys.path[0]
if not os.path.exists(curpath + '/registerReport'):
os.makedirs(curpath + '/registerReport')
now = time.strftime("%Y-%m-%d-%H %M %S", time.localtime(time.time()))
fileName = curpath + '/registerReport/' + now + 'registerReport.html'
with open(fileName, 'wb') as fp:
runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u"测试报告", description=u"用例执行情况", verbosity=2)
suit = createSuite()
runner.run(suit)
HTML测试报告
因为对异常进行捕捉,并保存错误截图,所以注册失败的测试用例也是测试成功的
异常截图
用户登陆注册功能
在用户登陆页面,用户输入用户名,密码即可完成登陆,但是如果输入的用户名无效就会提示账号不存在,如果用户名正确但是密码输入错误就会提示密码错误
使用数据驱动DDT
让测试数据来驱动测试用例代码执行,使用测试套件把登陆成功和登陆失败的测试用例组织到一起进行一个整体的测试,对登陆失败的测试用例进行错误捕捉并保存异常截图
,最后通过HTMLTestRunner生成HTML测试报告
登陆成功
登陆成功测试用例
[
{
"username": "abc",
"password": "123"
},
{
"username": "12345",
"password": "12345"
},
{
"username": "23456",
"password": "23456"
},
{
"username": "34567",
"password": "34567"
},
{
"username": "abcde",
"password": "abcde"
}
]
登陆成功自动化测试脚本
from selenium import webdriver
import time
import unittest
from ddt import ddt, unpack, data, file_data
@ddt
class LoginTestOk(unittest.TestCase):
def setUp(self):
# 获取谷歌浏览器驱动
self.driver = webdriver.Chrome()
# Web聊天室链接
self.url = "http://82.157.7.147:8080/chatroom/"
# 浏览器最大化
self.driver.maximize_window()
time.sleep(3)
def tearDown(self):
# 关闭浏览器,清除缓存
self.driver.quit()
@file_data('./loginOkData.json')
def test_LoginOk(self, username, password):
driver = self.driver
url = self.url
driver.get(url)
time.sleep(3)
driver.find_element_by_xpath('//*[@id="app"]/form/div[1]/input').send_keys(username)
driver.find_element_by_xpath('//*[@id="app"]/form/div[2]/input').send_keys(password)
driver.find_element_by_xpath('//*[@id="app"]/form/div[4]/input').click()
time.sleep(3)
driver.switch_to.alert.accept()
time.sleep(3)
if __name__ == '__main__':
unittest.main()
账号不存在,登陆失败
账号不存在,登陆失败的测试用例
[
{
"username": "aaa",
"password": "123"
},
{
"username": "bbbbb",
"password": "12345"
},
{
"username": "65436",
"password": "23456"
},
{
"username": "daa32",
"password": "34567"
},
{
"username": "dd225",
"password": "abcde"
}
]
账号不存在,登陆失败的自动化测试脚本
import os
import time
import unittest
from ddt import ddt, file_data
from selenium import webdriver
@ddt
class LoginTestFalseNone(unittest.TestCase):
def setUp(self):
# 获取谷歌浏览器驱动
self.driver = webdriver.Chrome()
# Web聊天室链接
self.url = "http://82.157.7.147:8080/chatroom/"
# 浏览器最大化
self.driver.maximize_window()
time.sleep(3)
def tearDown(self):
# 关闭浏览器,清除缓存
self.driver.quit()
# 保存异常截图
def saveScreenAsPhoto(self, driver, file_name):
if not os.path.exists("./image"):
os.makedirs("./image")
now = time.strftime("%Y%m%d-%H%M%S", time.localtime(time.time()))
driver.get_screenshot_as_file("./image/" + now + "-" + file_name)
time.sleep(2)
@file_data('./loginFalseNone.json')
def test_LoginOk(self, username, password):
driver = self.driver
url = self.url
driver.get(url)
time.sleep(3)
# 输入登陆信息,点击登陆
driver.find_element_by_xpath('//*[@id="app"]/form/div[1]/input').send_keys(username)
driver.find_element_by_xpath('//*[@id="app"]/form/div[2]/input').send_keys(password)
driver.find_element_by_xpath('//*[@id="app"]/form/div[4]/input').click()
time.sleep(3)
errorMessage = driver.find_element_by_xpath('//*[@id="app"]/form/div[3]').text
try:
self.assertFalse(errorMessage, msg="账号不存在")
except:
self.saveScreenAsPhoto(driver, 'false-none.png')
time.sleep(3)
if __name__ == '__main__':
unittest.main()
密码错误,登陆失败
密码错误,登陆失败的测试用例
[
{
"username": "abc",
"password": "12345"
},
{
"username": "12345",
"password": "23456"
},
{
"username": "23456",
"password": "34567"
},
{
"username": "34567",
"password": "45678"
},
{
"username": "abcde",
"password": "abcdef"
}
]
密码错误,登陆失败的自动化测试脚本
import os
import time
import unittest
from ddt import ddt, file_data
from selenium import webdriver
@ddt
class LoginTestFalseError(unittest.TestCase):
def setUp(self):
# 获取谷歌浏览器驱动
self.driver = webdriver.Chrome()
# Web聊天室链接
self.url = "http://82.157.7.147:8080/chatroom/"
# 浏览器最大化
self.driver.maximize_window()
time.sleep(3)
def tearDown(self):
# 关闭浏览器,清除缓存
self.driver.quit()
# 保存异常时截图
def saveScreenAsPhoto(self, driver, file_name):
if not os.path.exists("./image"):
os.makedirs("./image")
now = time.strftime("%Y%m%d-%H%M%S", time.localtime(time.time()))
driver.get_screenshot_as_file("./image/" + now + "-" + file_name)
time.sleep(2)
@file_data('./loginFalseError.json')
def test_LoginOk(self, username, password):
driver = self.driver
url = self.url
driver.get(url)
time.sleep(3)
# 输入登陆信息,点击登陆
driver.find_element_by_xpath('//*[@id="app"]/form/div[1]/input').send_keys(username)
driver.find_element_by_xpath('//*[@id="app"]/form/div[2]/input').send_keys(password)
driver.find_element_by_xpath('//*[@id="app"]/form/div[4]/input').click()
time.sleep(3)
errorMessage = driver.find_element_by_xpath('//*[@id="app"]/form/div[3]').text
try:
self.assertFalse(errorMessage, msg="密码错误")
except:
self.saveScreenAsPhoto(driver, 'false-error.png')
time.sleep(3)
if __name__ == '__main__':
unittest.main()
测试套件
使用测试套件组织测试用例一起执行,并生成HTML测试报告
from login_test import login_false_none
from login_test import login_false_error
def createSuite():
# 登陆成功的测试脚本
suit1 = unittest.TestLoader().loadTestsFromTestCase(login_ok.LoginTestOk)
# 账号不存在的测试脚本
suit2 = unittest.TestLoader().loadTestsFromTestCase(login_false_none.LoginTestFalseNone)
# 密码错误的测试脚本
suit3 = unittest.TestLoader().loadTestsFromTestCase(login_false_error.LoginTestFalseError)
suit = unittest.TestSuite([suit1, suit2, suit3])
return suit
if __name__ == '__main__':
curpath = sys.path[0]
if not os.path.exists(curpath + '/loginReport'):
os.makedirs(curpath + '/loginReport')
now = time.strftime("%Y-%m-%d-%H %M %S", time.localtime(time.time()))
fileName = curpath + '/loginReport/' + now + 'loginReport.html'
with open(fileName, 'wb') as fp:
runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u"测试报告", description=u"用例执行情况", verbosity=2)
suit = createSuite()
runner.run(suit)
HTML测试报告
因为对异常进行捕捉,并保存错误截图,所以登陆失败的测试用例也是测试成功的
异常截图
账号不存在,捕捉保存的异常图片
密码错误,捕捉保存的异常图片