【测试开发】博客系统——利用selenium的unittest框架进行基本功能测试并生成HTML报告
编写基本功能测试用例脚本(包含测试固件)
登陆模块
import time
from selenium import webdriver
import unittest
class Login(unittest.TestCase):
# Test继承自unittest.TestCase
# 测试固件 setup和tearDown
# 这里的self相当于是一个实例
def setUp(self):
self.driver = webdriver.Chrome()
self.url = "http://127.0.0.1:8080/BlogSystem/blog_login.html"
self.driver.maximize_window()
def tearDown(self):
self.driver.quit()
# 测试方法名必须要test_不然不执行
def test_login(self):
driver = self.driver
driver.get(self.url)
driver.implicitly_wait(5)
driver.find_element_by_id("username").send_keys("zhangsan")
driver.find_element_by_id("password").send_keys("123")
driver.find_element_by_id("submit").click()
time.sleep(3)
self.assertEqual("zhangsan", driver.find_element_by_xpath("/html/body/div[2]/div[1]/div/h3").text,msg="登陆失败")
if __name__ == "__main__":
unittest.main(2)
'''
可以增加verbosity参数,例如unittest.main(verbosity=2)
在主函数中,直接调用main() ,在main中加入verbosity=2 ,这样测试的结果就会显示的更加详细。
这里的verbosity 是一个选项, 表示测试结果的信息复杂度,有三个值:
0 ( 静默模式): 你只能获得总的测试用例数和总的结果比如总共100个失败,20 成功80
1 ( 默认模式): 非常类似静默模式只是在每个成功的用例前面有个“ . ” 每个失败的用例前面有个“F”
2 ( 详细模式): 测试结果会显示每个测试用例的所有相关的信息
'''
发布博客模块
import time
from selenium import webdriver
import unittest
class Edit(unittest.TestCase):
# Test继承自unittest.TestCase
# 测试固件 setup和tearDown
# 这里的self相当于是一个实例
def setUp(self):
self.driver = webdriver.Chrome()
self.url = "http://127.0.0.1:8080/BlogSystem/blog_login.html"
self.driver.maximize_window()
def tearDown(self):
self.driver.quit()
# 测试方法名必须要test_不然不执行
def test_edit(self):
driver = self.driver
driver.get(self.url)
driver.implicitly_wait(5)
driver.find_element_by_id("username").send_keys("zhangsan")
driver.find_element_by_id("password").send_keys("123")
driver.find_element_by_id("submit").click()
time.sleep(3)
driver.find_element_by_xpath("/html/body/div[1]/a[2]").click()
driver.find_element_by_id("title").send_keys("自动测试")
time.sleep(3)
driver.find_element_by_id("submit").click()
time.sleep(3)
self.assertEqual("自动测试", driver.find_element_by_xpath("/html/body/div[2]/div[2]/div[1]/div[1]").text)
if __name__ == "__main__":
unittest.main(2)
'''
可以增加verbosity参数,例如unittest.main(verbosity=2)
在主函数中,直接调用main() ,在main中加入verbosity=2 ,这样测试的结果就会显示的更加详细。
这里的verbosity 是一个选项, 表示测试结果的信息复杂度,有三个值:
0 ( 静默模式): 你只能获得总的测试用例数和总的结果比如总共100个失败,20 成功80
1 ( 默认模式): 非常类似静默模式只是在每个成功的用例前面有个“ . ” 每个失败的用例前面有个“F”
2 ( 详细模式): 测试结果会显示每个测试用例的所有相关的信息
'''
删除博客模块
import time
from selenium import webdriver
import unittest
class Delete(unittest.TestCase):
# Test继承自unittest.TestCase
# 测试固件 setup和tearDown
# 这里的self相当于是一个实例
def setUp(self):
self.driver = webdriver.Chrome()
self.url = "http://127.0.0.1:8080/BlogSystem/blog_login.html"
self.driver.maximize_window()
def tearDown(self):
self.driver.quit()
# 测试方法名必须要test_不然不执行
def test_delete(self):
driver = self.driver
driver.get(self.url)
driver.implicitly_wait(5)
driver.find_element_by_id("username").send_keys("zhangsan")
driver.find_element_by_id("password").send_keys("123")
driver.find_element_by_id("submit").click()
time.sleep(3)
driver.find_element_by_xpath("/html/body/div[1]/a[2]").click()
driver.find_element_by_id("title").send_keys("自动测试")
time.sleep(3)
driver.find_element_by_id("submit").click()
time.sleep(3)
driver.find_element_by_xpath("/html/body/div[2]/div[2]/div[1]/a").click()
time.sleep(3)
driver.find_element_by_xpath("/html/body/div[1]/a[4]").click()
time.sleep(3)
self.assertNotEqual("自动测试", driver.find_element_by_xpath("/html/body/div[2]/div[2]/div[1]/div[1]").text)
if __name__ == "__main__":
unittest.main(2)
'''
可以增加verbosity参数,例如unittest.main(verbosity=2)
在主函数中,直接调用main() ,在main中加入verbosity=2 ,这样测试的结果就会显示的更加详细。
这里的verbosity 是一个选项, 表示测试结果的信息复杂度,有三个值:
0 ( 静默模式): 你只能获得总的测试用例数和总的结果比如总共100个失败,20 成功80
1 ( 默认模式): 非常类似静默模式只是在每个成功的用例前面有个“ . ” 每个失败的用例前面有个“F”
2 ( 详细模式): 测试结果会显示每个测试用例的所有相关的信息
'''
注销模块
import time
from selenium import webdriver
import unittest
class Logout(unittest.TestCase):
# Test继承自unittest.TestCase
# 测试固件 setup和tearDown
# 这里的self相当于是一个实例
def setUp(self):
self.driver = webdriver.Chrome()
self.url = "http://127.0.0.1:8080/BlogSystem/blog_login.html"
self.driver.maximize_window()
def tearDown(self):
self.driver.quit()
# 测试方法名必须要test_不然不执行
def test_logout(self):
driver = self.driver
driver.get(self.url)
driver.implicitly_wait(5)
driver.find_element_by_id("username").send_keys("zhangsan")
driver.find_element_by_id("password").send_keys("123")
driver.find_element_by_id("submit").click()
time.sleep(3)
driver.find_element_by_xpath("/html/body/div[1]/a[3]").click()
time.sleep(3)
self.assertEqual("登录", driver.find_element_by_xpath("/html/body/div[2]/div/form/h3").text)
if __name__ == "__main__":
unittest.main(2)
'''
可以增加verbosity参数,例如unittest.main(verbosity=2)
在主函数中,直接调用main() ,在main中加入verbosity=2 ,这样测试的结果就会显示的更加详细。
这里的verbosity 是一个选项, 表示测试结果的信息复杂度,有三个值:
0 ( 静默模式): 你只能获得总的测试用例数和总的结果比如总共100个失败,20 成功80
1 ( 默认模式): 非常类似静默模式只是在每个成功的用例前面有个“ . ” 每个失败的用例前面有个“F”
2 ( 详细模式): 测试结果会显示每个测试用例的所有相关的信息
'''
利用unittest框架的测试套件进行功能测试
runall.py
import time
# 导入test_baidu1,test_baidu2
import test_login
import test_logout
import test_delete
import test_edit
import unittest
import HTMLTestRunner
import os,sys
# 手工添加案例到套件,
def createsuite():
suite = unittest.TestSuite()
# 将测试用例加入到测试容器(套件)中
discover = unittest.defaultTestLoader.discover('../BlogSystem_test', pattern='test*.py', top_level_dir=None)
print (discover)
return discover
if __name__ == "__main__":
curpath = sys.path[0]
# 解决重复命名的问题
now = time.strftime("%Y-%m-%d-%H %M %S", time.localtime(time.time()))
# 当前路径下resulreport文件夹不存在的时候就创建一个
if not os.path.exists(curpath + '/resultreport'):
os.makedirs(curpath + '/resultreport')
# 文件名是路径加上文件的名称
# 准备HTML报告输出的文件
filename = curpath + '/resultreport/' + now + 'resultreport.html'
# 打开HTML文件,wb 以写的方式
with open(filename, 'wb') as fp:
# 出html报告,括号里的参数是HTML报告里的参数
runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'测试报告', description=u'用例执行情况',verbosity=2)
suite = createsuite()
runner.run(suite)